接入司机开票申请待办流程

This commit is contained in:
jsowell
2026-07-16 17:06:49 +08:00
parent 974e68cf54
commit cbc2e3c721
13 changed files with 353 additions and 20 deletions

View File

@@ -90,7 +90,7 @@ public class OrderInvoiceRecordController extends BaseController {
@Log(title = "申请开票", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody OrderInvoiceRecord orderInvoiceRecord) {
return toAjax(orderInvoiceRecordService.updateOrderInvoiceRecord(orderInvoiceRecord));
return toAjax(orderInvoiceRecordService.updateOrderInvoiceRecord(orderInvoiceRecord, getUserId(), getUsername()));
}
/**
@@ -100,6 +100,6 @@ public class OrderInvoiceRecordController extends BaseController {
@Log(title = "申请开票", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Integer[] ids) {
return toAjax(orderInvoiceRecordService.deleteOrderInvoiceRecordByIds(ids));
return toAjax(orderInvoiceRecordService.deleteOrderInvoiceRecordByIds(ids, getUsername()));
}
}

View File

@@ -0,0 +1,117 @@
package com.jsowell.pile.service;
import com.jsowell.pile.domain.OrderInvoiceRecord;
import com.jsowell.pile.domain.PileMerchantInfo;
import com.jsowell.pile.mapper.OrderInvoiceRecordMapper;
import com.jsowell.pile.service.impl.OrderInvoiceRecordServiceImpl;
import com.jsowell.system.constant.TodoTaskConstants;
import com.jsowell.system.domain.SysTodoTask;
import com.jsowell.system.domain.dto.TodoTaskCreateCommand;
import com.jsowell.system.service.TodoTaskAssigneeService;
import com.jsowell.system.service.TodoTaskService;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
class OrderInvoiceRecordTodoTest {
@Test
void insert_shouldCreateTodoForEachMerchantUser() {
OrderInvoiceRecordMapper mapper = mock(OrderInvoiceRecordMapper.class);
PileMerchantInfoService merchantService = mock(PileMerchantInfoService.class);
TodoTaskAssigneeService assigneeService = mock(TodoTaskAssigneeService.class);
TodoTaskService todoTaskService = mock(TodoTaskService.class);
OrderInvoiceRecordServiceImpl service = newService(mapper, merchantService, assigneeService, todoTaskService);
OrderInvoiceRecord invoiceRecord = new OrderInvoiceRecord();
invoiceRecord.setMerchantId("100");
doAnswer(invocation -> {
OrderInvoiceRecord record = invocation.getArgument(0);
record.setId(55);
return 1;
}).when(mapper).insertOrderInvoiceRecord(invoiceRecord);
PileMerchantInfo merchantInfo = new PileMerchantInfo();
merchantInfo.setDeptId("200");
when(merchantService.selectPileMerchantInfoById(100L)).thenReturn(merchantInfo);
when(assigneeService.findActiveUserIdsByDeptTree(200L)).thenReturn(Arrays.asList(8L, 9L));
when(todoTaskService.createTask(any(TodoTaskCreateCommand.class))).thenReturn(new SysTodoTask());
service.insertOrderInvoiceRecord(invoiceRecord);
ArgumentCaptor<TodoTaskCreateCommand> captor = ArgumentCaptor.forClass(TodoTaskCreateCommand.class);
verify(todoTaskService, times(2)).createTask(captor.capture());
List<TodoTaskCreateCommand> commands = captor.getAllValues();
assertEquals(Arrays.asList(8L, 9L), Arrays.asList(
commands.get(0).getAssigneeUserId(), commands.get(1).getAssigneeUserId()));
assertEquals("ORDER_INVOICE_RECORD", commands.get(0).getBusinessType());
assertEquals("55", commands.get(0).getBusinessId());
assertEquals("invoiceDetail", commands.get(0).getRouteName());
assertEquals(TodoTaskConstants.PRIORITY_IMPORTANT, commands.get(0).getPriority());
assertEquals("INVOICE_REVIEW:ORDER_INVOICE_RECORD:55:8", commands.get(0).getIdempotentKey());
}
@Test
void updateCompleted_shouldCompleteBusinessTodos() {
OrderInvoiceRecordMapper mapper = mock(OrderInvoiceRecordMapper.class);
TodoTaskService todoTaskService = mock(TodoTaskService.class);
OrderInvoiceRecordServiceImpl service = newService(mapper, mock(PileMerchantInfoService.class),
mock(TodoTaskAssigneeService.class), todoTaskService);
OrderInvoiceRecord invoiceRecord = new OrderInvoiceRecord();
invoiceRecord.setId(55);
invoiceRecord.setStatus("1");
when(mapper.updateOrderInvoiceRecord(invoiceRecord)).thenReturn(1);
service.updateOrderInvoiceRecord(invoiceRecord, 1L, "admin");
verify(todoTaskService).completeByBusiness("ORDER_INVOICE_RECORD", "55", null, 1L, "admin");
}
@Test
void delete_shouldCancelBusinessTodos() {
OrderInvoiceRecordMapper mapper = mock(OrderInvoiceRecordMapper.class);
TodoTaskService todoTaskService = mock(TodoTaskService.class);
OrderInvoiceRecordServiceImpl service = newService(mapper, mock(PileMerchantInfoService.class),
mock(TodoTaskAssigneeService.class), todoTaskService);
Integer[] ids = { 55, 56 };
when(mapper.deleteOrderInvoiceRecordByIds(ids)).thenReturn(2);
service.deleteOrderInvoiceRecordByIds(ids, "admin");
verify(todoTaskService).cancelByBusiness("ORDER_INVOICE_RECORD", "55", null,
"admin", "开票申请已关闭");
verify(todoTaskService).cancelByBusiness("ORDER_INVOICE_RECORD", "56", null,
"admin", "开票申请已关闭");
}
private static OrderInvoiceRecordServiceImpl newService(OrderInvoiceRecordMapper mapper,
PileMerchantInfoService merchantService, TodoTaskAssigneeService assigneeService,
TodoTaskService todoTaskService) {
OrderInvoiceRecordServiceImpl service = new OrderInvoiceRecordServiceImpl();
setField(service, "orderInvoiceRecordMapper", mapper);
setField(service, "pileMerchantInfoService", merchantService);
setField(service, "todoTaskAssigneeService", assigneeService);
setField(service, "todoTaskService", todoTaskService);
return service;
}
private static void setField(Object target, String fieldName, Object value) {
try {
Field field = target.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
field.set(target, value);
} catch (Exception exception) {
throw new RuntimeException(exception);
}
}
}