Browse Source

修改审核逻辑

anderx 2 years ago
parent
commit
f61f54858c

+ 5 - 0
src/main/java/com/goafanti/common/dao/ExpenseAccountExamineMapper.java

@@ -1,6 +1,7 @@
 package com.goafanti.common.dao;
 
 import com.goafanti.common.model.ExpenseAccountExamine;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -18,4 +19,8 @@ public interface ExpenseAccountExamineMapper {
     int updateByPrimaryKey(ExpenseAccountExamine record);
 
     void insertBatch(List<ExpenseAccountExamine> list);
+
+    void updateStatusByEaidAndAid(@Param("id") Integer id, @Param("aid") String aid,@Param("status") Integer status);
+
+    List<ExpenseAccountExamine> selectByEaidAndType(@Param("id") Integer id, @Param("type") Integer type);
 }

+ 20 - 4
src/main/java/com/goafanti/common/mapper/ExpenseAccountExamineMapper.xml

@@ -19,6 +19,7 @@
     from expense_account_examine
     where id = #{id,jdbcType=INTEGER}
   </select>
+
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
     delete from expense_account_examine
     where id = #{id,jdbcType=INTEGER}
@@ -110,13 +111,28 @@
   </update>
 
 
+
   <insert id="insertBatch">
     insert into expense_account_examine (eaid,type, `status`, auditor, auditorName)
     values
-    <foreach close=")" collection="list" item="e" open="(">
-      #{e.eaid,jdbcType=INTEGER},#{e.type}, #{e.status,jdbcType=INTEGER}, #{e.auditor,jdbcType=VARCHAR},
-      #{e.auditorname,jdbcType=VARCHAR}
+    <foreach  collection="list" item="e" separator=",">
+      (#{e.eaid,jdbcType=INTEGER},#{e.type}, #{e.status,jdbcType=INTEGER}, #{e.auditor,jdbcType=VARCHAR},
+      #{e.auditorname,jdbcType=VARCHAR})
     </foreach>
-
   </insert>
+  <update id="updateStatusByEaidAndAid">
+    update expense_account_examine
+    set status= #{status}
+    where eaid =#{id}
+      <if test="aid != null">
+        and auditor= #{aid}
+      </if>
+  </update>
+
+  <select id="selectByEaidAndType" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List" />
+    from expense_account_examine
+    where eaid = #{id} and type= #{type}
+  </select>
 </mapper>

+ 6 - 2
src/main/java/com/goafanti/common/mapper/ExpenseAccountMapper.xml

@@ -362,13 +362,15 @@
     left join admin d on a.aid =d.id left join t_order_new e on a.order_no =e.order_no
     left join t_order_mid tm on a.order_no =tm.order_no left join department f on d.department_id =f.id
     left join admin d2 on f.finance_id =d2.id
+    inner join expense_account_examine eae on a.id=eae.eaid
     where 1=1
     <if test="processStatus ==0">
     and a.aid= #{aid}
     </if>
     <if test="processStatus ==1">
       and a.process_status>0
-      and d.superior_id =#{aid}
+      and a.process_status =eae.`type`
+      and eae.auditor = #{aid}
     </if>
     <if test="status != null">
       and a.status= #{status}
@@ -402,13 +404,15 @@
     from expense_account a left join department b on a.apply_dep =b.id left join department c on a.pay_dep =c.id
     left join admin d on a.aid =d.id left join t_order_new e on a.order_no =e.order_no
     left join t_order_mid tm on a.order_no =tm.order_no
+    inner join expense_account_examine eae on a.id=eae.eaid
     where 1=1
     <if test="processStatus ==0">
       and a.aid= #{aid}
     </if>
     <if test="processStatus ==1">
       and a.process_status>0
-      and d.superior_id =#{aid}
+      and a.process_status =eae.`type`
+      and eae.auditor = #{aid}
     </if>
     <if test="status != null">
       and a.status= #{status}

+ 69 - 10
src/main/java/com/goafanti/expenseAccount/service/impl/ExpenseAccountServiceImpl.java

@@ -94,7 +94,6 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
                 if (a.getSuperId()!=null){
                     eae.setAuditor(a.getSuperId());
                     eae.setAuditorname(a.getSuperName());
-                    list.add(eae);
                 }else {
                     eae.setAuditor(a.getId());
                     eae.setAuditorname(a.getName());
@@ -154,18 +153,42 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
     }
 
     private void addExpenseAccountLogAndNoticEmail(InputExpenseAccount in, Integer status, String str) {
-        Date date=new Date();
         String aid=TokenManager.getAdminId();
         addExpenseAccountLog(in.getId(),status,aid,str);
-        //日志写入用操作人,邮箱、微信订阅与站内信要的是发送方消息,即收件人
-        AdminNoticeBo an = adminMapper.selectMyAndSuperBySuperId(aid);
-        StringBuffer sb =new StringBuffer();
-        if (status>0){
-            in.setExamineName(an.getSuperName());
-            sb=sb.append("[").append(an.getName()).append("]").append(str).append(",请及时审核。");
-            asyncUtils.addNoticAndEmail(NoticeStatus.EXPENSE_NOTICE.getCode(), an.getSuperId(),sb.toString());
-            weChatUtils.addExpenseAccountWeChatNotice(an.getExpenseOpenId(), 1, in.getId(), date, an.getName(),sb.toString());
+        //正常是走入上级审核,但是可能会跳过
+        if(status>0){
+            createExamineByProcess(in);
+        }
+    }
+
+    private void createExamineByProcess(InputExpenseAccount in) {
+        //审核流程推送到最新
+        examineByprocess(in);
+        List<Admin> aids=new ArrayList<>();
+        AdminListBo admin = adminMapper.getDeptNameByAid(in.getAid());
+        if(in.getProcessStatus()== EAProcessStatus.SJSH.getCode()){
+            //获取上级
+            Admin superAdmin = adminMapper.selectByPrimaryKey(admin.getId());
+            aids.add(superAdmin);
+            in.setUserNames(superAdmin.getName());
+        }else if (in.getProcessStatus()== EAProcessStatus.CWSH.getCode()){
+            //获取财务负责人
+            Admin finaceAdmin = adminMapper.selectByPrimaryKey(admin.getDepFinance());
+            aids.add(finaceAdmin);
+            in.setExamineName(finaceAdmin.getName());
+        }else if (in.getProcessStatus()== EAProcessStatus.ZJLSH.getCode()){
+            //获取部门负责人
+            List<Admin> list = adminMapper.listAdminBydepIdAndRoleType(admin.getDepartmentId(), AFTConstants.SALESMAN_ADMIN);
+            if (!list.isEmpty())aids.addAll(list);
+            in.setExamineName(getAdmins(list));
+        }else if (in.getProcessStatus()== EAProcessStatus.ZJLSH.getCode()){
+            //获取总裁、董事长等审核
+            List<Admin> list = adminMapper.selectAdminByRoleType(AFTConstants.All_CED_AND_CHAIRMAN);
+            if (!list.isEmpty())aids.addAll(list);
+            in.setExamineName(getAdmins(list));
         }
+        StringBuffer str=new StringBuffer().append("您有报销需要审核,").append("报销编号[").append(in.getId()).append("]").append(",请查看并审核。");
+        addLogAndNoticeAndEmail(in,  1,str.toString(), admin.getName(),aids);
     }
 
     @Override
@@ -311,10 +334,20 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
                 }
             }
         }
+            //审核处理审核表
+            pushExpenseAccountExamine(in);
         expenseAccountMapper.updateByPrimaryKeySelective(newEa);
         return 1;
     }
 
+    private void pushExpenseAccountExamine(InputExpenseAccount in) {
+        if (in.getStatus()==2){
+            expenseAccountExamineMapper.updateStatusByEaidAndAid(in.getId(),TokenManager.getAdminId(),1);
+        }else if (in.getStatus()==3){
+            expenseAccountExamineMapper.updateStatusByEaidAndAid(in.getId(),null,0);
+        }
+    }
+
     private void addExamineExpenseAccountLog(InputExpenseAccount in, ExpenseAccount useEa, ExpenseAccount newEa) {
         List<Admin> aids=new ArrayList<>();
         StringBuffer str=new StringBuffer();
@@ -322,6 +355,7 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
         AdminListBo admin = adminMapper.getDeptNameByAid(useEa.getAid());
         if (status==1){
             str=str.append("您有报销需要审核,").append("报销编号[").append(in.getId()).append("]").append(",请查看并审核。");
+            pushExamineProcess(newEa);
             if(useEa.getProcessStatus()== EAProcessStatus.FQ.getCode()){
                 //获取上级
                 Admin superAdmin = adminMapper.selectByPrimaryKey(admin.getSuperiorId());
@@ -365,6 +399,31 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
         addLogAndNoticeAndEmail(in,  status,str.toString(),admin.getName(),aids);
     }
 
+    private void pushExamineProcess( ExpenseAccount newEa) {
+        //如果到了董事长审核,无需判断了
+        if (newEa.getProcessStatus()<EAProcessStatus.DSZSH.getCode()){
+            //判断没一个流程是否可以跳过
+             examineByprocess(newEa);
+        }
+    }
+
+    private void examineByprocess( ExpenseAccount newEa) {
+        List<ExpenseAccountExamine> list = expenseAccountExamineMapper.selectByEaidAndType(newEa.getId(), newEa.getProcessStatus());
+        boolean flag=false;
+        for (ExpenseAccountExamine e : list) {
+            if (e.getStatus()==1){
+                flag=true;
+                break;
+            }
+        }
+        if (flag){
+            addExpenseAccountLog(newEa.getId(),1,null,"重复审核人跳过当前审核。");
+            newEa.setProcessStatus(newEa.getProcessStatus()+1);
+            if (newEa.getProcessStatus()<5)examineByprocess(newEa);
+        }
+
+    }
+
     private String getAdmins(List<Admin> list) {
         StringBuffer str =new StringBuffer();
         for (Admin admin : list) {