From cbc9250b33a955bc919a6afc5d4101ef65bbfafa Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 10 十一月 2023 12:53:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/zycrm' into zycrm

---
 src/main/java/com/zy/crm/manager/controller/ContractController.java |  275 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 246 insertions(+), 29 deletions(-)

diff --git a/src/main/java/com/zy/crm/manager/controller/ContractController.java b/src/main/java/com/zy/crm/manager/controller/ContractController.java
index 4853b8d..573a275 100644
--- a/src/main/java/com/zy/crm/manager/controller/ContractController.java
+++ b/src/main/java/com/zy/crm/manager/controller/ContractController.java
@@ -1,15 +1,15 @@
 package com.zy.crm.manager.controller;
 
-import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.DateUtils;
+import com.core.exception.CoolException;
+import com.zy.crm.common.model.SettleDto;
 import com.zy.crm.common.service.OssService;
-import com.zy.crm.manager.entity.Contract;
-import com.zy.crm.manager.entity.ContractSales;
-import com.zy.crm.manager.entity.PriOnline;
+import com.zy.crm.manager.entity.*;
 import com.zy.crm.manager.service.ContractSalesService;
 import com.zy.crm.manager.service.ContractService;
 import com.core.annotations.ManagerAuth;
@@ -18,20 +18,19 @@
 import com.core.common.R;
 import com.core.domain.KeyValueVo;
 import com.zy.crm.common.web.BaseController;
+import com.zy.crm.manager.service.ProcessPermissionsService;
 import com.zy.crm.manager.utils.ChineseNumberUtils;
 import com.zy.crm.manager.utils.WordUtils;
+import com.zy.crm.system.entity.User;
+import com.zy.crm.system.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.InputStreamResource;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.util.ClassUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -44,11 +43,20 @@
     private ContractSalesService contractSalesService;
     @Autowired
     private OssService ossService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private ProcessPermissionsService processPermissionsService;
 
-    @RequestMapping(value = "/contract/{id}/auth")
+    @RequestMapping(value = "/contract/{id}/auth2")
     @ManagerAuth
     public R get(@PathVariable("id") String id) {
-        return R.ok(contractService.selectById(String.valueOf(id)));
+        Contract contract = contractService.selectById(String.valueOf(id));
+        assert contract != null;
+        JSONObject resultObj = JSON.parseObject(JSON.toJSONString(contract));
+        // 姝ラ鏉$浉鍏�
+        resultObj.put("step", contract.getSettle() == 5 ? 0 : contract.getSettle() + 1);
+        return R.ok().add(resultObj);
     }
 
     @RequestMapping(value = "/contract/list/auth")
@@ -68,29 +76,84 @@
     }
 
     private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        boolean signUserId = false;
+        boolean signDeptId = false;
+        boolean signHostId = false;
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            if (entry.getKey().equals("dept_id")){
+                signDeptId = true;
+                if (String.valueOf(entry.getValue()).equals("19")){
+                    signHostId = true;
+                }
+            }
+        }
         for (Map.Entry<String, Object> entry : map.entrySet()){
             String val = String.valueOf(entry.getValue());
             if (val.contains(RANGE_TIME_LINK)){
                 String[] dates = val.split(RANGE_TIME_LINK);
                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                 wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else if (entry.getKey().equals("dept_id")){
+                if (!val.equals("19")){
+                    wrapper.eq(entry.getKey(), val);
+                }
+            } else if (entry.getKey().equals("user_id") && !signDeptId){
+                signUserId = true;
+                wrapper.eq(entry.getKey(), val);
             } else {
                 wrapper.like(entry.getKey(), val);
             }
         }
+        if (!signUserId && !signDeptId){
+            if (getRole().getId()==1){
+                wrapper.or().eq("host_id",1);
+            }else if (getRole().getId()==2){
+                wrapper.eq("dept_id",getDeptId());
+            }else {
+                wrapper.eq("user_id", getUserId());
+            }
+        }
+        if (signHostId){
+            wrapper.or().eq("host_id",1);
+        }
     }
 
     @RequestMapping(value = "/contract/add/auth")
-    @ManagerAuth
+    @ManagerAuth(memo = "娣诲姞鍚堝悓")
     public R add(Contract contract) {
-        contract.setCreateBy(getUserId());
-        contract.setCreateTime(new Date());
+        Date now = new Date();
+        contract.setUserId(getUserId());
+        //鍒涘缓浜哄憳閮ㄩ棬
+        contract.setDeptId(getDeptId());
+        contract.setCreateTime(now);
+
+        contract.setSettle(1);
+
+        User manager = new User();
+        try{
+            manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 鑾峰彇閮ㄩ棬棰嗗
+        }catch (Exception e){
+            manager = getUser();
+        }
+        contract.setDirector(manager.getId());
+        List<String> initNames = new ArrayList<>();
+        initNames.add("鍒涘缓鍚堝悓妯℃澘");
+        initNames.add("鎻愪氦鍚堝悓");
+        initNames.add("閮ㄩ棬缁忕悊瀹℃牳");
+        ProcessPermissions processPermissions = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 7).eq("process",  "3-1" ));//7锛氬悎鍚岀鐞�
+        User president = userService.selectById(processPermissions.getUserId());
+        initNames.add("鎬荤粡鍔�"+president.getNickname()+"瀹℃牳");
+        initNames.add("涓氬姟鍛樼‘璁�");
+        contract.setSettleMsg(JSON.toJSONString(SettleDto.initContract(manager,getUser(),president,initNames,4)));
+
+        contract.setUpdateTime(now);
+        contract.setUpdateBy(getUserId());
         contractService.insert(contract);
         return R.ok();
     }
 
 	@RequestMapping(value = "/contract/update/auth")
-	@ManagerAuth
+	@ManagerAuth(memo = "鏇存柊鍚堝悓")
     public R update(Contract contract){
         if (Cools.isEmpty(contract) || null==contract.getId()){
             return R.error();
@@ -102,7 +165,7 @@
     }
 
     @RequestMapping(value = "/contract/delete/auth")
-    @ManagerAuth
+    @ManagerAuth(memo = "鍒犻櫎鍚堝悓")
     public R delete(@RequestParam(value="ids[]") Long[] ids){
          for (Long id : ids){
             contractService.deleteById(id);
@@ -111,7 +174,7 @@
     }
 
     @RequestMapping(value = "/contract/generate/auth")
-    @ManagerAuth
+    @ManagerAuth(memo = "鐢熸垚鍚堝悓")
     public ResponseEntity<InputStreamResource> generate(@RequestParam Integer id,
                                                         @RequestParam String contractTemplate){
         try {
@@ -183,14 +246,18 @@
             /////////////////////////鐢熸垚Tab琛ㄦ牸鏁版嵁/////////////////////////
 
             String fileName = this.getClass().getClassLoader().getResource("contractTemplate/" + contractTemplate + ".docx").getPath();//鑾峰彇鏂囦欢璺緞
-            return WordUtils.generate(fileName, map, tabParam);
+
+//            String outPdfPath = fileName.split("\\.")[0]+".pdf";
+            ResponseEntity<InputStreamResource> generate = WordUtils.generate(fileName, map, tabParam);
+//            WordUtils.documents4jWordToPdf(fileName,outPdfPath);
+            return generate;
         } catch (Exception e) {
             return null;
         }
     }
 
     @RequestMapping(value = "/contract/upload/auth")
-    @ManagerAuth
+    @ManagerAuth(memo = "涓婁紶鍚堝悓")
     public R upload(@RequestParam("id") Integer id,
                          @RequestParam("file") MultipartFile[] files) throws IOException {
         Contract contract = contractService.selectById(id);
@@ -204,7 +271,7 @@
         //鏂囦欢鍚庣紑鍚�
         String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
         //涓婁紶鏂囦欢鍚�
-        String filename = format.format(new Date()) + suffix;
+        String filename = format.format(new Date()) + "_" + file.getOriginalFilename();
         //鏈�缁堟枃浠惰矾寰�
         String filepath = path + "/" + filename;
         //OSS鏂囦欢瀛樺偍璺緞
@@ -231,21 +298,18 @@
     }
 
     @RequestMapping(value = "/contract/download/auth")
-    @ManagerAuth
-    public ResponseEntity<InputStreamResource> download(@RequestParam("id") Integer id) {
+    @ManagerAuth(memo = "涓嬭浇鍚堝悓")
+    public R download(@RequestParam("id") Integer id) {
         Contract contract = contractService.selectById(id);
         if (contract == null) {
-            return null;
+            return R.error();
         }
         if (Cools.isEmpty(contract.getFilepath())) {
-            return null;
+            return R.error();
         }
 
-        try {
-            return ossService.downloadFile(contract.getFilepath());//浠嶰SS涓笅杞芥枃浠�
-        } catch (Exception e) {
-            return null;
-        }
+        String download = ossService.download(contract.getFilepath());//鑾峰彇OSS涓存椂涓嬭浇URL
+        return R.ok().add(download);
     }
 
     @RequestMapping(value = "/contract/export/auth")
@@ -294,4 +358,157 @@
         return R.ok().add(vos);
     }
 
+    @PostMapping(value = "/contract/approval/auth")
+    @ManagerAuth
+    public R approvalBusinessTrip(@RequestParam Long contractId,
+                                  @RequestParam(required = false) Long plannerId){
+        Contract contract = contractService.selectById(contractId);
+        assert contract != null;
+        Date now = new Date();
+        switch (contract.getSettle()) {
+            case 0:
+                if (Cools.isEmpty(getUser())) {
+                    return R.error("鎶辨瓑锛屾偍娌℃湁鎻愪氦鐨勬潈闄�");
+                }
+                if (!getUserId().equals(getUser().getId())) {
+                    return R.error("鎶辨瓑锛屾偍娌℃湁鎻愪氦鐨勬潈闄�");
+                }
+                // 淇敼 settle 姝ラ鏁版嵁
+                List<SettleDto> list1 = JSON.parseArray(contract.getSettleMsg(), SettleDto.class);
+                for (SettleDto dto : list1) {
+                    switch (dto.getStep()) {
+                        case 0:
+                            dto.setCurr(Boolean.FALSE);
+                            break;
+                        case 1:
+                            dto.setCurr(Boolean.TRUE);
+                            dto.setMsg(getUser().getNickname() + "鎻愪氦瀹屾垚");
+                            dto.setTime(DateUtils.convert(now));
+                            break;
+                        case 2:
+                            contract.setDirector(dto.getUserId());
+                            break;
+                        default:
+                            break;
+                    }
+                }
+                contract.setSettleMsg(JSON.toJSONString(list1));
+                // 淇敼瑙勫垝鍗曠姸鎬�
+                contract.setSettle(1);
+                contract.setUpdateTime(now);
+
+                if (!contractService.updateById(contract)) {
+                    throw new CoolException("鎻愪氦澶辫触锛岃鑱旂郴绠$悊鍛�");
+                }
+                break;
+            case 1:
+                // 鏈儴闂ㄧ粡鐞嗗鏍�
+                User manager = userService.selectById(contract.getDirector());
+
+                if (manager.getId().equals(getUserId())) {
+
+                    // 淇敼 settle 姝ラ鏁版嵁
+                    List<SettleDto> list = JSON.parseArray(contract.getSettleMsg(), SettleDto.class);
+                    for (SettleDto dto : list) {
+                        switch (dto.getStep()) {
+                            case 1:
+                                dto.setCurr(Boolean.FALSE);
+                                break;
+                            case 2:
+                                dto.setCurr(Boolean.TRUE);
+                                dto.setMsg("閮ㄩ棬缁忕悊" + manager.getNickname() + "瀹℃壒閫氳繃");
+                                dto.setTime(DateUtils.convert(now));
+                                break;
+                            case 3:
+                                contract.setDirector(dto.getUserId());
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                    contract.setSettleMsg(JSON.toJSONString(list));
+
+                    // 淇敼瑙勫垝鍗曠姸鎬�
+                    contract.setSettle(2);  // 鐢宠閫氳繃
+                    contract.setUpdateTime(now);
+                    if (!contractService.updateById(contract)) {
+                        throw new CoolException("瀹℃牳澶辫触锛岃鑱旂郴绠$悊鍛�");
+                    }
+                } else {
+                    return R.error("鎶辨瓑锛屾偍娌℃湁瀹℃牳鐨勬潈闄愶紒锛侊紒");
+                }
+                break;
+            case 2:
+                User planLeader = userService.selectById(contract.getDirector());
+
+                if (planLeader.getId().equals(getUserId())) {
+
+                    // 淇敼 settle 姝ラ鏁版嵁
+                    List<SettleDto> list = JSON.parseArray(contract.getSettleMsg(), SettleDto.class);
+                    for (SettleDto dto : list) {
+                        switch (dto.getStep()) {
+                            case 2:
+                                dto.setCurr(Boolean.FALSE);
+                                break;
+                            case 3:
+                                dto.setCurr(Boolean.TRUE);
+                                dto.setMsg("鎬昏鍔�" + planLeader.getNickname() + "瀹℃壒閫氳繃");
+                                dto.setTime(DateUtils.convert(now));
+                                break;
+                            case 4:
+                                contract.setDirector(dto.getUserId());
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                    contract.setSettleMsg(JSON.toJSONString(list));
+
+                    // 淇敼瑙勫垝鍗曠姸鎬�
+                    contract.setSettle(3);  // 鐢宠閫氳繃
+                    contract.setUpdateTime(now);
+                    if (!contractService.updateById(contract)) {
+                        throw new CoolException("瀹℃牳澶辫触锛岃鑱旂郴绠$悊鍛�");
+                    }
+                } else {
+                    return R.error("鎶辨瓑锛屾偍娌℃湁瀹℃牳鐨勬潈闄愶紒锛侊紒");
+                }
+                break;
+            case 3:
+                // 涓氬姟鍛�
+                User salesman0 = userService.selectById(contract.getUserId());
+                if (!getUserId().equals(salesman0.getId())) {
+                    return R.error("鎶辨瓑锛屾偍鏃犻渶纭锛侊紒锛�");
+                }
+                // 淇敼 settle 姝ラ鏁版嵁
+                List<SettleDto> list2 = JSON.parseArray(contract.getSettleMsg(), SettleDto.class);
+                for (SettleDto dto : list2) {
+                    switch (dto.getStep()) {
+                        case 3:
+                            dto.setCurr(Boolean.TRUE);
+                            break;
+                        case 4:
+                            dto.setCurr(Boolean.TRUE);
+                            dto.setMsg("涓氬姟鍛�" + salesman0.getNickname() + "浠ョ‘璁�");
+                            dto.setTime(DateUtils.convert(new Date()));
+                            break;
+                        default:
+                            break;
+                    }
+                }
+                contract.setSettleMsg(JSON.toJSONString(list2));
+                // 淇敼瑙勫垝鍗曠姸鎬�
+                contract.setSettle(4);  // 瀹℃壒閫氳繃
+                contract.setUpdateTime(new Date());
+
+                if (!contractService.updateById(contract)) {
+                    throw new CoolException("纭澶辫触锛岃鑱旂郴绠$悊鍛�");
+                }
+                break;
+            default:
+                return R.error();
+        }
+        return R.ok("瀹℃壒鎴愬姛");
+    }
+
 }

--
Gitblit v1.9.1