diff --git a/oms_web/oms_vue/src/api/finance/paymentRefund.js b/oms_web/oms_vue/src/api/finance/paymentRefund.js new file mode 100644 index 00000000..c24abe03 --- /dev/null +++ b/oms_web/oms_vue/src/api/finance/paymentRefund.js @@ -0,0 +1,34 @@ +import request from '@/utils/request' +import {tansParams} from "@/utils/ruoyi"; + +// 查询付款退款待审批列表 +export function listPaymentRefundApprove(query) { + return request({ + url: '/finance/payment/approve/list', + method: 'post', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + data: query + }) +} + +// 查询付款退款已审批列表 +export function listPaymentRefundApproved(query) { + return request({ + url: '/finance/payment/approved/list', + method: 'post', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + params: query + }) +} + +// 查询付款退款详情 +export function getPaymentRefund(id) { + return request({ + url: '/finance/paymentRefund/' + id, + method: 'get' + }) +} diff --git a/oms_web/oms_vue/src/views/approve/finance/payment/approved/index.vue b/oms_web/oms_vue/src/views/approve/finance/payment/approved/index.vue index b1aa8547..e794b165 100644 --- a/oms_web/oms_vue/src/views/approve/finance/payment/approved/index.vue +++ b/oms_web/oms_vue/src/views/approve/finance/payment/approved/index.vue @@ -20,9 +20,9 @@ - + - + @@ -84,7 +84,8 @@ export default { pageSize: 10, paymentNo: null, manufacturer: null, - projectName: null + projectName: null, + processKey: 'finance_payment', }, detailDialogVisible: false, detailLoading: false, diff --git a/oms_web/oms_vue/src/views/approve/finance/payment/index.vue b/oms_web/oms_vue/src/views/approve/finance/payment/index.vue index e71ae528..c03e05be 100644 --- a/oms_web/oms_vue/src/views/approve/finance/payment/index.vue +++ b/oms_web/oms_vue/src/views/approve/finance/payment/index.vue @@ -32,9 +32,9 @@ - + - + @@ -111,7 +111,8 @@ export default { pageSize: 10, paymentNo: null, manufacturer: null, - projectName: null + projectName: null, + processKey: 'finance_payment', }, detailDialogVisible: false, detailLoading: false, diff --git a/oms_web/oms_vue/src/views/approve/finance/paymentRefund/approved/index.vue b/oms_web/oms_vue/src/views/approve/finance/paymentRefund/approved/index.vue new file mode 100644 index 00000000..d0589de7 --- /dev/null +++ b/oms_web/oms_vue/src/views/approve/finance/paymentRefund/approved/index.vue @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + 搜索 + 重置 + + + + + + + + + + + + + + 详情 + + + + + + + + + + + + + 付款编号: {{ form.paymentBillCode }} + + + + 流转意见 + + + + + {{ log.approveOpinion }} + 操作人: {{ log.approveUserName }} + 审批状态: {{ getStatusText(log.approveStatus) }} + + + + 暂无流转过程数据。 + + + + 关 闭 + + + + + + + + diff --git a/oms_web/oms_vue/src/views/approve/finance/paymentRefund/components/PaymentRefundDetail.vue b/oms_web/oms_vue/src/views/approve/finance/paymentRefund/components/PaymentRefundDetail.vue new file mode 100644 index 00000000..0ddcbb63 --- /dev/null +++ b/oms_web/oms_vue/src/views/approve/finance/paymentRefund/components/PaymentRefundDetail.vue @@ -0,0 +1,54 @@ + + + + {{ data.paymentBillCode }} + {{ data.vendorName }} + + + + {{ data.totalPriceWithTax }} + {{ data.totalPriceWithoutTax }} + {{ data.taxAmount }} + + + + {{ data.payBankNumber }} + {{ data.payName }} + {{ data.payBankOpenAddress }} + {{ data.bankNumber }} + {{ data.remark }} + + + + 退款明细列表 + + + + + + + + + + + + + + + diff --git a/oms_web/oms_vue/src/views/approve/finance/paymentRefund/index.vue b/oms_web/oms_vue/src/views/approve/finance/paymentRefund/index.vue new file mode 100644 index 00000000..29ff67db --- /dev/null +++ b/oms_web/oms_vue/src/views/approve/finance/paymentRefund/index.vue @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + 搜索 + 重置 + + + + + + 审批历史 + + + + + + + + + + + + + + + 审批 + + + + + + + + + + + + + 付款编号: {{ form.paymentBillCode }} + + + + 流转意见 + + + + + {{ log.approveOpinion }} + 操作人: {{ log.approveUserName }} + 审批状态: {{ getStatusText(log.approveStatus) }} + + + + 暂无流转过程数据。 + + + + 同意 + 驳回 + 取 消 + + + + + + + + + + + + 取 消 + 确 定 + + + + + + + + diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index a7183201..4d3cf0e5 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -147,6 +147,7 @@ process: purchaseOrderApprove: purchase_order_online financePayment: finance_payment financeRefund: finance_refund + fiananceTicket: fianance_ticket #业务执行实例bean name ,可以按审批节点配置 业务审批回调方法处理业务逻辑. key 为流程节点主键ID value 要执行的业务方法名称,不配置则默认调用TodoCommonTemplate.todoApproveCallback instance: @@ -160,6 +161,8 @@ process: beanName: omsPaymentBillServiceImpl financeRefund: beanName: omsPaymentBillServiceImpl + fiananceTicket: + beanName: omsTicketBillServiceImpl unis: inventory: allAuthRole: 103,101 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/flow/Definition.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/flow/Definition.java index f4061835..34862637 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/flow/Definition.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/flow/Definition.java @@ -15,5 +15,7 @@ public class Definition { private String purchaseOrderApprove; private String financePayment; private String financeRefund; + private String fiananceTicket; + private String financeTicketRefound; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/flow/Instance.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/flow/Instance.java index cd22842e..61b13d50 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/flow/Instance.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/flow/Instance.java @@ -17,6 +17,8 @@ public class Instance { private Map purchase_order_online; private Map finance_payment; private Map finance_refund; + private Map fianance_ticket; + private Map finance_ticket_refound; } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java index 19d5e298..38e49b06 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java @@ -1,9 +1,13 @@ package com.ruoyi.sip.controller; +import java.lang.reflect.Array; +import java.util.Arrays; import java.util.Collections; import java.util.List; +import com.ruoyi.common.config.flow.ProcessConfig; import com.ruoyi.sip.domain.OmsFinAttachment; +import com.ruoyi.sip.flowable.service.TodoService; import com.ruoyi.sip.service.IOmsFinAttachmentService; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +40,10 @@ public class OmsPaymentBillController extends BaseController private IOmsPaymentBillService omsPaymentBillService; @Autowired private IOmsFinAttachmentService omsFinAttachmentService; + @Autowired + private TodoService todoService; + @Autowired + private ProcessConfig processConfig; @RequiresPermissions("finance:payment:view") @GetMapping() @@ -54,6 +62,10 @@ public class OmsPaymentBillController extends BaseController { startPage(); List list = omsPaymentBillService.selectOmsPaymentBillList(omsPaymentBill); + clearPage(); + todoService.fillApproveNode(list, + Arrays.asList(processConfig.getDefinition().getFinancePayment(), processConfig.getDefinition().getFinanceRefund()) + , OmsPaymentBill::getPaymentBillCode, (a, b) -> a.setApproveNode(b.get(a.getPaymentBillCode()))); return getDataTable(list); } @@ -64,6 +76,10 @@ public class OmsPaymentBillController extends BaseController public TableDataInfo listApprove(OmsPaymentBill omsPaymentBill) { startPage(); List list = omsPaymentBillService.listApprove(omsPaymentBill); + clearPage(); + todoService.fillApproveNode(list, + Arrays.asList(processConfig.getDefinition().getFinancePayment(), processConfig.getDefinition().getFinanceRefund()) + , OmsPaymentBill::getPaymentBillCode, (a, b) -> a.setApproveNode(b.get(a.getPaymentBillCode()))); return getDataTable(list); } @@ -73,6 +89,10 @@ public class OmsPaymentBillController extends BaseController public TableDataInfo listApproved(OmsPaymentBill omsPaymentBill) { startPage(); List list = omsPaymentBillService.listApproved(omsPaymentBill); + clearPage(); + todoService.fillApproveNode(list, + Arrays.asList(processConfig.getDefinition().getFinancePayment(), processConfig.getDefinition().getFinanceRefund()) + , OmsPaymentBill::getPaymentBillCode, (a, b) -> a.setApproveNode(b.get(a.getPaymentBillCode()))); return getDataTable(list); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/flowable/service/TodoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/flowable/service/TodoService.java index 8d17fa04..83f5ef38 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/flowable/service/TodoService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/flowable/service/TodoService.java @@ -8,6 +8,8 @@ import org.flowable.engine.runtime.ProcessInstance; import java.util.List; import java.util.Map; +import java.util.function.BiConsumer; +import java.util.function.Function; /** * 待办Service接口 @@ -137,6 +139,7 @@ public interface TodoService void fillOrderApproveNode(List list); void fillPurchaseOrderApproveNode(List list); + void fillApproveNode(List list, List processKeyList, Function function, BiConsumer> consumer); AjaxResult statisticsTodo(); diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/flowable/service/impl/TodoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/flowable/service/impl/TodoServiceImpl.java index 816fa0c9..74c39f44 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/flowable/service/impl/TodoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/flowable/service/impl/TodoServiceImpl.java @@ -36,6 +36,8 @@ import javax.annotation.Resource; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -335,7 +337,7 @@ public class TodoServiceImpl implements TodoService { // String orderFlowKey = ProjectOrderInfo.ProcessTypeEnum.ONLINE.getCode().equals(projectOrderInfo.getProcessType()) ? // orderOnlineFlowKey : orderOfflineFlowKey; //启动流程 - ProcessInstance processInstance = startProcess(flowBusinessKey, variables, processConfig.getDefinition().getFinancePayment()); + ProcessInstance processInstance = startProcess(flowBusinessKey, variables,processKey); completed(null, null, flowBusinessKey); return processInstance; } @@ -399,6 +401,23 @@ public class TodoServiceImpl implements TodoService { } } + @Override + public void fillApproveNode(List list, List processKeyList, Function function, BiConsumer> consumer) { + List businessKeyList = list.stream().map(function).collect(Collectors.toList()); + if (CollUtil.isEmpty(businessKeyList)) { + return; + } + List todoList = todoMapper.listTodoByBusinessKeyAndProcessKey(businessKeyList, processKeyList); + Map approveUserNameMap = todoList.stream() + .collect(Collectors.groupingBy(Todo::getBusinessKey, + Collectors.mapping(Todo::getApproveUserName, + Collectors.joining("、")))); + + for (T orderInfo : list) { + consumer.accept(orderInfo, approveUserNameMap); + } + } + @Override public AjaxResult statisticsTodo() { Long userId = ShiroUtils.getUserId(); diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsTicketBillMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsTicketBillMapper.java index 4973c57a..5b3891cc 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsTicketBillMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsTicketBillMapper.java @@ -61,4 +61,6 @@ public interface OmsTicketBillMapper public int selectMaxCodeByPrefix(String codePrefix); + void updateOmsTicketBillByCode(OmsTicketBill omsTicketBill); + } \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java index 402731a2..5feb740c 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java @@ -279,7 +279,7 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC } else { if (approveBtn.equals(0)) { handleRejectOrder(businessKey); - }else{ + }else if (taskName.startsWith("财务")){ handleCompanyLeaderApproval(businessKey); } } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java index a0136fab..e5c4b426 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java @@ -1,11 +1,13 @@ package com.ruoyi.sip.service.impl; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.config.flow.ProcessConfig; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.ApproveStatusEnum; @@ -15,9 +17,13 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.sip.domain.*; import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO; +import com.ruoyi.sip.flowable.domain.Todo; +import com.ruoyi.sip.flowable.service.TodoCommonTemplate; +import com.ruoyi.sip.flowable.service.TodoService; import com.ruoyi.sip.service.IOmsFinAttachmentService; import com.ruoyi.sip.service.IOmsPayableBillService; import com.ruoyi.sip.service.IOmsPayableTicketDetailService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.sip.mapper.OmsTicketBillMapper; @@ -35,7 +41,7 @@ import org.springframework.web.multipart.MultipartFile; */ @Service @Transactional -public class OmsTicketBillServiceImpl implements IOmsTicketBillService +public class OmsTicketBillServiceImpl implements IOmsTicketBillService, TodoCommonTemplate { @Autowired private OmsTicketBillMapper omsTicketBillMapper; @@ -45,7 +51,11 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService private IOmsFinAttachmentService omsFinAttachmentService; @Autowired private IOmsPayableBillService payableBillService; + @Autowired + private TodoService todoService; + @Autowired + private ProcessConfig processConfig; /** * 查询采购收票单 * @@ -182,7 +192,11 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService omsTicketBill.setTicketPriceWithoutTax(bill.getTicketPriceWithoutTax()); omsTicketBill.setTicketType(bill.getTicketType()); updateOmsTicketBill(omsTicketBill); -//todo 开启审批流程 + todoService.startProcessDeleteBefore(omsTicketBill.getTicketBillCode(), omsTicketBill.getTicketBillCode(), + new HashMap() {{ + put("applyUserName", ShiroUtils.getSysUser().getUserName()); + put("applyUser", ShiroUtils.getUserId()); + }}, processConfig.getDefinition().getFiananceTicket()); return AjaxResult.success(attachment); } @@ -231,11 +245,12 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService updateOmsTicketBill(originalBill); //4 创建付款明细 payableTicketDetailService.applyRefund(originalBill.getTicketBillCode(),refundBill.getTicketBillCode()); - //5.todo 开始退款审批流程 - - - - + //5. 开始退款审批流程 + todoService.startProcessDeleteBefore(originalBill.getTicketBillCode(), originalBill.getTicketBillCode(), + new HashMap() {{ + put("applyUserName", ShiroUtils.getSysUser().getUserName()); + put("applyUser", ShiroUtils.getUserId()); + }}, processConfig.getDefinition().getFinanceTicketRefound()); return AjaxResult.success("退款申请已提交,新的退款单号为:" + refundBill.getTicketBillCode()); } @@ -272,4 +287,61 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService throw new RuntimeException("退回付款单操作失败:" + e.getMessage(), e); } } + + + @Override + public Object todoDetail(String businessKey, String processKey, String todoId) { + return null; + } + + @Override + public Object completedTodoDetail(String businessKey, String processKey, String todoId) { + return null; + } + + @Override + public boolean todoApproveCallback(Todo todo) { + + if (CollUtil.isEmpty(todo.getVariables())) { + return TodoCommonTemplate.super.todoApproveCallback(todo); + } + + Integer approveBtn = (Integer) todo.getVariables().get("approveBtn"); + if (approveBtn == null) { + return TodoCommonTemplate.super.todoApproveCallback(todo); + } + String taskName = todo.getTaskName(); + String businessKey = todo.getBusinessKey(); + + if (approveBtn.equals(0)) { + handleRejectOrder(businessKey); + } else if (taskName.startsWith("财务")) { + handleCompanyLeaderApproval(businessKey); + } + return TodoCommonTemplate.super.todoApproveCallback(todo); + } + private void handleRejectOrder(String businessKey) { + OmsTicketBill omsTicketBill = new OmsTicketBill(); + omsTicketBill.setTicketBillCode(businessKey); + omsTicketBill.setApproveStatus(ApproveStatusEnum.APPROVE_REJECT.getCode()); + omsTicketBillMapper.updateOmsTicketBillByCode(omsTicketBill); + } + private void handleCompanyLeaderApproval(String businessKey){ + OmsTicketBill omsTicketBill = new OmsTicketBill(); + omsTicketBill.setTicketBillCode(businessKey); + omsTicketBill.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode()); + omsTicketBill.setApproveTime(DateUtils.getNowDate()); + omsTicketBillMapper.updateOmsTicketBillByCode(omsTicketBill); + } + + + @Override + public boolean multiInstanceApproveCallback(String activityName, ProcessInstance processInstance) { + return TodoCommonTemplate.super.multiInstanceApproveCallback(activityName, processInstance); + } + + @Override + public void fillBusinessInfo(List todoCompletedList) { + + } } \ No newline at end of file diff --git a/ruoyi-sip/src/main/resources/mapper/finance/OmsPaymentBillMapper.xml b/ruoyi-sip/src/main/resources/mapper/finance/OmsPaymentBillMapper.xml index e3c52853..5cf3c57d 100644 --- a/ruoyi-sip/src/main/resources/mapper/finance/OmsPaymentBillMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/finance/OmsPaymentBillMapper.xml @@ -137,7 +137,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where pb.id = #{id} - group by pb.id + @@ -351,7 +351,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join oms_vendor_info t2 on pb.vendor_code = t2.vendor_code left join project_order_info t4 on pb.order_code = t4.order_code left join sys_user t5 on t5.user_id = t4.duty - inner join ${tableName} t3 on (t3.process_key in ('finance_payment') and t3.approve_user=#{entity.approveUser} and t3.task_name!='商务' and t3.business_key=pb.payment_bill_code) + inner join ${tableName} t3 on (t3.process_key in (#{entity.processKey}) and t3.approve_user=#{entity.approveUser} and t3.task_name!='商务' and t3.business_key=pb.payment_bill_code) and pb.payment_bill_code like concat('%', #{entity.paymentBillCode}, '%') and pb.payment_bill_type = #{entity.paymentBillType} diff --git a/ruoyi-sip/src/main/resources/mapper/sip/OmsTicketBillMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/OmsTicketBillMapper.xml index 0baccf24..fa14e0d0 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/OmsTicketBillMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/OmsTicketBillMapper.xml @@ -315,6 +315,79 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} + + update oms_ticket_bill + + + + ticket_type = #{ticketType}, + + + ticket_bill_type = #{ticketBillType}, + + + vendor_ticket_time = #{vendorTicketTime}, + + + ticket_time = #{ticketTime}, + + + vendor_code = #{vendorCode}, + + + total_price_with_tax = #{totalPriceWithTax}, + + + ticket_price_with_tax = #{ticketPriceWithTax}, + + + total_price_without_tax = #{totalPriceWithoutTax}, + + + ticket_price_without_tax = #{ticketPriceWithoutTax}, + + + tax_rate = #{taxRate}, + + + create_by = #{createBy}, + + + create_time = #{createTime}, + + + update_by = #{updateBy}, + + + update_time = #{updateTime}, + + + remark = #{remark}, + + + del_flag = #{delFlag}, + + + actual_ticket_time = #{actualTicketTime}, + + + ticket_status = #{ticketStatus}, + + + approve_status = #{approveStatus}, + + + approve_node = #{approveNode}, + + + approve_time = #{approveTime}, + + + refund_status = #{refundStatus}, + + + where ticket_bill_code = #{ticketBillCode} + delete from oms_ticket_bill where id = #{id}
操作人: {{ log.approveUserName }}
审批状态: {{ getStatusText(log.approveStatus) }}