From dda5c81dbf88549ade7aaaf352a261c7d638f045 Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期二, 10 十月 2023 10:23:11 +0800
Subject: [PATCH] #回退流程相关

---
 src/main/resources/mapper/PlanMapper.xml                        |    1 
 src/main/webapp/static/js/businessTrip/businessTripOther.js     |    2 
 src/main/java/com/zy/crm/manager/controller/PlanController.java |   65 ++++++++++++++++++++-
 src/main/webapp/static/js/plan/plan.js                          |   40 +++++++++++++
 src/main/webapp/views/plan/plan.html                            |    1 
 src/main/java/com/zy/crm/manager/entity/Plan.java               |   16 +++++
 6 files changed, 120 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/zy/crm/manager/controller/PlanController.java b/src/main/java/com/zy/crm/manager/controller/PlanController.java
index b0e1c83..30617da 100644
--- a/src/main/java/com/zy/crm/manager/controller/PlanController.java
+++ b/src/main/java/com/zy/crm/manager/controller/PlanController.java
@@ -33,6 +33,7 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.crypto.Data;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.*;
@@ -152,6 +153,8 @@
         PlanType planType = planTypeService.selectById(plan.getPlanType());
         User planLeader = planTypeService.findPlanLeader(planType);
         plan.setSettleMsg(JSON.toJSONString(SettleDto.init(plan, manager, planLeader)));
+
+        plan.setDirector(planLeader.getId());
 
         if (!planService.insert(plan)) {
             throw new CoolException("淇濇寔澶辫触锛岃閲嶈瘯");
@@ -417,6 +420,7 @@
                 if (Cools.isEmpty(plannerId)) {
                     return R.error("鎸囧畾瑙勫垝鍛樹笉鑳戒负绌�");
                 }
+                plan.setDirector(plannerId);
                 User planner = userService.selectById(plannerId);
                 // 淇敼 settle 姝ラ鏁版嵁
                 List<SettleDto> list = JSON.parseArray(plan.getSettleMsg(), SettleDto.class);
@@ -427,7 +431,11 @@
                             break;
                         case 2:
                             dto.setCurr(Boolean.TRUE);
-                            dto.setMsg("鍞墠缁勯暱" + planLeader.getNickname() + "瀹℃壒閫氳繃");
+                            if (Cools.isEmpty(dto.getMsg())){
+                                dto.setMsg("鍞墠缁勯暱" + planLeader.getNickname() + "瀹℃壒閫氳繃");
+                            }else {
+                                dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(new Date())+" "+"鍞墠缁勯暱" + planLeader.getNickname() + "瀹℃壒閫氳繃");
+                            }
                             dto.setTime(DateUtils.convert(new Date()));
                             break;
                         case 3:
@@ -472,6 +480,8 @@
                 }
                 // 涓氬姟鍛�
                 User salesman = userService.selectById(plan.getUserId());
+                plan.setDirector(salesman.getId());
+
                 // 淇敼 settle 姝ラ鏁版嵁
                 List<SettleDto> list0 = JSON.parseArray(plan.getSettleMsg(), SettleDto.class);
                 for (SettleDto dto : list0) {
@@ -481,7 +491,11 @@
                             break;
                         case 3:
                             dto.setCurr(Boolean.TRUE);
-                            dto.setMsg("瑙勫垝鍛�" + plannerUser.getNickname() + "瀹℃壒閫氳繃");
+                            if (Cools.isEmpty(dto.getMsg())){
+                                dto.setMsg("瑙勫垝鍛�" + plannerUser.getNickname() + "瀹℃壒閫氳繃");
+                            }else {
+                                dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(new Date())+" "+"瑙勫垝鍛�" + plannerUser.getNickname() + "瀹℃壒閫氳繃");
+                            }
                             dto.setTime(DateUtils.convert(new Date()));
                             break;
                         case 4:
@@ -517,7 +531,11 @@
                             break;
                         case 4:
                             dto.setCurr(Boolean.TRUE);
-                            dto.setMsg("涓氬姟鍛�" + salesman0.getNickname() + "瀹℃壒閫氳繃");
+                            if (Cools.isEmpty(dto.getMsg())){
+                                dto.setMsg("涓氬姟鍛�" + salesman0.getNickname() + "瀹℃壒閫氳繃");
+                            }else {
+                                dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(new Date())+" "+"涓氬姟鍛�" + salesman0.getNickname() + "瀹℃壒閫氳繃");
+                            }
                             dto.setTime(DateUtils.convert(new Date()));
                             break;
                         default:
@@ -541,6 +559,47 @@
         return R.ok("瀹℃壒鎴愬姛");
     }
 
+    @PostMapping(value = "/plan/approvalEnd/auth")
+    @ManagerAuth(memo = "鎷掔粷鐢宠鍗�")
+    public R approvalEnd(@RequestParam Long planId,
+                         @RequestParam(required = false) Long plannerId) {
+        Plan plan = planService.selectById(planId);
+        Date now = new Date();
+        Long directorId = plan.getDirector();
+        User director = userService.selectById(directorId);
+        if (!director.getId().equals(getUserId())){
+            return R.error("鎶辨瓑锛屾偍娌℃湁瀹℃牳鐨勬潈闄�");
+        }
+        List<SettleDto> planDtos = JSON.parseArray(plan.getSettleMsg(), SettleDto.class);
+        List<SettleDto> planDtoList = new ArrayList<>();
+        boolean sign = true;
+        for (SettleDto dto : planDtos) {
+            if (sign && dto.getUserId().equals(directorId) && plan.getSettle()+1==dto.getStep()){
+                if (Cools.isEmpty(dto.getMsg())){
+                    dto.setMsg(DateUtils.convert(now)+" "+director.getNickname()+"鍥為��瀹℃壒");
+                }else {
+                    dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(now)+" "+director.getNickname()+"鍥為��瀹℃壒");
+                }
+                sign = false;
+            }
+            if (sign){
+                dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(now)+" "+director.getNickname()+"鍥為��瀹℃壒");
+            }
+
+            planDtoList.add(dto);
+        }
+        plan.setStatus(0);
+        plan.setStep(1);
+        plan.setSettle(1);
+
+        PlanType planType = planTypeService.selectById(plan.getPlanType());
+        User planLeader = planTypeService.findPlanLeader(planType);
+        plan.setDirector(planLeader.getId());
+        plan.setSettleMsg(JSON.toJSONString(planDtoList));
+        planService.updateById(plan);
+        return R.ok("鍥為��鎴愬姛");
+    }
+
     @PostMapping(value = "/plan/planner/list/auth")
     @ManagerAuth
     public R plannerList(@RequestParam Long planId){
diff --git a/src/main/java/com/zy/crm/manager/entity/Plan.java b/src/main/java/com/zy/crm/manager/entity/Plan.java
index bf02e74..6516775 100644
--- a/src/main/java/com/zy/crm/manager/entity/Plan.java
+++ b/src/main/java/com/zy/crm/manager/entity/Plan.java
@@ -246,6 +246,12 @@
     @ApiModelProperty(value= "涓氬姟鍛樿仈绯绘柟寮�")
     private String userXmlSelPhone;
 
+    /**
+     * 鑺傜偣璐熻矗浜�
+     */
+    @ApiModelProperty(value= "鑺傜偣璐熻矗浜�")
+    private Long director;
+
     public Plan() {}
 
     public String getHostId$(){
@@ -257,6 +263,16 @@
         return null;
     }
 
+    public String getDirector$(){
+        if (this.director==null) return "";
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.director);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
     public String getDeptId$(){
         DeptService service = SpringUtils.getBean(DeptService.class);
         Dept dept = service.selectById(this.deptId);
diff --git a/src/main/resources/mapper/PlanMapper.xml b/src/main/resources/mapper/PlanMapper.xml
index f5e7141..628eed5 100644
--- a/src/main/resources/mapper/PlanMapper.xml
+++ b/src/main/resources/mapper/PlanMapper.xml
@@ -35,6 +35,7 @@
         <result column="update_time" property="updateTime" />
         <result column="memo" property="memo" />
         <result column="user_xml_sel_phone" property="userXmlSelPhone" />
+        <result column="director" property="director" />
 
     </resultMap>
 
diff --git a/src/main/webapp/static/js/businessTrip/businessTripOther.js b/src/main/webapp/static/js/businessTrip/businessTripOther.js
index 95fe613..ae22229 100644
--- a/src/main/webapp/static/js/businessTrip/businessTripOther.js
+++ b/src/main/webapp/static/js/businessTrip/businessTripOther.js
@@ -99,7 +99,7 @@
             ,{field: 'updateTime$', align: 'center',title: '鏇存柊鏃堕棿',hide: false,width: 125}
             ,{field: 'updateId$', align: 'center',title: '鏇存柊浜哄憳',hide: false}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:240}
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:280}
         ]],
         request: {
             pageName: 'curr',
diff --git a/src/main/webapp/static/js/plan/plan.js b/src/main/webapp/static/js/plan/plan.js
index 8549e12..3af7f75 100644
--- a/src/main/webapp/static/js/plan/plan.js
+++ b/src/main/webapp/static/js/plan/plan.js
@@ -171,7 +171,7 @@
             ,{field: 'updateTime$', align: 'left',title: '淇敼鏃堕棿', hide: true}
             ,{field: 'memo', align: 'left',title: '娉ㄩ噴', hide: true}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 280}
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 340}
         ]],
         request: {
             pageName: 'curr',
@@ -531,6 +531,17 @@
                     }
                 });
                 break;
+            case 'approvalEnd':
+                layer.confirm('瀹℃壒鎷掔粷锛�', {
+                    skin: 'layui-layer-admin',
+                    shade: .1,
+                    offset: '200px',
+                    title: data.name
+                }, function (i) {
+                    layer.close(i);
+                    approvalEnd(data.id);
+                });
+                break;
             case 'edit':
                 showEditModel(data);
                 break;
@@ -657,6 +668,33 @@
         })
     }
 
+    function approvalEnd(planId, plannerId, dIdx) {
+        let loadIndex = layer.load(2);
+        $.ajax({
+            url: baseUrl+"/plan/approvalEnd/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                planId: planId,
+                plannerId: plannerId
+            },
+            method: 'POST',
+            success: function (res) {
+                if (dIdx) {
+                    layer.close(dIdx);
+                }
+                layer.close(loadIndex);
+                if (res.code === 200){
+                    layer.msg(res.msg, {icon: 1});
+                    tableReload();
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg, {icon: 2});
+                }
+            }
+        })
+    }
+
     /* 寮圭獥 - 鏂板銆佷慨鏀� */
     function showEditModel(mData) {
         let loadIndex = layer.load(2);
diff --git a/src/main/webapp/views/plan/plan.html b/src/main/webapp/views/plan/plan.html
index 89e3e6b..91f4b2c 100644
--- a/src/main/webapp/views/plan/plan.html
+++ b/src/main/webapp/views/plan/plan.html
@@ -135,6 +135,7 @@
 <script type="text/html" id="operate">
     {{# if (d.settle == 1 || d.settle == 2 || d.settle == 3) { }}
         <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">瀹℃壒</a>
+        <a class="layui-btn layui-btn-xs btn-edit" lay-event="approvalEnd">鍥為��瀹℃壒</a>
     {{# } }}
     <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="uploadLink">闄勪欢</a>
     {{# if (d.settle == 1) { }}

--
Gitblit v1.9.1