Explorar o código

处理逻辑:1.增加财务发起对账、收费、付费、开票时审批流携带业务编号处理逻辑,增加审批流任务明细从表数据接口;2.调整财务管理对账查询规则,将原先确认对账后退出来呈现多条数据合并为1条数据

nzf %!s(int64=3) %!d(string=hai) anos
pai
achega
a131020f22

+ 1 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warehouse/approvalFlow/AuditPathsController.java

@@ -22,6 +22,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 审批流配置主Controller

+ 23 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/approvalFlow/domain/AuditItems.java

@@ -1,6 +1,7 @@
 package com.ruoyi.approvalFlow.domain;
 
 import java.util.Date;
+import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -154,6 +155,28 @@ public class AuditItems extends BaseEntity {
     @Excel(name = "第几次提交审批")
     private Long times;
 
+    /*业务编号列表,仅作为参数传递,方便提交审批时提取*/
+    List<String> fSrcBillnos;
+
+    /*根据业务编号做搜索*/
+    private String fBsno;
+
+    public String getfBsno() {
+        return fBsno;
+    }
+
+    public void setfBsno(String fBsno) {
+        this.fBsno = fBsno;
+    }
+
+    public List<String> getfSrcBillnos() {
+        return fSrcBillnos;
+    }
+
+    public void setfSrcBillnos(List<String> fSrcBillnos) {
+        this.fSrcBillnos = fSrcBillnos;
+    }
+
     public void setId(Long id) {
         this.id = id;
     }

+ 77 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/approvalFlow/domain/AuditItemsDo.java

@@ -0,0 +1,77 @@
+package com.ruoyi.approvalFlow.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 审批流任务明细从表对象 audit_items_do
+ *
+ * @author nzf
+ * @date 2022-03-23
+ */
+public class AuditItemsDo {
+    /**
+     * 从表 id
+     */
+    private Long fId;
+
+    /**
+     * 父级 id
+     */
+    private Long fPid;
+
+    /**
+     * 活动号
+     */
+    private Long actId;
+
+    /**
+     * 业务 ID
+     */
+    private Long billId;
+
+    /**
+     * 业务编号
+     */
+    private String fBsno;
+
+    public Long getActId() {
+        return actId;
+    }
+
+    public void setActId(Long actId) {
+        this.actId = actId;
+    }
+
+    public Long getBillId() {
+        return billId;
+    }
+
+    public void setBillId(Long billId) {
+        this.billId = billId;
+    }
+
+    public Long getfId() {
+        return fId;
+    }
+
+    public void setfId(Long fId) {
+        this.fId = fId;
+    }
+
+    public Long getfPid() {
+        return fPid;
+    }
+
+    public void setfPid(Long fPid) {
+        this.fPid = fPid;
+    }
+
+    public String getfBsno() {
+        return fBsno;
+    }
+
+    public void setfBsno(String fBsno) {
+        this.fBsno = fBsno;
+    }
+}

+ 35 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/approvalFlow/mapper/AuditItemsDoMapper.java

@@ -0,0 +1,35 @@
+package com.ruoyi.approvalFlow.mapper;
+
+import com.ruoyi.approvalFlow.domain.AuditItemsDo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface AuditItemsDoMapper {
+    /**
+     * 增一条
+     */
+    void insert(AuditItemsDo auditItemsDo);
+    /**
+     * 修改一条
+     */
+    void updateById(AuditItemsDo auditItemsDo);
+    /**
+     * 删一条
+     */
+    int deleteById(Long id);
+    /**
+     * 查一条
+     */
+    Map<String,Object> selectById(Long id);
+    /**
+     * 根据父级 id 获取数据
+     */
+    List<Map<String,Object>> selectByFPid(Long fPid);
+
+    /**
+     * 根据活动号业务ID获取数据
+     */
+    List<Map<String,Object>> selectByActIdAndBillId(@Param("actId") Long actId,@Param("billId") Long billId);
+}

+ 19 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/approvalFlow/service/IAuditItemsDoService.java

@@ -0,0 +1,19 @@
+package com.ruoyi.approvalFlow.service;
+
+import com.ruoyi.approvalFlow.domain.AuditItemsDo;
+
+
+public interface IAuditItemsDoService {
+    /**
+     * 增一条
+     */
+    void insert(AuditItemsDo auditItemsDo);
+    /**
+     * 修改一条
+     */
+    void update(AuditItemsDo auditItemsDo);
+    /**
+     * 删一条
+     */
+    int deleteById(Long id);
+}

+ 28 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/approvalFlow/service/impl/AuditItemsDoServiceImpl.java

@@ -0,0 +1,28 @@
+package com.ruoyi.approvalFlow.service.impl;
+import com.ruoyi.approvalFlow.domain.AuditItemsDo;
+import com.ruoyi.approvalFlow.mapper.AuditItemsDoMapper;
+import com.ruoyi.approvalFlow.service.IAuditItemsDoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AuditItemsDoServiceImpl implements IAuditItemsDoService {
+    @Autowired
+    private AuditItemsDoMapper auditItemsDoMapper;
+
+
+    @Override
+    public void insert(AuditItemsDo auditItemsDo) {
+        auditItemsDoMapper.insert(auditItemsDo);
+    }
+
+    @Override
+    public void update(AuditItemsDo auditItemsDo) {
+        auditItemsDoMapper.updateById(auditItemsDo);
+    }
+
+    @Override
+    public int deleteById(Long id) {
+        return auditItemsDoMapper.deleteById(id);
+    }
+}

+ 31 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/approvalFlow/service/impl/AuditItemsServiceImpl.java

@@ -9,8 +9,10 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.ruoyi.approvalFlow.domain.AuditItems;
+import com.ruoyi.approvalFlow.domain.AuditItemsDo;
 import com.ruoyi.approvalFlow.domain.AuditItemsUsers;
 import com.ruoyi.approvalFlow.domain.AuditPathsLevels;
+import com.ruoyi.approvalFlow.mapper.AuditItemsDoMapper;
 import com.ruoyi.approvalFlow.mapper.AuditItemsMapper;
 import com.ruoyi.approvalFlow.mapper.AuditItemsUsersMapper;
 import com.ruoyi.approvalFlow.mapper.AuditPathsLevelsMapper;
@@ -18,6 +20,7 @@ import com.ruoyi.approvalFlow.service.IAuditItemsService;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.SysUserRole;
 import com.ruoyi.system.mapper.SysRoleMapper;
 import com.ruoyi.system.mapper.SysUserMapper;
@@ -50,6 +53,9 @@ public class AuditItemsServiceImpl implements IAuditItemsService {
     @Autowired
     private AuditPathsLevelsMapper auditPathsLevelsMapper;
 
+    @Autowired
+    private AuditItemsDoMapper auditItemsDoMapper;
+
     /**
      * 查询审批流任务明细
      *
@@ -85,6 +91,7 @@ public class AuditItemsServiceImpl implements IAuditItemsService {
             return AjaxResult.error("未找到审批流, 请确认");
         }
         auditItemsMapper.insertAuditItems(auditItems);
+        setFSrcBillnos(auditItems,auditItems.getId()); // 为审批任务明细从表加入数据
         int num = 0;
         for (AuditPathsLevels levels : auditPathsLevelsList) {
             num++;
@@ -124,6 +131,7 @@ public class AuditItemsServiceImpl implements IAuditItemsService {
                                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                 return AjaxResult.error("生成审批流明细失败,请联系管理员");
                             }
+                            setFSrcBillnos(auditItems,auditItem.getId()); // 为审批任务明细从表加入数据
                             AuditItemsUsers auditItemsUsers = createAuditItemsUsers(num, use.getUserId(), auditItem);
                             int addAuditUser = auditItemsUsersMapper.insertAuditItemsUsers(auditItemsUsers);
                             if (addAuditUser <= 0) {
@@ -148,6 +156,7 @@ public class AuditItemsServiceImpl implements IAuditItemsService {
                     TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                     return AjaxResult.error("生成审批流明细失败,请联系管理员");
                 }
+                setFSrcBillnos(auditItems,auditItem.getId()); // 为审批任务明细从表加入数据
                 for (Long usId : userIdList) {
                     AuditItemsUsers auditItemsUsers = createAuditItemsUsers(num, usId, auditItem);
                     int addAuditUser = auditItemsUsersMapper.insertAuditItemsUsers(auditItemsUsers);
@@ -161,6 +170,28 @@ public class AuditItemsServiceImpl implements IAuditItemsService {
         return AjaxResult.success();
     }
 
+    /**
+     * 处理业务编号数据,最后一级审批或非最后一级审批皆可用
+     * @param auditItems 审批流明细数据
+     * @param id 审批流任务明细 id
+     */
+    public void setFSrcBillnos(AuditItems auditItems,Long id){
+        for (String fsrcBilnos : auditItems.getfSrcBillnos()) { // 处理业务编号数据
+            if (StringUtils.isNotNull(fsrcBilnos)) {
+                AuditItemsDo auditItemsDo = new AuditItemsDo();
+                // 装载父级 id
+                auditItemsDo.setfPid(id);
+                // 装载活动号
+                auditItemsDo.setActId(auditItems.getActId());
+                // 装载业务 id
+                auditItemsDo.setBillId(auditItems.getBillId());
+                // 装载业务编号数据
+                auditItemsDo.setfBsno(fsrcBilnos);
+                auditItemsDoMapper.insert(auditItemsDo);
+            }
+        }
+    }
+
     public AuditItemsUsers createAuditItemsUsers(int num, long userId, AuditItems auditItem) {
         AuditItemsUsers auditItemsUsers = new AuditItemsUsers();
         auditItemsUsers.setUserId(userId);

+ 26 - 1
ruoyi-warehouse/src/main/java/com/ruoyi/approvalFlow/service/impl/AuditPathsServiceImpl.java

@@ -104,6 +104,9 @@ public class AuditPathsServiceImpl implements IAuditPathsService {
     private TWarehouseAgreementMapper tWarehouseAgreementMapper;
 
     @Autowired
+    private AuditItemsDoMapper auditItemsDoMapper;
+
+    @Autowired
     private CalculationWarehouseService calculationWarehouseService;
 
     /**
@@ -283,7 +286,23 @@ public class AuditPathsServiceImpl implements IAuditPathsService {
      */
     @Override
     public List<Map<String, Object>> selectAllAuditItems(AuditItems auditItems) {
-        return auditItemsMapper.selectAuditItems(auditItems);
+        List<Map<String,Object>> list = new ArrayList<>();
+        for (Map<String,Object> map : auditItemsMapper.selectAuditItems(auditItems)) {
+            // 根据审批明细详情主表 id 获取审批明细从表数据
+            List<Map<String,Object>> auditItemsDoList = auditItemsDoMapper.selectByFPid(Long.valueOf(map.get("id").toString()));
+            StringBuilder stringBuilder = new StringBuilder();
+            for (Map<String,Object> auditItemsDo : auditItemsDoList) {
+                if (StringUtils.isNotNull(auditItemsDo)) {
+                    // 装载获取到的业务编号数据
+                    stringBuilder.append(auditItemsDo.get("fBsno")).append(",");
+                }
+            }
+            // map中存入业务编号数据
+            map.put("fBsno",StringUtils.removeTheLastComma(stringBuilder));
+            // 将 map 数据重新放入 list 中
+            list.add(map);
+        }
+        return list;
     }
 
     /**
@@ -983,6 +1002,12 @@ public class AuditPathsServiceImpl implements IAuditPathsService {
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return AjaxResult.error("审批撤销失败: 更新审批状态失败");
             }
+            // 根据审批流任务明细活动号 + 业务id 获取审批流任务明细从表数据
+            List<Map<String,Object>> itemsDos = auditItemsDoMapper.selectByActIdAndBillId(auditItems.getActId(),auditItems.getBillId());
+            for (Map<String,Object> map : itemsDos) {
+                // 删除审批流任务明细从表
+                auditItemsDoMapper.deleteById(Long.valueOf(map.get("fId").toString()));
+            }
         } else if (auditItems.getActId() >= 310 && auditItems.getActId() <= 320) {
             fettle = 2L;
             // 查询协议状态

+ 4 - 2
ruoyi-warehouse/src/main/java/com/ruoyi/finance/service/impl/TFeeServiceImpl.java

@@ -237,9 +237,7 @@ public class TFeeServiceImpl implements ITFeeService {
                 map1.put("fFeeunitid", sysDictDataList.get(0).getDictLabel());
                 map1.put("fQty", tWarehousebillsfees.getfQty());
                 map1.put("fUnitprice", tWarehousebillsfees.getfUnitprice());
-                System.err.println("业务编号:" + fees.getfSrcBillno());
                 map1.put("fBillno",fees.getfSrcBillno());// 业务编号(单据编号)
-                System.err.println("发票号:" + fees.getfInvoiceNo());
                 map1.put("invoiceNo",fees.getfInvoiceNo());// 发票号
                 if (StringUtils.isNotEmpty(tWarehousebillsfees.getfBilltype()) && tWarehousebillsfees.getfBilltype().equals("KHDD")) {
                     map1.put("fBusinessType", "船运订单");
@@ -792,6 +790,7 @@ public class TFeeServiceImpl implements ITFeeService {
         // 删除从表
         tFeeDoMapper.deleteByFPid(tFee.getfId());
         messageMap.put("tFee", tFee);
+        List<String> fSrcBillnos = new ArrayList<>();
         //  财务从表
         if (StringUtils.isNotNull(tfeeDo) && !"[]".equals(tfeeDo)) {
             JSONArray jsonDrArray = JSONArray.parseArray(tfeeDo);
@@ -806,6 +805,8 @@ public class TFeeServiceImpl implements ITFeeService {
                 tFeeDo.setCreateBy(loginUser.getUser().getUserName());
                 tFeeDo.setCreateTime(new Date());
                 tFeeDo.setfStatus(billstatus);
+                // 业务编号传递
+                fSrcBillnos.add(tFeeDo.getfSrcBillno());
                 tFeeDoMapper.insertTFeeDo(tFeeDo);
             }
         }
@@ -849,6 +850,7 @@ public class TFeeServiceImpl implements ITFeeService {
             auditItems.setTimes(1L);// 第几次提交审批
             auditItems.setAuditMsg("提交");
             auditItems.setAuditStatus("O");// 提交状态
+            auditItems.setfSrcBillnos(fSrcBillnos);// 装载业务编号数据
             AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);// 生成审批流
             Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
             if (code.equals(500L)) {

+ 83 - 0
ruoyi-warehouse/src/main/resources/mapper/approvalFlow/AuditItemsDoMapper.xml

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.approvalFlow.mapper.AuditItemsDoMapper">
+
+    <resultMap type="AuditItemsDo" id="AuditItemsResult">
+        <result property="fId"    column="f_id"    />
+        <result property="fPid"    column="f_pid"    />
+        <result property="actId"    column="act_id"    />
+        <result property="billId"    column="bill_id"    />
+        <result property="fBsno"    column="f_bsno"    />
+    </resultMap>
+
+    <insert id="insert" parameterType="AuditItemsDo" useGeneratedKeys="true" keyProperty="fId">
+        insert into audit_items_do
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="fPid != null and fPid != ''">f_pid,</if>
+            <if test="actId != null and fPid != ''">act_id,</if>
+            <if test="billId != null and fPid != ''">bill_id,</if>
+            <if test="fBsno != null">f_bsno,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="fPid != null and fPid != ''">#{fPid},</if>
+            <if test="actId != null and fPid != ''">#{actId},</if>
+            <if test="billId != null and fPid != ''">#{billId},</if>
+            <if test="fBsno != null">#{fBsno},</if>
+        </trim>
+    </insert>
+
+    <update id="updateById" parameterType="com.ruoyi.approvalFlow.domain.AuditItemsDo">
+        UPDATE
+            audit_items_do
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="fPid != null and fPid != ''">f_pid = #{fPid},</if>
+            <if test="actId != null and fPid != ''">act_id = #{actId},</if>
+            <if test="billId != null and fPid != ''">bill_id = #{billId},</if>
+            <if test="fBsno != null">f_bsno = #{fBsno},</if>
+        </trim>
+        WHERE
+            f_id = #{fId}
+    </update>
+
+    <delete id="deleteById" parameterType="com.ruoyi.approvalFlow.domain.AuditItemsDo">
+        delete from audit_items_do where f_id = #{id}
+    </delete>
+
+    <select id="selectById" parameterType="AuditItemsDo" resultMap="AuditItemsResult">
+        SELECT
+            f_id,
+            f_pid,
+            act_id,
+            bill_id,
+            f_bsno
+        FROM
+            audit_items_do
+        WHERE f_id = #{fId}
+    </select>
+
+    <select id="selectByFPid" parameterType="com.ruoyi.approvalFlow.domain.AuditItemsDo" resultType="Map">
+        SELECT
+        f_id as fId,
+        f_pid as fPid,
+        act_id as actId,
+        bill_id as billId,
+        f_bsno as fBsno
+        FROM
+        audit_items_do
+        WHERE f_pid = #{fPid}
+    </select>
+
+    <select id="selectByActIdAndBillId" parameterType="com.ruoyi.approvalFlow.domain.AuditItemsDo" resultType="Map">
+        SELECT
+            f_id as fId,
+            f_pid as fPid,
+            act_id as actId,
+            bill_id as billId,
+            f_bsno as fBsno
+        FROM
+            audit_items_do
+        WHERE act_id = #{actId} AND bill_id = #{billId}
+    </select>
+</mapper>

+ 5 - 1
ruoyi-warehouse/src/main/resources/mapper/approvalFlow/AuditItemsMapper.xml

@@ -9,6 +9,7 @@
         <result property="actId"    column="act_id"    />
         <result property="billId"    column="bill_id"    />
         <result property="billNo"    column="bill_no"    />
+        <result property="fBsno"    column="f_bsno"    />
         <result property="refno1"    column="refno1"    />
         <result property="refno2"    column="refno2"    />
         <result property="refno3"    column="refno3"    />
@@ -245,11 +246,12 @@
             item.audit_msg AS auditMsg
         FROM
             audit_items item
+            LEFT JOIN audit_items_do itemd ON itemd.f_pid = item.id
             LEFT JOIN t_corps corp ON corp.f_id = item.refno1
             LEFT JOIN audit_items_users us ON us.pid = item.id
             LEFT JOIN sys_user usr ON usr.user_id = item.audit_user_id
         <where>
-            <if test="billNo != null  and billNo != ''"> and item.bill_no = #{billNo}</if>
+            <if test="billNo != null  and billNo != ''"> and item.bill_no like concat('%', #{billNo}, '%')</if>
             <if test="actId != null  and actId != ''"> and item.act_id = #{actId}</if>
             <if test="refno2 != null  and refno2 != ''"> and item.refno2 = #{refno2}</if>
             <if test="refno3 != null  and refno3 != ''">
@@ -262,6 +264,7 @@
             <if test="fidStatus != null  and fidStatus != ''"> AND item.fid_status = #{fidStatus}</if>
             <if test="auditStatus != null  and auditStatus != ''"> AND item.audit_status = #{auditStatus} and us.audit_status =  #{auditStatus}</if>
             <if test="auditUserId != null  and auditUserId != ''"> AND us.user_id = #{auditUserId}</if>
+            <if test="fBsno != null  and fBsno != ''"> AND itemd.f_bsno like concat('%', #{fBsno}, '%')</if>
             <if test='sendTime != null and sendTime[0] != null and sendTime[0]!= ""'>
                 and item.send_time &gt;= #{sendTime[0]}
             </if>
@@ -275,6 +278,7 @@
                 and item.audit_op_time &lt;= #{auditOpTime[1]}
             </if>
         </where>
+        GROUP BY item.id
         ORDER BY
             item.send_time DESC
     </select>

+ 1 - 0
ruoyi-warehouse/src/main/resources/mapper/finance/TFeeMapper.xml

@@ -329,6 +329,7 @@
             <if test="createBy != null and createBy != ''">and f.create_by = #{createBy}</if>
         </where>
         ${params.dataScope}
+        GROUP BY f.f_billno
         ORDER BY f.f_id desc
     </select>
     <!--凯和查询财务信息-->