sunyize 2 rokov pred
rodič
commit
381d1fd6c5

+ 91 - 0
tnc-sms/src/main/java/org/jeecg/modules/smscheck/controller/SmsCheckCustomerInfoController.java

@@ -329,6 +329,29 @@ public class SmsCheckCustomerInfoController extends JeecgController<SmsCheckCust
         return Result.OK("批量删除成功!");
     }
 
+    @AutoLog(value = "客户信息-批量删除 子稽核员")
+    @ApiOperation(value = "客户信息-批量删除子稽核员", notes = "客户信息-批量删除子稽核员")
+    @DeleteMapping(value = "/deleteBatch/create/user")
+    @PermissionData(value = "truck/task/check/delete/person")
+    public Result<String> deleteBatchCreateUser(@RequestParam(name = "ids") String ids) {
+
+        List<String> list = Arrays.asList(ids.split(","));
+
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        StringBuilder errorMsg =new StringBuilder();
+        for (String s : list) {
+            SmsCheckCustomerInfo byId = customerInfoService.getById(s);
+            if (!byId.getCreateBy().equals(loginUser.getWorkNo())){
+                errorMsg.append("客户编号为:").append(byId.getCustomerNo()).append(".  用户编号为:").append(byId.getUserNo()).append("的信息非本人创建不可删除,请从新选择...");
+            }
+        }
+        if (!errorMsg.toString().isEmpty()){
+            return  Result.error(errorMsg.toString());
+        }
+        this.customerInfoService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
     /**
      * 通过id查询
      *
@@ -1412,6 +1435,74 @@ public class SmsCheckCustomerInfoController extends JeecgController<SmsCheckCust
         return Result.OK("添加成功!");
     }
 
+
+
+    /**
+     * 通知客户经理
+     *
+     * @param info 对象
+     * @return 结果
+     */
+    @AutoLog(value = "通知客户经理")
+    @ApiOperation(value = "通知客户经理", notes = "通知客户经理")
+    @PostMapping(value = "/notice/create/user")
+    @PermissionData(value = "truck/task/check/notice/person")
+    public Result<String> noticeCreateUser(@RequestBody SmsCheckCustomerInfo info) {
+        String staffNo = info.getStaffNo();
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        if (!info.getCreateBy().equals(loginUser.getWorkNo())){
+            return Result.error("子稽核员不可催办非本人创建信息!");
+        }
+
+        if (StringUtils.isEmpty(staffNo)){
+            return Result.error("用户邮箱获取失败");
+        }
+        LambdaQueryWrapper<SysUser> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        userLambdaQueryWrapper.eq(SysUser::getUsername,staffNo);
+        SysUser sysUser = sysUserService.getOne(userLambdaQueryWrapper);
+        if (sysUser == null){
+            return Result.error("用户邮箱获取失败");
+        }
+
+        String workNo = info.getStaffNo();
+        LoginUser toUser = sysBaseAPI.getUserByWorkNo(workNo);
+        MessageDTO message = new MessageDTO();
+        String taskId = info.getTaskId();
+        SmsCheckTask byId = taskService.getById(taskId);
+        String type ="";
+        String typeName ="";
+        //1:行短稽核 2:物联网业务稽核 3.复开审批 4.中继线稽核
+        if (Objects.equals(byId.getType(), CheckTypeCode.CHECK_TYPE_1)){
+            type = "稽核类型为:【行短稽核】,稽核任务名称为:【"+byId.getTaskName()+"】";
+            typeName="【行短稽核】";
+        }
+        if (Objects.equals(byId.getType(), CheckTypeCode.CHECK_TYPE_2)){
+            type =  "稽核类型为:【物联网业务稽核】,稽核任务名称为:【"+byId.getTaskName()+"】";
+            typeName="【物联网业务稽核】";
+        }
+        if (Objects.equals(byId.getType(), CheckTypeCode.CHECK_TYPE_3)){
+            type =  "稽核类型为:【复开审批】,稽核任务名称为:【"+byId.getTaskName()+"】";
+            typeName="【复开审批】";
+        }
+        if (Objects.equals(byId.getType(), CheckTypeCode.CHECK_TYPE_4)){
+            type =  "稽核类型为:【中继线稽核】,稽核任务名称为:【"+byId.getTaskName()+"】";
+            typeName="【中继线稽核】";
+        }
+        message.setTitle("稽核待办,用户编号:【" + info.getUserNo() + "】");
+        message.setContent(type+ "  ,客户编号:【" + info.getCustomerNo()
+                + "】,用户编号:【" + info.getUserNo() + "】的客户资料请尽快完善。");
+        message.setFromUser(sysUser.getUsername());
+        message.setToUser(toUser.getUsername());
+        sysBaseAPI.sendSysAnnouncement(message);
+        // 发送邮件
+        EmailSendMsgHandle emailSendMsgHandle = new EmailSendMsgHandle();
+        emailSendMsgHandle.SendMsg(sysUser.getEmail(),
+                typeName+"稽核待办,用户编号:【" + info.getUserNo() + "】", type+ "  ,客户编号:【" + info.getCustomerNo()
+                        + "】,用户编号:【" + info.getUserNo() + "】的客户资料请尽快完善。");
+        return Result.OK("添加成功!");
+    }
+
     @PostMapping(value = "/checkInfo/warning/count")
     public Result<String> checkInfoWarningCount(@RequestBody SmsCheckCustomerInfo smsCheckCustomerInfo) {
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();

+ 171 - 1
tnc-sms/src/main/java/org/jeecg/modules/smscheck/controller/SmsCheckTaskController.java

@@ -17,6 +17,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.aspect.annotation.PermissionData;
@@ -25,6 +26,7 @@ import org.jeecg.common.system.api.ISysBaseAPI;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.DictModel;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.system.vo.SysDepartModel;
 import org.jeecg.modules.smscheck.configs.CheckStateCode;
 import org.jeecg.modules.smscheck.entity.*;
@@ -152,7 +154,34 @@ public class SmsCheckTaskController extends JeecgController<SmsCheckTask, ISmsCh
     @ApiOperation(value = "稽核任务-编辑", notes = "稽核任务-编辑")
     @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
     public Result<String> edit(@RequestBody SmsCheckTask smsCheckTask) {
-        this.taskService.update(new SmsCheckTask().setTaskState(smsCheckTask.getTaskState()).setDescription(smsCheckTask.getDescription()),
+        this.taskService.update(new SmsCheckTask().setTaskState(smsCheckTask.getTaskState())
+                        .setDescription(smsCheckTask.getDescription())
+                        .setTaskStartTime(smsCheckTask.getTaskStartTime()).setTaskEndTime(smsCheckTask.getTaskEndTime()),
+                new UpdateWrapper<SmsCheckTask>().lambda().eq(SmsCheckTask::getId,smsCheckTask.getId()));
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 编辑(子稽核员)
+     *
+     * @param smsCheckTask 对象
+     * @return 结果
+     */
+    @AutoLog(value = "稽核任务-编辑 子稽核员")
+    @ApiOperation(value = "稽核任务-编辑 子稽核员", notes = "稽核任务-编辑 子稽核员")
+    @RequestMapping(value = "/edit/create/user", method = {RequestMethod.PUT, RequestMethod.POST})
+    @PermissionData(value = "/truck/task/edit/person")
+    public Result<String> editCreateUser(@RequestBody SmsCheckTask smsCheckTask) {
+
+
+        SmsCheckTask byId = taskService.getById(smsCheckTask.getId());
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (!byId.getCreateBy().equals(loginUser.getWorkNo())){
+            return Result.error("子稽核员不可操作非本人创建任务!");
+        }
+        this.taskService.update(new SmsCheckTask().setTaskState(smsCheckTask.getTaskState())
+                        .setDescription(smsCheckTask.getDescription())
+                        .setTaskStartTime(smsCheckTask.getTaskStartTime()).setTaskEndTime(smsCheckTask.getTaskEndTime()),
                 new UpdateWrapper<SmsCheckTask>().lambda().eq(SmsCheckTask::getId,smsCheckTask.getId()));
         return Result.OK("编辑成功!");
     }
@@ -543,6 +572,147 @@ public class SmsCheckTaskController extends JeecgController<SmsCheckTask, ISmsCh
         return Result.OK("导入成功!导入成功条数" + ( listErro.size()-compareNum.get())+"。 导入失败条数"+ compareNum , listErro);
     }
 
+    /**
+     * 通过excel导入数据
+     *
+     * @param taskId 任务id
+     * @param list   数据
+     * @return 导入结果
+     */
+    @PostMapping(value = "/{taskId}/importCustomerData/create/user")
+    @PermissionData(value = "truck/task/import/person")
+    public Result<?> importCustomerDataCreateuser(@PathVariable String taskId, @RequestBody List<SmsCheckCustomerInfoVo> list) throws ExecutionException, InterruptedException {
+        UUID uuid = UUID.randomUUID();
+        //1同一个任务 用户编号不可一致
+        //2 员工得存在
+        // 开始时间
+        long start = System.currentTimeMillis();
+        // List<SmsCheckCustomerInfo> dataList = new ArrayList<>();
+        //导入失败数据
+        List<SmsCheckCustomerInfoVo> listErro = new ArrayList<>();
+        int customerCount = 0;
+
+        List<SysUser> userList = sysUserService.list(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0));
+
+        Map<String, SysUser> userMap
+                = userList.stream().collect(Collectors.toMap(SysUser::getWorkNo, Function.identity(), (o, n) -> o));
+
+        AtomicInteger compareNum = new AtomicInteger(0);
+        Set<String>set =new HashSet<>();
+        SmsCheckTask byId = taskService.getById(taskId);
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (!byId.getCreateBy().equals(loginUser.getWorkNo())){
+            return Result.error("子稽核员不可导入非本人创建任务!");
+        }
+
+        if (byId.getType()==2){
+            //客户信息所属类型:1:行短稽核 2:物联网业务稽核 3.复开审批 4.中继线稽核'
+
+            Map<Integer,SmsCheckCustomerInfoError>mapError = new HashMap<>();
+            Map<Integer,SmsCheckCustomerInfoVo> mapNormal =new HashMap<>();
+            Map<Integer,SmsCheckCustomerInfoVo> mapErrorVo =new HashMap<>();
+            int setSize =0;
+            int keys=0;
+            for (SmsCheckCustomerInfoVo smsCheckCustomerInfoVo : list) {
+                keys++;
+                String[] split = smsCheckCustomerInfoVo.getUserNo().trim().split("、");
+                String errNo="";
+                for (String s : split) {
+                    setSize++;
+                    set.add(s);
+                    if (setSize!=set.size()){
+                        setSize--;
+                        errNo+=s+"  ";
+                        smsCheckCustomerInfoVo.setResult("0");
+                        smsCheckCustomerInfoVo.setErrorMsg("用户编号"+errNo+"重复");
+                        mapErrorVo.put(keys,smsCheckCustomerInfoVo);
+                    }else {
+                        if (StringUtils.isBlank(errNo)){
+                            mapNormal.put(keys,smsCheckCustomerInfoVo);
+                        }
+                    }
+                }
+            }
+            List<SmsCheckCustomerInfoVo> errorListVo =new ArrayList<>(mapErrorVo.values());
+            List<SmsCheckCustomerInfoError> errorList = new ArrayList<>(mapError.values());
+
+            list= new ArrayList<>(mapNormal.values());
+            list.addAll(errorListVo);
+        }
+
+        // 每20条数据开启一条线程
+        int threadSize = 20;
+        // 总数据条数
+        int dataSize = list.size();
+        // 线程数
+        int threadNum = dataSize / threadSize + 1;
+        //暂定20个一组
+        boolean special = list.size() % threadSize == 0;
+
+        ExecutorService executorService = new ThreadPoolExecutor(threadNum, threadNum+5,
+                0L, TimeUnit.MILLISECONDS,
+                new LinkedBlockingQueue<Runnable>(10) );
+
+        Map<String,List<SmsCheckCustomerInfoVo>> mapData = new HashMap<>();
+        List<SmsCheckCustomerInfoVo> cutList ;
+        for (int i = 0; i < threadNum; i++) {
+            //最后一次
+            if (i == threadNum - 1) {
+                if (special) {
+                    break;
+                }
+
+                mapData.put(""+i, list.subList( threadSize * i, list.size()));
+            } else {
+                mapData.put(""+i,list.subList(  threadSize * i,  threadSize * (i + 1)));
+            }
+        }
+
+        for (String key : mapData.keySet()) {
+            List<SmsCheckCustomerInfoVo> smsCheckCustomerInfoVos = mapData.get(key);
+            ImportCustomerDataTask importCustomerDataTask = new ImportCustomerDataTask();
+            importCustomerDataTask.setUuid(uuid);
+            importCustomerDataTask.setTaskId(taskId);
+            importCustomerDataTask.setUserMap(userMap);
+            importCustomerDataTask.setList(smsCheckCustomerInfoVos);
+            importCustomerDataTask.setTaskService(taskService);
+            importCustomerDataTask.setCompanyService(companyService);
+            importCustomerDataTask.setSmsNumberService(smsNumberService);
+            importCustomerDataTask.setCompareNum(compareNum);
+            importCustomerDataTask.setCustomerInfoService(customerInfoService);
+
+            Future submit = executorService.submit(importCustomerDataTask);
+            List<SmsCheckCustomerInfoVo>  o = (List<SmsCheckCustomerInfoVo>) submit.get();
+            listErro.addAll(o);
+        }
+        SmsCheckTask task = taskService.getById(taskId);
+        // 更新导入
+        if (list.size()-compareNum.get()>0) {
+            task.setCustomerCount(task.getCustomerCount() + (list.size()-compareNum.get()));
+            taskService.updateById(task);
+        }
+        if (listErro!=null && listErro.size()>0){
+            List<SmsCheckCustomerInfoError> smsCheckCustomerInfoErrors = new ArrayList<>();
+            for (SmsCheckCustomerInfoVo smsCheckCustomerInfoVo : listErro) {
+                if (StringUtils.isNotBlank(smsCheckCustomerInfoVo.getResult())&&smsCheckCustomerInfoVo.getResult().equals("0")){
+                    SmsCheckCustomerInfoError smsCheckCustomerInfoError =new SmsCheckCustomerInfoError();
+                    BeanUtils.copyProperties(smsCheckCustomerInfoVo, smsCheckCustomerInfoError);
+                    smsCheckCustomerInfoError.setDelFlag(0);
+                    smsCheckCustomerInfoError.setBatchNo(uuid.toString());
+                    smsCheckCustomerInfoErrors.add(smsCheckCustomerInfoError);
+                }
+
+            }
+            //smsCheckCustomerInfoErrors.addAll(errorList);
+            boolean b = smsCheckCustomerInfoErrorService.saveOrUpdateBatch(smsCheckCustomerInfoErrors);
+        }
+        executorService.shutdown();
+        System.err.println("执行任务消耗了 :" + (System.currentTimeMillis() - start) + "毫秒");
+        return Result.OK("导入成功!导入成功条数" + ( listErro.size()-compareNum.get())+"。 导入失败条数"+ compareNum , listErro);
+    }
+
+
     /**
      * 校验客户信息
      *

+ 105 - 0
tnc-sms/src/main/java/org/jeecg/modules/smscheck/controller/SmsTruckCustomerDataController.java

@@ -9,10 +9,13 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
 import org.checkerframework.checker.units.qual.A;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.aspect.annotation.PermissionData;
 import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.smscheck.configs.CheckStateCode;
 import org.jeecg.modules.smscheck.configs.ObjectComparator;
 import org.jeecg.modules.smscheck.entity.*;
@@ -280,6 +283,108 @@ public class SmsTruckCustomerDataController  extends JeecgController<SmsTruckCus
         }
         return Result.error("新增失败");
     }
+
+
+
+    @AutoLog(value = "客户资料Log 子稽核员-添加")
+    @ApiOperation(value = "客户资料Log 子稽核员-添加", notes = "客户资料Log 子稽核员-添加")
+    @PostMapping(value = "/addLog/create/user")
+    @PermissionData(value = "truck/task/check/audit/person")
+    public Result<String> addLogCreateUser(@RequestBody JSONObject jsonObject) throws IllegalAccessException {
+
+        SmsTruckCheckCustomerDataAndLog smsTruckCheckCustomerDataAndLog = JSON.parseObject(jsonObject.toJSONString(), SmsTruckCheckCustomerDataAndLog.class);
+
+        SmcTruckCheckLog truckCheckLog = new SmcTruckCheckLog();
+        BeanUtils.copyProperties(smsTruckCheckCustomerDataAndLog,truckCheckLog);
+
+        SmsTruckCustomerData truckCustomerData =new SmsTruckCustomerData();
+        BeanUtils.copyProperties(smsTruckCheckCustomerDataAndLog,truckCustomerData);
+
+        truckCheckLog.setId(smsTruckCheckCustomerDataAndLog.getLogId());
+
+        truckCustomerData.setId(smsTruckCheckCustomerDataAndLog.getDataId());
+
+        SmsCheckCustomerInfo byId = infoService.getById(truckCheckLog.getInfoId());
+
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (!byId.getCreateBy().equals(loginUser.getWorkNo())){
+            return Result.error("子稽核员不可操作非本人创建信息!");
+        }
+        truckCheckLog.setDataId(byId.getDataId());
+        SmsCheckTask byId1 = taskService.getById(byId.getTaskId());
+        List<SmsCheckZGHistory> smsCheckZGHistories = new ArrayList<>();
+
+        // SmsCheckCustomerDataLog  如果id不是空的 则存在以前数据
+        if (StringUtils.isNotBlank(truckCheckLog.getId())){
+            SmcTruckCheckLog logServiceById = smcTruckCheckLogService.getById(truckCheckLog.getId());
+            Map<String, Object> diffProperties = ObjectComparator.compareObjects(truckCheckLog, logServiceById,byId1.getType());
+            for (Map.Entry<String, Object> entry : diffProperties.entrySet()) {
+                SmsCheckZGHistory checkZGHistory = new SmsCheckZGHistory();
+                checkZGHistory.setDataId(byId.getDataId());
+                checkZGHistory.setContext(entry.getValue().toString());
+                checkZGHistory.setUpdateField(entry.getKey());
+                Date date = new Date();
+                SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
+                checkZGHistory.setUpdateDate(dateFormat.format(date));
+                smsCheckZGHistories.add(checkZGHistory);
+                System.out.println("Property: " + entry.getKey() + ", Value: " + entry.getValue());
+            }
+        }
+        //SmsCheckCustomerData 如果id不是空的 则存在以前数据
+        if (StringUtils.isNotBlank(truckCustomerData.getId())){
+            SmsTruckCustomerData dataServiceById = smsTruckCustomerDataService.getById(truckCustomerData.getId());
+            Map<String, Object> diffProperties = ObjectComparator.compareObjects(truckCustomerData, dataServiceById,byId1.getType());
+            for (Map.Entry<String, Object> entry : diffProperties.entrySet()) {
+                SmsCheckZGHistory checkZGHistory = new SmsCheckZGHistory();
+                checkZGHistory.setDataId(byId.getDataId());
+                checkZGHistory.setContext(entry.getValue().toString());
+                checkZGHistory.setUpdateField(entry.getKey());
+                Date date = new Date();
+                SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
+                checkZGHistory.setUpdateDate(dateFormat.format(date));
+                smsCheckZGHistories.add(checkZGHistory);
+                System.out.println("Property: " + entry.getKey() + ", Value: " + entry.getValue());
+            }
+        }
+        if (smsCheckZGHistories.size()>0){
+            smsCheckZGHistoryService.saveBatch(smsCheckZGHistories);
+        }
+        boolean saveLog = smcTruckCheckLogService.saveOrUpdate(truckCheckLog);
+
+        SmsTruckCheckCustomerDataLogBill smsTruckCheckCustomerDataLogBill = new SmsTruckCheckCustomerDataLogBill();
+        BeanUtils.copyProperties(truckCheckLog,smsTruckCheckCustomerDataLogBill);
+        smsTruckCheckCustomerDataLogBill.setId(null);
+        smsTruckCheckCustomerDataLogBill.setCreateDate(new Date());
+
+
+        boolean saveData = smsTruckCustomerDataService.saveOrUpdate(truckCustomerData);
+
+        List<StepsNowVo> strings = JSONArray.parseArray(smsTruckCheckCustomerDataAndLog.getStepsNow(), StepsNowVo.class);
+
+        if (saveLog && saveData){
+            Map<String, String> mapByResult = getMapByResult(truckCheckLog,strings);
+            // 修改客户状态为     未完善/未上传
+            SmsCheckCustomerInfo smsCheckCustomerInfo = new SmsCheckCustomerInfo();
+            /** 稽核状态 0:未处理;1:未完善;2:待稽核;3:已整改;4:待整改;5:稽核通过;  */
+            if (byId.getCheckState().equals(CheckStateCode.CHECK_STSTE_4)){
+                smsCheckCustomerInfo.setCheckState(CheckStateCode.CHECK_STSTE_2);
+            }else {
+                if (mapByResult.isEmpty()){
+                    smsCheckCustomerInfo.setCheckState(CheckStateCode.CHECK_STSTE_5);
+                }else {
+                    iSmsTrcukCustomerDataLogBillService.save(smsTruckCheckCustomerDataLogBill);
+                    smsCheckCustomerInfo.setCheckState(CheckStateCode.CHECK_STSTE_4);
+                }
+            }
+            smsCheckCustomerInfo.setId(byId.getId());
+
+            smsCheckCustomerInfo.setDataLogId(truckCheckLog.getId());
+            infoService.updateState(smsCheckCustomerInfo);
+            return Result.OK();
+        }
+        return Result.error("新增失败");
+    }
+
     private Map<String,String>getMapByResult(SmcTruckCheckLog smsCheckCustomerDataLog,List<StepsNowVo>string){
         HashMap <String,String> map =new HashMap<>();
         for (StepsNowVo stepsNowVo : string) {