Browse Source

报销审核接口发起

anderx 2 years ago
parent
commit
b2072fbfc2

+ 12 - 0
src/main/java/com/goafanti/admin/bo/AdminListBo.java

@@ -109,6 +109,10 @@ public class AdminListBo {
 	 * 部门负责人
 	 */
 	private String depManager;
+	/**
+	 * 部门财务负责人
+	 */
+	private String depFinance;
 
 	/**
 	 *  0新员工 1老员工
@@ -127,6 +131,14 @@ public class AdminListBo {
 	private String ancestorsNames;
 	private String ambRole;
 
+	public String getDepFinance() {
+		return depFinance;
+	}
+
+	public void setDepFinance(String depFinance) {
+		this.depFinance = depFinance;
+	}
+
 	public Integer getPublicPurview() {
 		return publicPurview;
 	}

+ 1 - 0
src/main/java/com/goafanti/common/constant/AFTConstants.java

@@ -17,6 +17,7 @@ public class AFTConstants {
 
 	/**	超级管理员 */
 	public static final String	SUPERADMIN							= "999999";
+	public static final String	All_CED_AND_CHAIRMAN				= "99999888";
 	/**	特批决策者 */
 	public static final String	APPROVAL_DECISION					= "99999";
 	/**	特批决策者审核 */

+ 2 - 0
src/main/java/com/goafanti/common/enums/NoticeStatus.java

@@ -80,6 +80,8 @@ public enum NoticeStatus {
 	AMB_INVEST_NO(71,"阿米巴投资拒绝"),
 	PUBLIC_OTHERS_USER(72,"公出他人企业"),
 	COMPLETES_PROJECT(73,"项目完成通知"),
+	EXPENSE_NOTICE(74,"报销审核通知"),
+	EXPENSE_COMPLETE(75,"报销审核完成"),
 	OTHER(0, "其他");
 
 	private NoticeStatus(Integer code, String desc) {

+ 4 - 1
src/main/java/com/goafanti/common/mapper/AdminMapper.xml

@@ -899,7 +899,7 @@
 
   <select id="getDeptNameByAid" parameterType="java.lang.String" resultType="com.goafanti.admin.bo.AdminListBo">
     select a.id,a.name, d.name as departmentName,a.department_id departmentId,a.email,a.superior_id superiorId,a.open_id openId,
-           a.reviewer,d.manager_id depManager,a.public_purview publicPurview
+           a.reviewer,d.manager_id depManager,d.finance_id depFinance,a.public_purview publicPurview
     from admin a left join department d on a.department_id = d.id
     where a.id = #{_parameter,jdbcType=VARCHAR}
   </select>
@@ -1196,6 +1196,9 @@
     <if test="roleType =='99999'">
       and c.role_type  in ('99999','99989')
     </if>
+    <if test="roleType =='99999888'">
+      and c.role_type  in ('99998','99988','99999','99989')
+    </if>
     <if test="roleType !='99999' and roleType !='99998'">
       and c.role_type  in (#{roleType})
     </if>

+ 57 - 0
src/main/java/com/goafanti/expenseAccount/Enums/EAProcessStatus.java

@@ -0,0 +1,57 @@
+package com.goafanti.expenseAccount.Enums;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum EAProcessStatus {
+
+    FQ(0,"发起"),
+    SJSH(1,"上级审核"),
+    ZJLSH(2,"总经理审核"),
+    CWSH(3,"财务审核"),
+    DSZSH(4,"董事长审核"),
+    NOT(99,"未知");
+
+    private Integer code;
+    private String desc;
+
+    EAProcessStatus(Integer code,String desc){
+        this.code=code;
+        this.desc=desc;
+    }
+    private static Map<Integer, EAProcessStatus> status = new HashMap<Integer, EAProcessStatus>();
+
+    static {
+        for (EAProcessStatus value : EAProcessStatus.values()) {
+            status.put(value.getCode(), value);
+        }
+    }
+
+    public static String getDesc(Integer code){
+        for (EAProcessStatus value : EAProcessStatus.values()) {
+            if (value.getCode()==code)return value.getDesc();
+        }
+        return NOT.getDesc();
+    }
+
+    public static boolean containsType(Integer code) {
+        return status.containsKey(code);
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 73 - 9
src/main/java/com/goafanti/expenseAccount/service/impl/ExpenseAccountServiceImpl.java

@@ -1,24 +1,26 @@
 package com.goafanti.expenseAccount.service.impl;
 
+import com.goafanti.admin.bo.AdminListBo;
+import com.goafanti.admin.bo.NoticeBo;
+import com.goafanti.common.bo.EmailBo;
 import com.goafanti.common.constant.AFTConstants;
 import com.goafanti.common.dao.*;
+import com.goafanti.common.enums.NoticeStatus;
+import com.goafanti.common.enums.NoticeTypes;
 import com.goafanti.common.error.BusinessException;
-import com.goafanti.common.model.Admin;
-import com.goafanti.common.model.ExpenseAccount;
-import com.goafanti.common.model.ExpenseAccountLog;
-import com.goafanti.common.model.PublicRelease;
+import com.goafanti.common.model.*;
+import com.goafanti.common.utils.AsyncUtils;
 import com.goafanti.common.utils.DateUtils;
 import com.goafanti.core.mybatis.BaseMybatisDao;
 import com.goafanti.core.mybatis.page.Pagination;
 import com.goafanti.core.shiro.token.TokenManager;
+import com.goafanti.expenseAccount.Enums.EAProcessStatus;
 import com.goafanti.expenseAccount.bo.*;
 import com.goafanti.expenseAccount.service.ExpenseAccountService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapper> implements ExpenseAccountService {
@@ -31,6 +33,8 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
     @Autowired
     private ExpenseAccountLogMapper expenseAccountLogMapper;
     @Autowired
+    private AsyncUtils asyncUtils;
+    @Autowired
     private ExpenseAccountDetailsMapper expenseAccountDetailsMapper;
 
 
@@ -122,10 +126,70 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
     @Override
     public int updateExamine(InputExpenseAccount in) {
         ExpenseAccount useEa = expenseAccountMapper.selectByPrimaryKey(in.getId());
+        ExpenseAccount newEa=new ExpenseAccount();
+        newEa.setId(useEa.getId());
         if (useEa.getStatus()!=1)throw new BusinessException("审核状态错误");
         if (useEa.getProcessStatus()!=in.getProcessStatus())throw new BusinessException("审核流程错误");
-        //审核通知
-        return 0;
+        //审核通知 获取发送人
+        List<Admin> aids=new ArrayList<>();
+        Integer status=1;
+        StringBuffer str=new StringBuffer();
+        str=str.append("您有报销需要审核,请查看并审核。");
+        AdminListBo admin = adminMapper.getDeptNameByAid(useEa.getAid());
+        if(useEa.getProcessStatus()== EAProcessStatus.FQ.getCode()){
+            //获取上级
+            aids.add(adminMapper.selectByPrimaryKey(admin.getSuperiorId()));
+            newEa.setProcessStatus(EAProcessStatus.SJSH.getCode());
+
+        }else if (useEa.getProcessStatus()== EAProcessStatus.SJSH.getCode()){
+            //获取负责人
+            List<Admin> list = adminMapper.listAdminBydepIdAndRoleType(admin.getId(), admin.getDepartmentId());
+            if (!list.isEmpty())aids.addAll(list);
+            newEa.setProcessStatus(EAProcessStatus.ZJLSH.getCode());
+        }else if (useEa.getProcessStatus()== EAProcessStatus.ZJLSH.getCode()){
+            //获取负责人
+            aids.add(adminMapper.selectByPrimaryKey(admin.getDepFinance()));
+            newEa.setProcessStatus(EAProcessStatus.CWSH.getCode());
+        }else if (useEa.getProcessStatus()== EAProcessStatus.CWSH.getCode()){
+            //获取负责人
+            List<Admin> admins = adminMapper.selectAdminByRoleType(AFTConstants.All_CED_AND_CHAIRMAN);
+            if (!admins.isEmpty())aids.addAll(admins);
+            newEa.setProcessStatus(EAProcessStatus.DSZSH.getCode());
+        }else if (useEa.getProcessStatus()== EAProcessStatus.DSZSH.getCode()){
+            //获取负责人
+            status=2;
+            aids.add(adminMapper.selectByPrimaryKey(admin.getId()));
+            newEa.setStatus(status);
+            str=new StringBuffer("您的报销审核已通过,请注意查看。");
+        }
+        addLogAndNoticeAndEmail(useEa,status,str.toString(),aids);
+        return 1;
+    }
+
+    private void addLogAndNoticeAndEmail(ExpenseAccount useEa, Integer status, String str, List<Admin> aids) {
+        addExpenseAccountLog(useEa.getId(),status,str);
+        Date date= new Date();
+        Integer noticeStatus=NoticeStatus.EXPENSE_NOTICE.getCode();
+        if (status==2){
+            noticeStatus=NoticeStatus.EXPENSE_COMPLETE.getCode();
+        }
+        List<Notice> list=new ArrayList<>();
+        if (aids!=null){
+            for (Admin a : aids) {
+                Notice notice=new Notice();
+                notice.setId(UUID.randomUUID().toString());
+                notice.setNoticeType(noticeStatus);
+                notice.setType(NoticeTypes.getType(noticeStatus));
+                notice.setAid(a.getId());
+                notice.setCreateTime(new Date());
+                notice.setContent(str);
+                notice.setReaded(0);
+                list.add(notice);
+                EmailBo emailBo=new EmailBo(NoticeStatus.getValueByCode(noticeStatus),a.getEmail(),str);
+                asyncUtils.send(emailBo);
+            }
+        asyncUtils.addNoticeBatch(list);
+        }
     }
 
     @Override