中扬CRM客户关系管理系统
LSH
2024-04-03 674aef62d298f9fbce41b9b1725c71d056dfd55b
src/main/java/com/zy/crm/manager/controller/WeeklyController.java
@@ -1,19 +1,18 @@
package com.zy.crm.manager.controller;
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.manager.entity.Weekly;
import com.zy.crm.manager.entity.WeeklyDailyPlan;
import com.zy.crm.manager.entity.WeeklyDailyReality;
import com.zy.crm.common.entity.PhoneCodeTypeParam;
import com.zy.crm.common.model.SettleDto;
import com.zy.crm.manager.entity.*;
import com.zy.crm.manager.entity.param.CstmrUtilsParam;
import com.zy.crm.manager.entity.param.WeeklyDomainParam;
import com.zy.crm.manager.service.WeeklyDailyPlanService;
import com.zy.crm.manager.service.WeeklyDailyRealityService;
import com.zy.crm.manager.service.WeeklyService;
import com.zy.crm.manager.service.*;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
@@ -21,6 +20,8 @@
import com.core.domain.KeyValueVo;
import com.zy.crm.common.web.BaseController;
import com.zy.crm.manager.utils.TimeCalculatorUtils;
import com.zy.crm.system.entity.User;
import com.zy.crm.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -38,11 +39,32 @@
    private WeeklyDailyPlanService weeklyDailyPlanService;
    @Autowired
    private WeeklyDailyRealityService weeklyDailyRealityService;
    @Autowired
    private UserService userService;
    @Autowired
    private WeeklyFollService weeklyFollService;
    @Autowired
    private SmsCodeService smsCodeService;
    String PZH = " ————————————————— ";
    Integer PBN = 3;
    @RequestMapping(value = "/weekly/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(weeklyService.selectById(String.valueOf(id)));
        Weekly weekly = weeklyService.selectById(String.valueOf(id));
        assert weekly != null;
        JSONObject resultObj = JSON.parseObject(JSON.toJSONString(weekly));
        if (!Cools.isEmpty(weekly.getForm())) {
            JSONObject formObj = JSON.parseObject(weekly.getForm());
            formObj.forEach(resultObj::putIfAbsent);
        }
        // 步骤条相关
        resultObj.put("step", weekly.getSettle().equals(weekly.getSettleSize()) ? 0 : weekly.getSettle() + 1);
        return R.ok().add(resultObj);
//        return R.ok(weeklyService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/weekly/list/auth")
@@ -93,11 +115,27 @@
    @RequestMapping(value = "/weekly/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            weeklyService.deleteById(id);
        }
        return R.ok();
    public R delete(@RequestParam() Long[] ids){
         try{
             for (Long id : ids){
                 List<WeeklyDailyReality> weeklyDailyRealities = weeklyDailyRealityService.selectList(new EntityWrapper<WeeklyDailyReality>().eq("weekly_id", id));
                 for (WeeklyDailyReality weeklyDailyReality:weeklyDailyRealities){
                     weeklyDailyRealityService.deleteById(weeklyDailyReality);
                 }
                 List<WeeklyDailyPlan> weeklyDailyPlans = weeklyDailyPlanService.selectList(new EntityWrapper<WeeklyDailyPlan>().eq("weekly_id", id));
                 for (WeeklyDailyPlan weeklyDailyPlan:weeklyDailyPlans){
                     weeklyDailyPlanService.deleteById(weeklyDailyPlan);
                 }
                 List<WeeklyFoll> weeklyFolls = weeklyFollService.selectList(new EntityWrapper<WeeklyFoll>().eq("weekly_id", id));
                 for (WeeklyFoll weeklyFoll:weeklyFolls){
                     weeklyFollService.deleteById(weeklyFoll);
                 }
                 weeklyService.deleteById(id);
             }
         }catch (Exception e){
             throw new CoolException("删除失败,异常信息:"+e);
         }
         return R.ok();
    }
    @RequestMapping(value = "/weekly/export/auth")
@@ -168,8 +206,6 @@
            weekly.setDeptId(getDeptId());               // 所属部门
            weekly.setUserId(getUserId());               // 所属人员
            weekly.setDirector(getUserId());               // 所属人员
            weekly.setCreateBy(getUserId());
            weekly.setCreateTime(now);
            weekly.setUpdateBy(getUserId());
@@ -212,6 +248,34 @@
            weekly.setWeeklyNowMonth(TimeCalculatorUtils.WeeklyNowMonthDay(weekly.getStartTime()));
            weekly.setWeeklyDayMonth(weekly.getWeeklyMonth()+"月第"+weekly.getWeeklyNowMonth()+"周");
            User manager = new User();
            try {
                manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 获取部门领导
            } catch (Exception e) {
                manager = getUser();
            }
            // 获取业务员
            List<String> initNames = new ArrayList<>();
            initNames.add("创建了审批");
            initNames.add("业务员提交");
            initNames.add("部门领导审核");
            List<User> users = new ArrayList<>();
            users.add(getUser());
            users.add(getUser());
            users.add(manager);
//            users.add(getUser());
            weekly.setSettleMsg(JSON.toJSONString(SettleDto.InItFlowPathTwo(users, initNames, users.size())));
            weekly.setSettleSize(users.size());
            weekly.setSettleCurrent(1);
            if (users.size() > 1) {
                weekly.setDirector(users.get(1).getId());
            } else {
                weekly.setDirector(getUserId());
            }
            weekly.setSettleSize(users.size());
            List<Date> dates = TimeCalculatorUtils.WeeklyListDays(dateList);//获取周一到周日日期
            try{
@@ -228,7 +292,7 @@
                weeklyDailyPlan.setDeptId(getDeptId());               // 所属部门
                weeklyDailyPlan.setUserId(getUserId());               // 所属人员
                weeklyDailyPlan.setDirector(getUserId());               // 所属人员
                weeklyDailyPlan.setDirector(manager.getId());               // 所属人员
                weeklyDailyPlan.setCreateBy(getUserId());
                weeklyDailyPlan.setCreateTime(now);
@@ -248,12 +312,36 @@
                }
            }
            try{
                insertWeeklyFoll(users,weekly.getId());                // 自动添加跟进人
            }catch (Exception e){
                log.error("周报添加跟进人异常,异常信息1:"+e);
            }
        } catch (Exception e){
            log.error("创建周计划异常,异常信息:"+e);
            throw new CoolException("创建周计划失败==>"+e);
        }
        return R.ok("创建成功");
    }
    public void insertWeeklyFoll(List<User> userList,Long weeklyId){
        for (User user:userList){
            try{
                // 自动添加跟进人
                List<WeeklyFoll> weeklyFolls = weeklyFollService.selectList(new EntityWrapper<WeeklyFoll>().eq("weekly_id", weeklyId).eq("user_id", user.getId()));
                if (weeklyFolls.size()==0){
                    WeeklyFoll weeklyFoll = new WeeklyFoll();
                    weeklyFoll.setUserId(user.getId());
                    weeklyFoll.setWeeklyId(weeklyId);
                    weeklyFollService.insert(weeklyFoll);
                }
            }catch (Exception e){
                log.error("周报添加跟进人异常,异常信息2:"+e);
                continue;
            }
        }
    }
    @RequestMapping(value = "/weekly/from/add/auth2")
@@ -278,12 +366,37 @@
            weekly.setDeptId(getDeptId());               // 所属部门
            weekly.setUserId(getUserId());               // 所属人员
            weekly.setDirector(getUserId());               // 所属人员
            weekly.setCreateBy(getUserId());
            weekly.setCreateTime(now);
            weekly.setUpdateBy(getUserId());
            weekly.setUpdateTime(now);
            User manager = new User();
            try {
                manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 获取部门领导
            } catch (Exception e) {
                manager = getUser();
            }
            weekly.setDirector(manager.getId());
            // 获取业务员
            List<String> initNames = new ArrayList<>();
            initNames.add("创建了审批");
            initNames.add("业务员提交");
            initNames.add("部门领导审核");
            List<User> users = new ArrayList<>();
            users.add(getUser());
            users.add(getUser());
            users.add(manager);
//            users.add(getUser());
            weekly.setSettleMsg(JSON.toJSONString(SettleDto.InItFlowPathTwo(users, initNames, users.size())));
            weekly.setSettleSize(users.size());
            weekly.setSettleCurrent(1);
            if (users.size() > 1) {
                weekly.setDirector(users.get(1).getId());
            } else {
                weekly.setDirector(getUserId());
            }
            List<Date> dateList = new ArrayList<>();//获取周一与周日日期
@@ -338,7 +451,7 @@
                weeklyDailyReality.setDeptId(getDeptId());               // 所属部门
                weeklyDailyReality.setUserId(getUserId());               // 所属人员
                weeklyDailyReality.setDirector(getUserId());               // 所属人员
                weeklyDailyReality.setDirector(manager.getId());               // 所属人员
                weeklyDailyReality.setCreateBy(getUserId());
                weeklyDailyReality.setCreateTime(now);
@@ -356,6 +469,12 @@
                    log.error("新增日计划失败"+e);
                    throw new CoolException("新增日计划失败");
                }
            }
            try{
                insertWeeklyFoll(users,weekly.getId());                // 自动添加跟进人
            }catch (Exception e){
                log.error("周报添加跟进人异常,异常信息1:"+e);
            }
        } catch (Exception e){
@@ -414,12 +533,20 @@
                    if (Cools.isEmpty(weeklyDailyPlan)){
                        throw new CoolException("更新失败:id:"+weeklyDailyPlanId);
                    }
                    weeklyDailyPlan1.setComment(weeklyDailyPlan1.getComment()+";"+weeklyDailyPlan.getComment());
                    if (!Cools.isEmpty(weeklyDailyPlan1.getComment())){
//                        weeklyDailyPlan1.setComment(weeklyDailyPlan1.getComment()+";"+weeklyDailyPlan.getComment());
                        weeklyDailyPlan1.setComment(weeklyDailyPlan.getComment());
                    }else {
                        weeklyDailyPlan1.setComment(weeklyDailyPlan.getComment());
                    }
                    weeklyDailyPlan1.setWorkContent(weeklyDailyPlan.getWorkContent());
                    weeklyDailyPlan1.setWorkPurpose(weeklyDailyPlan.getWorkPurpose());
                    weeklyDailyPlan1.setMemo(weeklyDailyPlan.getMemo());
                    weeklyDailyPlan1.setUpdateBy(getUserId());
                    weeklyDailyPlan1.setUpdateTime(now);
                    if (!Cools.isEmpty(weeklyDailyPlan.getCstmrId())){
                        weeklyDailyPlan1.setCstmrId(weeklyDailyPlan1.getCstmrId());
                    }
                    weeklyDailyPlanService.updateById(weeklyDailyPlan1);
                }else {
@@ -504,12 +631,20 @@
                    if (Cools.isEmpty(weeklyDailyReality)){
                        throw new CoolException("更新失败:id:"+weeklyDailyPlanId);
                    }
                    weeklyDailyReality1.setComment(weeklyDailyReality1.getComment()+";"+weeklyDailyReality.getComment());
                    if (!Cools.isEmpty(weeklyDailyReality1.getComment())){
//                        weeklyDailyReality1.setComment(weeklyDailyReality1.getComment()+";"+weeklyDailyReality.getComment());
                        weeklyDailyReality1.setComment(weeklyDailyReality.getComment());
                    }else {
                        weeklyDailyReality1.setComment(weeklyDailyReality.getComment());
                    }
                    weeklyDailyReality1.setWorkContent(weeklyDailyReality.getWorkContent());
                    weeklyDailyReality1.setWorkPurpose(weeklyDailyReality.getWorkPurpose());
                    weeklyDailyReality1.setMemo(weeklyDailyReality.getMemo());
                    weeklyDailyReality1.setUpdateBy(getUserId());
                    weeklyDailyReality1.setUpdateTime(now);
                    if (!Cools.isEmpty(weeklyDailyReality.getCstmrId())){
                        weeklyDailyReality1.setCstmrId(weeklyDailyReality.getCstmrId());
                    }
                    weeklyDailyRealityService.updateById(weeklyDailyReality1);
                }else {
@@ -560,4 +695,109 @@
        List<WeeklyDailyReality> weeklyDailyRealities = weeklyDailyRealityService.selectList(new EntityWrapper<WeeklyDailyReality>().eq("weekly_id", weeklyId));
        return R.ok().add(weeklyDailyRealities);
    }
    @PostMapping(value = "/weekly/approval/auth")
    @ManagerAuth(memo = "审批申请单")
    public R approval(@RequestParam Long weeklyId,
                      @RequestParam(required = false) Long plannerId) {
        Weekly weekly = weeklyService.selectById(weeklyId);
        assert weekly != null;
        Long nextUserId = getUserId();
        User director = userService.selectById(weekly.getDirector());
        if (Cools.isEmpty(getUser()) || Cools.isEmpty(director)) {
            return R.error("抱歉,您无需确认!!!");
        }
        if (!getUserId().equals(director.getId())) {
            return R.error("抱歉,您无需确认!!!");
        }
        // 修改 settle 步骤数据
        List<SettleDto> list = JSON.parseArray(weekly.getSettleMsg(), SettleDto.class);
        // 修改 settle 步骤数据
        for (SettleDto dto : list) {
            if (dto.getStep().equals(weekly.getSettle())) {
                dto.setCurr(Boolean.TRUE);
            } else if (dto.getStep().equals(weekly.getSettle() + 1)) {
                dto.setCurr(Boolean.TRUE);
                if (Cools.isEmpty(dto.getMsg())) {
                    dto.setMsg(director.getNickname() + "审批通过");
                } else {
                    dto.setMsg(dto.getMsg() + PZH + DateUtils.convert(new Date()) + " " + director.getNickname() + "审批通过");
                }
                dto.setTime(DateUtils.convert(new Date()));
            } else if (dto.getStep().equals(weekly.getSettle() + 2)) {
                nextUserId = dto.getUserId();
            }
        }
        weekly.setSettleMsg(JSON.toJSONString(list));
        // 修改规划单状态
        weekly.setSettle(weekly.getSettle() + 1);  // 审批通过
        weekly.setUpdateBy(getUserId());
        weekly.setUpdateTime(new Date());
        weekly.setDirector(nextUserId);
        if (!weeklyService.updateById(weekly)) {
            throw new CoolException("审核失败,请联系管理员");
        }
        if (!weekly.getSettle().equals(weekly.getSettleSize())) {
            User phoneUser = userService.selectById(nextUserId);
            if (!smsCodeService.sendSmsCodeText(phoneUser.getMobile(), PhoneCodeTypeParam.ALIYUN_M1ABAC630E, getUserId())) {
                return R.ok("审核成功但短信发送失败!");
            }
        }
        return R.ok("审批成功");
    }
    @PostMapping(value = "/weekly/approvalEnd/auth")
    @ManagerAuth(memo = "拒绝申请单")
    public R approvalEnd(@RequestParam Long weeklyId,
                         @RequestParam(required = false) Long plannerId) {
        Weekly weekly = weeklyService.selectById(weeklyId);
        Date now = new Date();
        Long nextUserId = getUserId();
        Long directorId = weekly.getDirector();
        User director = userService.selectById(directorId);
        if (!director.getId().equals(getUserId())) {
            return R.error("抱歉,您没有审核的权限");
        }
        List<SettleDto> planDtos = JSON.parseArray(weekly.getSettleMsg(), SettleDto.class);
        List<SettleDto> planDtoList = new ArrayList<>();
        boolean sign = true;
        for (SettleDto dto : planDtos) {
            if (dto.getStep().equals(2)) {
                nextUserId = dto.getUserId();
                weekly.setDirector(dto.getUserId());
            }
            if (sign && dto.getUserId().equals(directorId) && weekly.getSettle() + 1 == dto.getStep()) {
                if (Cools.isEmpty(dto.getMsg())) {
                    dto.setMsg(DateUtils.convert(now) + " " + director.getNickname() + "回退审批");
                } else {
                    dto.setMsg(dto.getMsg() + PZH + DateUtils.convert(now) + " " + director.getNickname() + "回退审批");
                }
                sign = false;
            }
            if (sign) {
                dto.setMsg(dto.getMsg() + PZH + DateUtils.convert(now) + " " + director.getNickname() + "回退审批");
            }
            planDtoList.add(dto);
        }
        weekly.setStatus(0);
        weekly.setSettle(1);
        weekly.setSettleMsg(JSON.toJSONString(planDtoList));
        weekly.setUpdateBy(getUserId());
        weekly.setUpdateTime(now);
        weeklyService.updateById(weekly);
        if (!weekly.getSettle().equals(weekly.getSettleSize())) {
            User phoneUser = userService.selectById(nextUserId);
            if (!smsCodeService.sendSmsCodeText(phoneUser.getMobile(), PhoneCodeTypeParam.ALIYUN_M1ABAC630E, getUserId())) {
                return R.ok("审核成功但短信发送失败!");
            }
        }
        return R.ok("回退成功");
    }
}