2 コミット a398297dd8 ... 0221e86e8f

作者 SHA1 メッセージ 日付
  LIVE_YE 0221e86e8f Merge remote-tracking branch 'origin/master' 1 ヶ月 前
  LIVE_YE 880cb96e46 统计 1 ヶ月 前

+ 30 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/work/WorkOrderInfoController.java

@@ -205,6 +205,36 @@ public class WorkOrderInfoController extends BaseController
         return workOrderInfoService.statisticsJd();
     }
 
+    /**
+     * APP我的年度工单统计(流程)
+     */
+    @PreAuthorize("@ss.hasPermi('work:year:lc')")
+    @GetMapping(value = "/year/lc")
+    public AjaxResult yearLc(String time)
+    {
+        return workOrderInfoService.yearLc(time);
+    }
+
+    /**
+     * APP年度单量统计(折线图)
+     */
+    @PreAuthorize("@ss.hasPermi('work:year:month')")
+    @GetMapping(value = "/year/month")
+    public AjaxResult yearMonth(String time)
+    {
+        return workOrderInfoService.yearMonth(time);
+    }
+
+    /**
+     * APP部门统计(流程)
+     */
+    @PreAuthorize("@ss.hasPermi('work:dept:lc')")
+    @GetMapping(value = "/dept/lc")
+    public AjaxResult deptLc(String time)
+    {
+        return workOrderInfoService.deptLc(time);
+    }
+
     /**
      * 待办事项数量
      */

+ 1 - 1
ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java

@@ -95,5 +95,5 @@ public class UserConstants
     public static final String SIX = "6";
 
     /** 接单员工 */
-    public final static String WORK_USER = "workUser";
+    public final static String WORK_USER = "employee";
 }

+ 21 - 7
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java

@@ -3,13 +3,11 @@ package com.ruoyi.common.utils;
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 import java.util.concurrent.ThreadLocalRandom;
 
 import org.apache.commons.lang3.time.DateFormatUtils;
@@ -253,7 +251,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         LocalDate startDate = LocalDate.of(currentDate.getYear(), startMonth, 1);
         LocalDate endDate = LocalDate.of(currentDate.getYear(), endMonth,
                 endMonth == 6 || endMonth == 9 ? 30 : 31);
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYY_MM_DD);
         return startDate.format(formatter);
     }
 
@@ -287,7 +285,23 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         LocalDate startDate = LocalDate.of(currentDate.getYear(), startMonth, 1);
         LocalDate endDate = LocalDate.of(currentDate.getYear(), endMonth,
                 endMonth == 6 || endMonth == 9 ? 30 : 31);
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYY_MM_DD);
         return endDate.format(formatter);
     }
+
+    /**
+     * 获取传入年的所有月份(yyyy-mm)
+     */
+    public static final List<String> yearMonth(String year)
+    {
+        List<String> months = new ArrayList<>();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYY_MM);
+
+        for (int month = 1; month <= 12; month++) {
+            YearMonth yearMonth = YearMonth.of(Integer.parseInt(year), month);
+            months.add(yearMonth.format(formatter));
+        }
+
+        return months;
+    }
 }

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/WorkOrderInfoMapper.java

@@ -69,4 +69,6 @@ public interface WorkOrderInfoMapper
     List<WorkOrderInfo> selectWorkOrderInfoListByYearOne(String year);
 
     List<WorkOrderInfo> selectWorkOrderInfoListByYear(@Param("year")String year, @Param("userId")Long userId);
+
+    List<WorkOrderInfo> selectWorkOrderInfoListByUserList(@Param("year")String year,@Param("userIds")List<Long> userIds);
 }

+ 6 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IWorkOrderInfoService.java

@@ -83,4 +83,10 @@ public interface IWorkOrderInfoService
     AjaxResult yearPx(String time);
 
     AjaxResult yearFwlx(String time);
+
+    AjaxResult yearLc(String time);
+
+    AjaxResult yearMonth(String time);
+
+    AjaxResult deptLc(String time);
 }

+ 351 - 173
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WorkOrderInfoServiceImpl.java

@@ -15,6 +15,7 @@ import com.deepoove.poi.data.Pictures;
 import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
 import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginBody;
 import com.ruoyi.common.core.domain.model.LoginUser;
@@ -39,18 +40,16 @@ import com.ruoyi.system.service.IWorkOrderInfoService;
 import org.springframework.web.multipart.MultipartFile;
 
 import static com.ruoyi.common.constant.UserConstants.*;
-import static com.ruoyi.common.utils.DateUtils.YYYY;
-import static com.ruoyi.common.utils.DateUtils.YYYY_MM;
+import static com.ruoyi.common.utils.DateUtils.*;
 
 /**
  * 工单信息Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2025-05-12
  */
 @Service
-public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService 
-{
+public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
     @Autowired
     private WorkOrderInfoMapper workOrderInfoMapper;
 
@@ -70,25 +69,24 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
 
     /**
      * 查询工单信息
-     * 
+     *
      * @param orderId 工单信息主键
      * @return 工单信息
      */
     @Override
-    public WorkOrderInfo selectWorkOrderInfoByOrderId(String orderId)
-    {
+    public WorkOrderInfo selectWorkOrderInfoByOrderId(String orderId) {
         WorkOrderInfo workOrderInfo = workOrderInfoMapper.selectWorkOrderInfoByOrderId(orderId);
-        if(workOrderInfo!=null){
+        if (workOrderInfo != null) {
             //查询附件
             WorkOrderFj workOrderFj = new WorkOrderFj();
             workOrderFj.setOrderId(orderId);
             //workOrderFj.setType(USER_DISABLE);
             List<WorkOrderFj> workOrderFjs = workOrderFjMapper.selectWorkOrderFjList(workOrderFj);
-            if(workOrderFjs!=null && !workOrderFjs.isEmpty()){
-                Map<String,List<WorkOrderFj>> map = workOrderFjs.stream().collect(Collectors.groupingBy(WorkOrderFj::getType));
+            if (workOrderFjs != null && !workOrderFjs.isEmpty()) {
+                Map<String, List<WorkOrderFj>> map = workOrderFjs.stream().collect(Collectors.groupingBy(WorkOrderFj::getType));
                 workOrderInfo.setWorkOrderFjXqList(map.get(ONE));
                 workOrderInfo.setWorkOrderFjQmList(map.get(TWO));
-                if(map.get(THR)!=null && !map.get(THR).isEmpty()){
+                if (map.get(THR) != null && !map.get(THR).isEmpty()) {
                     workOrderInfo.setWorkOrderFjgd(map.get(THR).get(0));
                 }
             }
@@ -96,7 +94,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
             ChargeDetails chargeDetails = new ChargeDetails();
             chargeDetails.setOrderId(orderId);
             List<ChargeDetails> chargeDetails1 = chargeDetailsMapper.selectChargeDetailsList(chargeDetails);
-            if(chargeDetails1!=null && !chargeDetails1.isEmpty()){
+            if (chargeDetails1 != null && !chargeDetails1.isEmpty()) {
                 workOrderInfo.setChargeDetailsList(chargeDetails1);
             }
 
@@ -106,25 +104,23 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
 
     /**
      * 查询工单信息列表
-     * 
+     *
      * @param workOrderInfo 工单信息
      * @return 工单信息
      */
     @Override
-    public List<WorkOrderInfo> selectWorkOrderInfoList(WorkOrderInfo workOrderInfo)
-    {
+    public List<WorkOrderInfo> selectWorkOrderInfoList(WorkOrderInfo workOrderInfo) {
         return workOrderInfoMapper.selectWorkOrderInfoList(workOrderInfo);
     }
 
     /**
      * 新增工单信息
-     * 
+     *
      * @param workOrderInfo 工单信息
      * @return 结果
      */
     @Override
-    public int insertWorkOrderInfo(WorkOrderInfo workOrderInfo)
-    {
+    public int insertWorkOrderInfo(WorkOrderInfo workOrderInfo) {
         SysUser user = SecurityUtils.getLoginUser().getUser();
         workOrderInfo.setUserId(user.getUserId());
         workOrderInfo.setUserName(user.getUserName());
@@ -132,7 +128,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         workOrderInfo.setOrderId(DateUtils.getOrderId());
         workOrderInfo.setCreateTime(DateUtils.getNowDate());
         int i = workOrderInfoMapper.insertWorkOrderInfo(workOrderInfo);
-        if(workOrderInfo.getWorkOrderFjXqList()!=null && !workOrderInfo.getWorkOrderFjXqList().isEmpty()){
+        if (workOrderInfo.getWorkOrderFjXqList() != null && !workOrderInfo.getWorkOrderFjXqList().isEmpty()) {
             for (WorkOrderFj workOrderFj : workOrderInfo.getWorkOrderFjXqList()) {
                 workOrderFj.setOrderId(workOrderInfo.getOrderId());
                 workOrderFjMapper.insertWorkOrderFj(workOrderFj);
@@ -151,16 +147,18 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
 
     /**
      * 修改工单信息
-     * 
+     *
      * @param workOrderInfo 工单信息
      * @return 结果
      */
     @Override
-    public int updateWorkOrderInfo(WorkOrderInfo workOrderInfo)
-    {
+    public int updateWorkOrderInfo(WorkOrderInfo workOrderInfo) {
 
-        if(!THR.equals(workOrderInfo.getServiceProgress())){
-            if(workOrderInfo.getChargeDetailsList()!=null && !workOrderInfo.getChargeDetailsList().isEmpty()){
+        if(NO.equals(workOrderInfo.getIsCharge())){
+            chargeDetailsMapper.deleteChargeDetailsByOrderId(workOrderInfo.getOrderId());
+        }
+        if (!THR.equals(workOrderInfo.getServiceProgress())) {
+            if (workOrderInfo.getChargeDetailsList() != null && !workOrderInfo.getChargeDetailsList().isEmpty()) {
                 //删除收费信息重新保存
                 chargeDetailsMapper.deleteChargeDetailsByOrderId(workOrderInfo.getOrderId());
                 //删除之后重新保存
@@ -169,25 +167,37 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
                     chargeDetailsMapper.insertChargeDetails(chargeDetails);
                 }
             }
-            chargeDetailsMapper.deleteChargeDetailsByOrderId(workOrderInfo.getOrderId());
-            if(workOrderInfo.getWorkOrderFjXqList()!=null && !workOrderInfo.getWorkOrderFjXqList().isEmpty()){
+
+            if (workOrderInfo.getWorkOrderFjXqList() != null && !workOrderInfo.getWorkOrderFjXqList().isEmpty()) {
+                WorkOrderFj orderFj = new WorkOrderFj();
+                orderFj.setOrderId(workOrderInfo.getOrderId());
+                orderFj.setType(ONE);
+                workOrderFjMapper.deleteWorkOrderFj(orderFj);
                 for (WorkOrderFj workOrderFj : workOrderInfo.getWorkOrderFjXqList()) {
                     workOrderFj.setOrderId(workOrderInfo.getOrderId());
                     workOrderFjMapper.insertWorkOrderFj(workOrderFj);
                 }
             }
-            if(workOrderInfo.getWorkOrderFjQmList()!=null && !workOrderInfo.getWorkOrderFjQmList().isEmpty()){
+            if (workOrderInfo.getWorkOrderFjQmList() != null && !workOrderInfo.getWorkOrderFjQmList().isEmpty()) {
+                WorkOrderFj orderFj = new WorkOrderFj();
+                orderFj.setOrderId(workOrderInfo.getOrderId());
+                orderFj.setType(TWO);
+                workOrderFjMapper.deleteWorkOrderFj(orderFj);
                 for (WorkOrderFj workOrderFj : workOrderInfo.getWorkOrderFjQmList()) {
                     workOrderFj.setOrderId(workOrderInfo.getOrderId());
                     workOrderFjMapper.insertWorkOrderFj(workOrderFj);
                 }
             }
-            if(workOrderInfo.getWorkOrderFjgd()!=null){
+            if (workOrderInfo.getWorkOrderFjgd() != null) {
+                WorkOrderFj orderFj = new WorkOrderFj();
+                orderFj.setOrderId(workOrderInfo.getOrderId());
+                orderFj.setType(THR);
+                workOrderFjMapper.deleteWorkOrderFj(orderFj);
                 workOrderInfo.getWorkOrderFjgd().setOrderId(workOrderInfo.getOrderId());
                 workOrderFjMapper.insertWorkOrderFj(workOrderInfo.getWorkOrderFjgd());
             }
         }
-        if(TWO.equals(workOrderInfo.getServiceProgress())){
+        if (TWO.equals(workOrderInfo.getServiceProgress())) {
             workOrderInfo.setAgency(TWO);
 
             //操作记录
@@ -199,13 +209,14 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
             operationRecord.setRecord(recod.toString());
             operationRecordService.insertOperationRecord(operationRecord);
         }
-        if(THR.equals(workOrderInfo.getServiceProgress())){
+        if (THR.equals(workOrderInfo.getServiceProgress())) {
+            WorkOrderInfo orderInfo = workOrderInfoMapper.selectWorkOrderInfoByOrderId(workOrderInfo.getOrderId());
             //操作记录
             OperationRecord operationRecord = new OperationRecord();
             operationRecord.setOrderId(workOrderInfo.getOrderId());
-            String type = dictDataMapper.selectDictLabel("service_progress", workOrderInfo.getType());
+            String type = dictDataMapper.selectDictLabel("service_progress", orderInfo.getType());
             StringBuilder recod = new StringBuilder();
-            recod.append(workOrderInfo.getUnitName()).append("的").append(type).append("已结束;客户评价:").append(workOrderInfo.getEvaluationContent());
+            recod.append(orderInfo.getUnitName()).append("的").append(type).append("已结束;客户评价:").append(workOrderInfo.getEvaluationContent());
             operationRecord.setRecord(recod.toString());
             operationRecordService.insertOperationRecord(operationRecord);
         }
@@ -215,25 +226,23 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
 
     /**
      * 批量删除工单信息
-     * 
+     *
      * @param orderIds 需要删除的工单信息主键
      * @return 结果
      */
     @Override
-    public int deleteWorkOrderInfoByOrderIds(String[] orderIds)
-    {
+    public int deleteWorkOrderInfoByOrderIds(String[] orderIds) {
         return workOrderInfoMapper.deleteWorkOrderInfoByOrderIds(orderIds);
     }
 
     /**
      * 删除工单信息信息
-     * 
+     *
      * @param orderId 工单信息主键
      * @return 结果
      */
     @Override
-    public int deleteWorkOrderInfoByOrderId(String orderId)
-    {
+    public int deleteWorkOrderInfoByOrderId(String orderId) {
         return workOrderInfoMapper.deleteWorkOrderInfoByOrderId(orderId);
     }
 
@@ -253,7 +262,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         workOrderInfo.setAgency(ONE);
 
         //自主接单
-        if(TWO.equals(workOrderInfo.getOrderPlacement())){
+        if (TWO.equals(workOrderInfo.getOrderPlacement())) {
             SysUser user = SecurityUtils.getLoginUser().getUser();
             workOrderInfo.setResponsibleId(user.getUserId());
             workOrderInfo.setResponsibleName(user.getNickName());
@@ -276,39 +285,39 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         ChargeDetails chargeDetails = new ChargeDetails();
         chargeDetails.setOrderId(orderId);
         List<ChargeDetails> chargeDetails1 = chargeDetailsMapper.selectChargeDetailsList(chargeDetails);
-        if(chargeDetails1!=null && !chargeDetails1.isEmpty()){
+        if (chargeDetails1 != null && !chargeDetails1.isEmpty()) {
             workOrderInfo.setChargeDetailsList(chargeDetails1);
         }
 
 
         HashMap<String, Object> finalMap = new HashMap<>();
-        finalMap.put("khmc",workOrderInfo.getUnitName());
-        finalMap.put("xmmc",workOrderInfo.getProjectName());
-        if(ONE.equals(workOrderInfo.getShelfLife())){
-            finalMap.put("bzqn",true);
-            finalMap.put("bzqw",false);
-        }else{
-            finalMap.put("bzqn",false);
-            finalMap.put("bzqw",true);
+        finalMap.put("khmc", workOrderInfo.getUnitName());
+        finalMap.put("xmmc", workOrderInfo.getProjectName());
+        if (ONE.equals(workOrderInfo.getShelfLife())) {
+            finalMap.put("bzqn", true);
+            finalMap.put("bzqw", false);
+        } else {
+            finalMap.put("bzqn", false);
+            finalMap.put("bzqw", true);
         }
 
-        if(YES.equals(workOrderInfo.getIsCharge())){
-            finalMap.put("sfs",true);
-            finalMap.put("sff",false);
-        }else{
-            finalMap.put("sfs",false);
-            finalMap.put("sff",true);
-        }
-        finalMap.put("rmbdx",workOrderInfo.getTotalCostDx());
-        finalMap.put("rmb",workOrderInfo.getTotalCost());
-        finalMap.put("bz",workOrderInfo.getRemark());
-        finalMap.put("lxfs",workOrderInfo.getPhonenumber());
-        finalMap.put("rq",DateUtils.getDate());
+        if (YES.equals(workOrderInfo.getIsCharge())) {
+            finalMap.put("sfs", true);
+            finalMap.put("sff", false);
+        } else {
+            finalMap.put("sfs", false);
+            finalMap.put("sff", true);
+        }
+        finalMap.put("rmbdx", workOrderInfo.getTotalCostDx());
+        finalMap.put("rmb", workOrderInfo.getTotalCost());
+        finalMap.put("bz", workOrderInfo.getRemark());
+        finalMap.put("lxfs", workOrderInfo.getPhonenumber());
+        finalMap.put("rq", DateUtils.getDate());
         finalMap.put("bz", workOrderInfo.getRemark());
         finalMap.put("qm", "{{@qm}}");
 
         List<Object> workList = new ArrayList<>();
-        if(chargeDetails1!=null && !chargeDetails1.isEmpty()){
+        if (chargeDetails1 != null && !chargeDetails1.isEmpty()) {
             for (int i = 0; i < chargeDetails1.size(); i++) {
                 HashMap<String, Object> workItem = new HashMap<>();
                 workItem.put("xh", i + 1);
@@ -346,9 +355,10 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         Configure build = Configure.builder().bind(policy, "workList").build();
         XWPFTemplate render = XWPFTemplate.compile(wordTemplate, build).render(finalMap);
         // 此处是利用File,直接在本地创建文件,将参数替换后的文件流写入到该文件,word就是最终的结果
-        String fileName =workOrderInfo.getUnitName()+"-"+workOrderInfo.getProjectName() + "项目工单.docx";
-        String templatePath ="/profile/upload/" + fileName;
-        String path = RuoYiConfig.getUploadPath() +"/"+ fileName;;
+        String fileName = workOrderInfo.getUnitName() + "-" + workOrderInfo.getProjectName() + "项目工单.docx";
+        String templatePath = "/profile/upload/" + fileName;
+        String path = RuoYiConfig.getUploadPath() + "/" + fileName;
+        ;
         File word = new File(path);
         try {
             render.writeToFile(word.getAbsolutePath());
@@ -364,7 +374,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         //删除之前生成的文件
         workOrderFjMapper.deleteWorkOrderFj(workOrderFj);
         workOrderFjMapper.insertWorkOrderFj(workOrderFj);
-        return AjaxResult.success("成功",templatePath);
+        return AjaxResult.success("成功", templatePath);
     }
 
     @SneakyThrows
@@ -382,9 +392,9 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         base64String = base64String.trim();
 
         int s = wordVo.getImage().indexOf(",");
-        String head = wordVo.getImage().substring(0,s + 1);
+        String head = wordVo.getImage().substring(0, s + 1);
 
-        MultipartFile file = Base64DecodedMultipartFile.base64Convert(base64String,head,workOrderInfo.getOrderId()+"签字");
+        MultipartFile file = Base64DecodedMultipartFile.base64Convert(base64String, head, workOrderInfo.getOrderId() + "签字");
         // 上传文件路径
         String filePath = RuoYiConfig.getUploadPath();
         // 上传并返回新文件名称
@@ -406,7 +416,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
 
         HashMap<String, Object> finalMap = new HashMap<>();
         //这里也可以是用文件服务器返回的网络文件流
-        String pictureUrl =  fileName.replace("/profile",RuoYiConfig.getProfile());
+        String pictureUrl = fileName.replace("/profile", RuoYiConfig.getProfile());
         // 从网络流读取图片,置入word模板,等待编译
         if (StringUtils.isNotEmpty(pictureUrl)) {
             //PictureRenderData picture = Pictures.ofUrl(pictureUrl).size(100, 60).create();//网络图片地址
@@ -415,15 +425,16 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         }
         // 从网络url 下载word模板到指定文件夹
         //http://192.168.101.86:8077 "D:\\ruoyi\\uploadPath\\gongdan\\muban\\工单模板.docx"
-        File wordTemplate = new File(RuoYiConfig.getUploadPath()+"/"+workOrderFjs.get(0).getName());
+        File wordTemplate = new File(RuoYiConfig.getUploadPath() + "/" + workOrderFjs.get(0).getName());
         // 此处使用了poi-tl的<表格行循环插件>,此处一定要进行参数bind,方便word模板参数替换
         LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
         Configure build = Configure.builder().bind(policy, "workList").build();
         XWPFTemplate render = XWPFTemplate.compile(wordTemplate, build).render(finalMap);
         // 此处是利用File,直接在本地创建文件,将参数替换后的文件流写入到该文件,word就是最终的结果
-        String name =workOrderInfo.getUnitName()+"-"+workOrderInfo.getProjectName() + "项目工单.docx";
-        String templatePath ="/profile/upload/" + name;
-        String path = RuoYiConfig.getUploadPath() +"/"+ name;;
+        String name = workOrderInfo.getUnitName() + "-" + workOrderInfo.getProjectName() + "项目工单.docx";
+        String templatePath = "/profile/upload/" + name;
+        String path = RuoYiConfig.getUploadPath() + "/" + name;
+        ;
         File word = new File(path);
         try {
             render.writeToFile(word.getAbsolutePath());
@@ -431,14 +442,25 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
             throw new RuntimeException(e);
         }
         workOrderInfo.setServiceProgress(TWO);
+        workOrderInfo.setAgency(TWO);
         workOrderInfoMapper.updateWorkOrderInfo(workOrderInfo);
+
+        //操作记录
+        OperationRecord operationRecord = new OperationRecord();
+        operationRecord.setOrderId(workOrderInfo.getOrderId());
+        String type = dictDataMapper.selectDictLabel("service_progress", workOrderInfo.getType());
+        StringBuilder recod = new StringBuilder();
+        recod.append(workOrderInfo.getUnitName()).append("的").append(type).append("已结束;客户暂无评价");
+        operationRecord.setRecord(recod.toString());
+        operationRecordService.insertOperationRecord(operationRecord);
+
         return AjaxResult.success("成功");
     }
 
     @Override
     public AjaxResult lc() {
 
-        Map<String,Object> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         int zs = 0;
         int djd = 0;
         int jxz = 0;
@@ -448,53 +470,52 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         int szs = 0;
         String zz = "0%";
         //获取当前月
-        String month = DateUtils.dateTimeNow(YYYY_MM);
+        String month = DateUtils.dateTimeNow(YYYY_MM_DD);
         //获取上个月
         String lastMonth = DateUtils.lastMonth();
         //本月单量
         List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonth(month);
         //上个月单量
         List<WorkOrderInfo> lastWorkOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonth(lastMonth);
-        if(lastWorkOrderInfoList!=null && !lastWorkOrderInfoList.isEmpty()){
+        if (lastWorkOrderInfoList != null && !lastWorkOrderInfoList.isEmpty()) {
             szs = lastWorkOrderInfoList.size();
         }
-        if(workOrderInfoList!=null && !workOrderInfoList.isEmpty()){
+        if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
             zs = workOrderInfoList.size();
-            Map<String,List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getServiceProgress));
-            if(workOrderInfomap.get(NORMAL)!=null && !workOrderInfomap.get(NORMAL).isEmpty()){
+            Map<String, List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getServiceProgress));
+            if (workOrderInfomap.get(NORMAL) != null && !workOrderInfomap.get(NORMAL).isEmpty()) {
                 djd = workOrderInfomap.get(NORMAL).size();
             }
-            if(workOrderInfomap.get(ONE)!=null && !workOrderInfomap.get(ONE).isEmpty()){
+            if (workOrderInfomap.get(ONE) != null && !workOrderInfomap.get(ONE).isEmpty()) {
                 jxz = workOrderInfomap.get(ONE).size();
             }
-            if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
+            if (workOrderInfomap.get(TWO) != null && !workOrderInfomap.get(TWO).isEmpty()) {
                 ywc = workOrderInfomap.get(TWO).size();
             }
-            if(workOrderInfomap.get(THR)!=null && !workOrderInfomap.get(THR).isEmpty()){
+            if (workOrderInfomap.get(THR) != null && !workOrderInfomap.get(THR).isEmpty()) {
                 ypj = workOrderInfomap.get(THR).size();
             }
-            dpj = ywc-ypj;
             BigDecimal bzs = new BigDecimal(zs);
             BigDecimal bszs = new BigDecimal(szs);
             BigDecimal fz = bzs.subtract(bszs);
-            BigDecimal percentage = bzs.multiply(new BigDecimal("100"))
-                    .divide(fz, 3, RoundingMode.HALF_UP) // 先计算百分比并保留三位小数以处理可能的精度问题
+            BigDecimal percentage = fz.multiply(new BigDecimal("100"))
+                    .divide(bzs, 3, RoundingMode.HALF_UP) // 先计算百分比并保留三位小数以处理可能的精度问题
                     .setScale(1, RoundingMode.HALF_UP);     // 再设置为一位小数
-            zz = percentage.toString()+"%";
+            zz = percentage.toString() + "%";
 
         }
         map.put("zs", zs);
         map.put("djd", djd);
         map.put("jxz", jxz);
         map.put("ywc", ywc);
-        map.put("dpj", dpj);
+        map.put("dpj", ypj);
         map.put("zz", zz);
         return AjaxResult.success(map);
     }
 
     @Override
     public AjaxResult fw() {
-        Map<String,Object> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         int zs = 0;
         int wlfw = 0;
         int sbfw = 0;
@@ -503,29 +524,29 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         int sjfw = 0;
         int qtfw = 0;
         //获取当前月
-        String month = DateUtils.dateTimeNow(YYYY_MM);
+        String month = DateUtils.dateTimeNow(YYYY_MM_DD);
         //本月单量
         List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonth(month);
-        if(workOrderInfoList!=null && !workOrderInfoList.isEmpty()){
+        if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
             zs = workOrderInfoList.size();
-            Map<String,List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getType));
+            Map<String, List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getType));
 
-            if(workOrderInfomap.get(ONE)!=null && !workOrderInfomap.get(ONE).isEmpty()){
+            if (workOrderInfomap.get(ONE) != null && !workOrderInfomap.get(ONE).isEmpty()) {
                 wlfw = workOrderInfomap.get(ONE).size();
             }
-            if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
+            if (workOrderInfomap.get(TWO) != null && !workOrderInfomap.get(TWO).isEmpty()) {
                 sbfw = workOrderInfomap.get(TWO).size();
             }
-            if(workOrderInfomap.get(THR)!=null && !workOrderInfomap.get(THR).isEmpty()){
+            if (workOrderInfomap.get(THR) != null && !workOrderInfomap.get(THR).isEmpty()) {
                 rjfw = workOrderInfomap.get(THR).size();
             }
-            if(workOrderInfomap.get(FOR)!=null && !workOrderInfomap.get(FOR).isEmpty()){
+            if (workOrderInfomap.get(FOR) != null && !workOrderInfomap.get(FOR).isEmpty()) {
                 kffw = workOrderInfomap.get(FOR).size();
             }
-            if(workOrderInfomap.get(FIV)!=null && !workOrderInfomap.get(FIV).isEmpty()){
+            if (workOrderInfomap.get(FIV) != null && !workOrderInfomap.get(FIV).isEmpty()) {
                 sjfw = workOrderInfomap.get(FIV).size();
             }
-            if(workOrderInfomap.get(SIX)!=null && !workOrderInfomap.get(SIX).isEmpty()){
+            if (workOrderInfomap.get(SIX) != null && !workOrderInfomap.get(SIX).isEmpty()) {
                 qtfw = workOrderInfomap.get(SIX).size();
             }
         }
@@ -541,11 +562,11 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
 
     @Override
     public AjaxResult bj() {
-        Map<String,Object> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         //获取当前月
-        String month = DateUtils.dateTimeNow(YYYY_MM);
+        String month = DateUtils.dateTimeNow(YYYY_MM_DD);
         //获取上个月
-        String lastMonth = DateUtils.lastMonth();
+        String lastMonth = DateUtils.lastMonth()+"-01";
         //本月单量
         List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonth(month);
         //上个月单量
@@ -573,47 +594,47 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         int skffw = 0;
         int ssjfw = 0;
         int sqtfw = 0;
-        if(workOrderInfoList!=null && !workOrderInfoList.isEmpty()){
-            Map<String,List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getType));
+        if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
+            Map<String, List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getType));
 
-            if(workOrderInfomap.get(ONE)!=null && !workOrderInfomap.get(ONE).isEmpty()){
+            if (workOrderInfomap.get(ONE) != null && !workOrderInfomap.get(ONE).isEmpty()) {
                 wlfw = workOrderInfomap.get(ONE).size();
             }
-            if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
+            if (workOrderInfomap.get(TWO) != null && !workOrderInfomap.get(TWO).isEmpty()) {
                 sbfw = workOrderInfomap.get(TWO).size();
             }
-            if(workOrderInfomap.get(THR)!=null && !workOrderInfomap.get(THR).isEmpty()){
+            if (workOrderInfomap.get(THR) != null && !workOrderInfomap.get(THR).isEmpty()) {
                 rjfw = workOrderInfomap.get(THR).size();
             }
-            if(workOrderInfomap.get(FOR)!=null && !workOrderInfomap.get(FOR).isEmpty()){
+            if (workOrderInfomap.get(FOR) != null && !workOrderInfomap.get(FOR).isEmpty()) {
                 kffw = workOrderInfomap.get(FOR).size();
             }
-            if(workOrderInfomap.get(FIV)!=null && !workOrderInfomap.get(FIV).isEmpty()){
+            if (workOrderInfomap.get(FIV) != null && !workOrderInfomap.get(FIV).isEmpty()) {
                 sjfw = workOrderInfomap.get(FIV).size();
             }
-            if(workOrderInfomap.get(SIX)!=null && !workOrderInfomap.get(SIX).isEmpty()){
+            if (workOrderInfomap.get(SIX) != null && !workOrderInfomap.get(SIX).isEmpty()) {
                 qtfw = workOrderInfomap.get(SIX).size();
             }
         }
-        if(lastWorkOrderInfoList!=null && !lastWorkOrderInfoList.isEmpty()){
-            Map<String,List<WorkOrderInfo>> workOrderInfomap = lastWorkOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getType));
+        if (lastWorkOrderInfoList != null && !lastWorkOrderInfoList.isEmpty()) {
+            Map<String, List<WorkOrderInfo>> workOrderInfomap = lastWorkOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getType));
 
-            if(workOrderInfomap.get(ONE)!=null && !workOrderInfomap.get(ONE).isEmpty()){
+            if (workOrderInfomap.get(ONE) != null && !workOrderInfomap.get(ONE).isEmpty()) {
                 swlfw = workOrderInfomap.get(ONE).size();
             }
-            if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
+            if (workOrderInfomap.get(TWO) != null && !workOrderInfomap.get(TWO).isEmpty()) {
                 ssbfw = workOrderInfomap.get(TWO).size();
             }
-            if(workOrderInfomap.get(THR)!=null && !workOrderInfomap.get(THR).isEmpty()){
+            if (workOrderInfomap.get(THR) != null && !workOrderInfomap.get(THR).isEmpty()) {
                 srjfw = workOrderInfomap.get(THR).size();
             }
-            if(workOrderInfomap.get(FOR)!=null && !workOrderInfomap.get(FOR).isEmpty()){
+            if (workOrderInfomap.get(FOR) != null && !workOrderInfomap.get(FOR).isEmpty()) {
                 skffw = workOrderInfomap.get(FOR).size();
             }
-            if(workOrderInfomap.get(FIV)!=null && !workOrderInfomap.get(FIV).isEmpty()){
+            if (workOrderInfomap.get(FIV) != null && !workOrderInfomap.get(FIV).isEmpty()) {
                 ssjfw = workOrderInfomap.get(FIV).size();
             }
-            if(workOrderInfomap.get(SIX)!=null && !workOrderInfomap.get(SIX).isEmpty()){
+            if (workOrderInfomap.get(SIX) != null && !workOrderInfomap.get(SIX).isEmpty()) {
                 sqtfw = workOrderInfomap.get(SIX).size();
             }
         }
@@ -630,51 +651,51 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         x2.add(skffw);
         x2.add(ssjfw);
         x2.add(sqtfw);
-        map.put("y",y);
-        map.put("x1",x1);
-        map.put("x2",x2);
+        map.put("y", y);
+        map.put("x1", x1);
+        map.put("x2", x2);
         return AjaxResult.success(map);
     }
 
     @Override
     public AjaxResult statisticsJd() {
-        Map<String,Object> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         int zs = 0;
         int zzjd = 0;
         int zdfp = 0;
         String zzbfb = "0%";
         String zpbfb = "0%";
         //获取季度的开始时间和结束时间
-        String startDate = DateUtils.startQuarterly()+" 00:00:00";
-        String endDate = DateUtils.endQuarterly()+" 23:59:59";
+        String startDate = DateUtils.startQuarterly() + " 00:00:00";
+        String endDate = DateUtils.endQuarterly() + " 23:59:59";
         SysUser user = SecurityUtils.getLoginUser().getUser();
-        List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListByTime(startDate,endDate,user.getUserId());
-        if(workOrderInfoList!=null && !workOrderInfoList.isEmpty()){
+        List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListByTime(startDate, endDate, user.getUserId());
+        if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
             zs = workOrderInfoList.size();
             BigDecimal bzs = new BigDecimal(zs);
-            Map<String,List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getOrderPlacement));
-            if(workOrderInfomap.get(ONE)!=null && !workOrderInfomap.get(ONE).isEmpty()){
-                zzjd = workOrderInfomap.get(ONE).size();
+            Map<String, List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getOrderPlacement));
+            if (workOrderInfomap.get(TWO) != null && !workOrderInfomap.get(TWO).isEmpty()) {
+                zzjd = workOrderInfomap.get(TWO).size();
                 BigDecimal bzhjd = new BigDecimal(zzjd);
-                BigDecimal percentage = bzs.multiply(new BigDecimal("100"))
-                        .divide(bzhjd, 3, RoundingMode.HALF_UP) // 先计算百分比并保留三位小数以处理可能的精度问题
+                BigDecimal percentage = bzhjd.multiply(new BigDecimal("100"))
+                        .divide(bzs, 3, RoundingMode.HALF_UP) // 先计算百分比并保留三位小数以处理可能的精度问题
                         .setScale(1, RoundingMode.HALF_UP);     // 再设置为一位小数
-                zzbfb = percentage.toString()+"%";
+                zzbfb = percentage.toString() + "%";
             }
-            if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
-                zdfp = workOrderInfomap.get(TWO).size();
+            if (workOrderInfomap.get(ONE) != null && !workOrderInfomap.get(ONE).isEmpty()) {
+                zdfp = workOrderInfomap.get(ONE).size();
                 BigDecimal bzdfp = new BigDecimal(zdfp);
-                BigDecimal percentage = bzs.multiply(new BigDecimal("100"))
-                        .divide(bzdfp, 3, RoundingMode.HALF_UP) // 先计算百分比并保留三位小数以处理可能的精度问题
+                BigDecimal percentage = bzdfp.multiply(new BigDecimal("100"))
+                        .divide(bzs, 3, RoundingMode.HALF_UP) // 先计算百分比并保留三位小数以处理可能的精度问题
                         .setScale(1, RoundingMode.HALF_UP);     // 再设置为一位小数
-                zpbfb = percentage.toString()+"%";
+                zpbfb = percentage.toString() + "%";
             }
         }
-        map.put("zs",zs);
-        map.put("zzjd",zzjd);
-        map.put("zdfp",zdfp);
-        map.put("zpbfb",zpbfb);
-        map.put("zzbfb",zzbfb);
+        map.put("zs", zs);
+        map.put("zzjd", zzjd);
+        map.put("zdfp", zdfp);
+        map.put("zpbfb", zpbfb);
+        map.put("zzbfb", zzbfb);
         return AjaxResult.success(map);
     }
 
@@ -687,7 +708,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         workOrderInfo.setAgency(ONE);
         workOrderInfo.setResponsibleId(user.getUserId());
         List<WorkOrderInfo> workOrderInfos = workOrderInfoMapper.selectWorkOrderInfoList(workOrderInfo);
-        if(workOrderInfos!=null && !workOrderInfos.isEmpty()){
+        if (workOrderInfos != null && !workOrderInfos.isEmpty()) {
             num = workOrderInfos.size();
         }
         return AjaxResult.success(num);
@@ -695,16 +716,18 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
 
     @Override
     public AjaxResult monthPx(String time) {
-        if(StringUtils.isEmpty(time)){
-            time = DateUtils.dateTimeNow(YYYY_MM);
+        if (StringUtils.isEmpty(time)) {
+            time = DateUtils.dateTimeNow(YYYY_MM_DD);
+        }else{
+            time = time +"-01";
         }
         //本月单量
         List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonthOne(time);
         Map<Long, Integer> map = new HashMap<>();
-        if(workOrderInfoList!=null && !workOrderInfoList.isEmpty()){
-            Map<Long,List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getResponsibleId));
+        if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
+            Map<Long, List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getResponsibleId));
             for (Long s : workOrderInfomap.keySet()) {
-                map.put(s,workOrderInfomap.get(s).size());
+                map.put(s, workOrderInfomap.get(s).size());
             }
         }
         // 使用Stream API和Collectors.toList()将entries转换为List
@@ -717,15 +740,15 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         //取前6个
         List<Map<String, Object>> listMap = new ArrayList<>();
         for (int i = 0; i < 6; i++) {
-            if(entries.size()<i+1){
+            if (entries.size() < i + 1) {
                 break;
             }
             Map<String, Object> mapPx = new HashMap<>();
             SysUser sysUser = userMapper.selectUserById(entries.get(i).getKey());
-            mapPx.put("xh",i+1);
-            mapPx.put("name",sysUser.getNickName());
-            mapPx.put("deptName",sysUser.getDept().getDeptName());
-            mapPx.put("num",entries.get(i).getValue());
+            mapPx.put("xh", i + 1);
+            mapPx.put("name", sysUser.getNickName());
+            mapPx.put("deptName", sysUser.getDept().getDeptName());
+            mapPx.put("num", entries.get(i).getValue());
             listMap.add(mapPx);
         }
 
@@ -734,16 +757,18 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
 
     @Override
     public AjaxResult yearPx(String time) {
-        if(StringUtils.isEmpty(time)){
-            time = DateUtils.dateTimeNow(YYYY);
+        if (StringUtils.isEmpty(time)) {
+            time = DateUtils.dateTimeNow(YYYY_MM_DD);
+        }else{
+            time = time +"-01-01";
         }
         //本年单量
         List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListByYearOne(time);
         Map<Long, Integer> map = new HashMap<>();
-        if(workOrderInfoList!=null && !workOrderInfoList.isEmpty()){
-            Map<Long,List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getResponsibleId));
+        if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
+            Map<Long, List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getResponsibleId));
             for (Long s : workOrderInfomap.keySet()) {
-                map.put(s,workOrderInfomap.get(s).size());
+                map.put(s, workOrderInfomap.get(s).size());
             }
         }
         // 使用Stream API和Collectors.toList()将entries转换为List
@@ -756,15 +781,15 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         //取前6个
         List<Map<String, Object>> listMap = new ArrayList<>();
         for (int i = 0; i < 6; i++) {
-            if(entries.size()<i+1){
+            if (entries.size() < i + 1) {
                 break;
             }
             Map<String, Object> mapPx = new HashMap<>();
             SysUser sysUser = userMapper.selectUserById(entries.get(i).getKey());
-            mapPx.put("xh",i+1);
-            mapPx.put("name",sysUser.getNickName());
-            mapPx.put("deptName",sysUser.getDept().getDeptName());
-            mapPx.put("num",entries.get(i).getValue());
+            mapPx.put("xh", i + 1);
+            mapPx.put("name", sysUser.getNickName());
+            mapPx.put("deptName", sysUser.getDept().getDeptName());
+            mapPx.put("num", entries.get(i).getValue());
             listMap.add(mapPx);
         }
 
@@ -773,10 +798,12 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
 
     @Override
     public AjaxResult yearFwlx(String time) {
-        if(StringUtils.isEmpty(time)){
-            time = DateUtils.dateTimeNow(YYYY);
+        if (StringUtils.isEmpty(time)) {
+            time = DateUtils.dateTimeNow(YYYY_MM_DD);
+        }else{
+            time = time +"-01-01";
         }
-        Map<String,Object> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         int zs = 0;
         int wlfw = 0;
         int sbfw = 0;
@@ -786,28 +813,40 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         int qtfw = 0;
 
         SysUser user = SecurityUtils.getLoginUser().getUser();
+        Long userId = 0L;
+        //判断角色是不是业务员
+        List<SysRole> roles = user.getRoles();
+        Boolean bl = false;
+        for (SysRole role : roles) {
+            if (WORK_USER.equals(role.getRoleKey())) {
+                bl = true;
+            }
+        }
+        if (bl) {
+            userId = user.getUserId();
+        }
         //本年单量
-        List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListByYear(time,user.getUserId());
-        if(workOrderInfoList!=null && !workOrderInfoList.isEmpty()){
+        List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListByYear(time, userId);
+        if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
             zs = workOrderInfoList.size();
-            Map<String,List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getType));
+            Map<String, List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getType));
 
-            if(workOrderInfomap.get(ONE)!=null && !workOrderInfomap.get(ONE).isEmpty()){
+            if (workOrderInfomap.get(ONE) != null && !workOrderInfomap.get(ONE).isEmpty()) {
                 wlfw = workOrderInfomap.get(ONE).size();
             }
-            if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
+            if (workOrderInfomap.get(TWO) != null && !workOrderInfomap.get(TWO).isEmpty()) {
                 sbfw = workOrderInfomap.get(TWO).size();
             }
-            if(workOrderInfomap.get(THR)!=null && !workOrderInfomap.get(THR).isEmpty()){
+            if (workOrderInfomap.get(THR) != null && !workOrderInfomap.get(THR).isEmpty()) {
                 rjfw = workOrderInfomap.get(THR).size();
             }
-            if(workOrderInfomap.get(FOR)!=null && !workOrderInfomap.get(FOR).isEmpty()){
+            if (workOrderInfomap.get(FOR) != null && !workOrderInfomap.get(FOR).isEmpty()) {
                 kffw = workOrderInfomap.get(FOR).size();
             }
-            if(workOrderInfomap.get(FIV)!=null && !workOrderInfomap.get(FIV).isEmpty()){
+            if (workOrderInfomap.get(FIV) != null && !workOrderInfomap.get(FIV).isEmpty()) {
                 sjfw = workOrderInfomap.get(FIV).size();
             }
-            if(workOrderInfomap.get(SIX)!=null && !workOrderInfomap.get(SIX).isEmpty()){
+            if (workOrderInfomap.get(SIX) != null && !workOrderInfomap.get(SIX).isEmpty()) {
                 qtfw = workOrderInfomap.get(SIX).size();
             }
         }
@@ -821,5 +860,144 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
         return AjaxResult.success(map);
     }
 
+    @Override
+    public AjaxResult yearLc(String time) {
+        if (StringUtils.isEmpty(time)) {
+            time = DateUtils.dateTimeNow(YYYY_MM_DD);
+        }else{
+            time = time +"-01-01";
+        }
+        Map<String, Object> map = new HashMap<>();
+        int zs = 0;
+        int djd = 0;
+        int jxz = 0;
+        int ywc = 0;
+        int dpj = 0;
+        int ypj = 0;
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        //本年单量
+        List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListByYear(time, user.getUserId());
+        if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
+            zs = workOrderInfoList.size();
+            Map<String, List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getServiceProgress));
+            if (workOrderInfomap.get(NORMAL) != null && !workOrderInfomap.get(NORMAL).isEmpty()) {
+                djd = workOrderInfomap.get(NORMAL).size();
+            }
+            if (workOrderInfomap.get(ONE) != null && !workOrderInfomap.get(ONE).isEmpty()) {
+                jxz = workOrderInfomap.get(ONE).size();
+            }
+            if (workOrderInfomap.get(TWO) != null && !workOrderInfomap.get(TWO).isEmpty()) {
+                ywc = workOrderInfomap.get(TWO).size();
+            }
+            if (workOrderInfomap.get(THR) != null && !workOrderInfomap.get(THR).isEmpty()) {
+                ypj = workOrderInfomap.get(THR).size();
+            }
+
+        }
+        map.put("zs", zs);
+        map.put("djd", djd);
+        map.put("jxz", jxz);
+        map.put("ywc", ywc);
+        map.put("dpj", ypj);
+        return AjaxResult.success(map);
+    }
+
+    @Override
+    public AjaxResult yearMonth(String time) {
+        Map<String, Object> map = new HashMap<>();
+        String year = time;
+        if (StringUtils.isEmpty(time)) {
+            time = DateUtils.dateTimeNow(YYYY_MM_DD);
+            year = DateUtils.dateTimeNow(YYYY);
+        }else{
+            time = time +"-01-01";
+        }
+        List<String> months = DateUtils.yearMonth(year);
+        List<String> monthhz = new ArrayList<>();
+        for (int i = 0; i < 12; i++) {
+            monthhz.add(i+1+"月");
+        }
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        Long userId = 0L;
+        //判断角色是不是业务员
+        List<SysRole> roles = user.getRoles();
+        Boolean bl = false;
+        for (SysRole role : roles) {
+            if (WORK_USER.equals(role.getRoleKey())) {
+                bl = true;
+            }
+        }
+        if (bl) {
+            userId = user.getUserId();
+        }
+
+        //本年单量
+        List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListByYear(time, userId);
+        List<Integer> numList = new ArrayList<>();
+
+        for (String month : months) {
+            int num = 0;
+            if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
+                for (WorkOrderInfo workOrderInfo : workOrderInfoList) {
+                    if (DateUtils.dateTime(workOrderInfo.getCreateTime()).contains(month)) {
+                        num++;
+                    }
+                }
+            }
+            numList.add(num);
+        }
+        map.put("x", monthhz);
+        map.put("y", numList);
+        return AjaxResult.success(map);
+    }
+
+    @Override
+    public AjaxResult deptLc(String time) {
+
+        if (StringUtils.isEmpty(time)) {
+            time = DateUtils.dateTimeNow(YYYY_MM_DD);
+        }else{
+            time = time +"-01-01";
+        }
+
+        Map<String, Object> map = new HashMap<>();
+        int zs = 0;
+        int djd = 0;
+        int jxz = 0;
+        int ywc = 0;
+        int ypj = 0;
+
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        SysUser use = new SysUser();
+        use.setDeptId(user.getDeptId());
+        //查询同一部门下的所有人(包括子部门)
+        List<SysUser> userList = userMapper.selectUserList(use);
+        List<Long> userIds = userList.stream().map(SysUser::getUserId).collect(Collectors.toList());
+        List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListByUserList(time,userIds);
+        if (workOrderInfoList != null && !workOrderInfoList.isEmpty()) {
+            zs = workOrderInfoList.size();
+            Map<String, List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getServiceProgress));
+            if (workOrderInfomap.get(NORMAL) != null && !workOrderInfomap.get(NORMAL).isEmpty()) {
+                djd = workOrderInfomap.get(NORMAL).size();
+            }
+            if (workOrderInfomap.get(ONE) != null && !workOrderInfomap.get(ONE).isEmpty()) {
+                jxz = workOrderInfomap.get(ONE).size();
+            }
+            if (workOrderInfomap.get(TWO) != null && !workOrderInfomap.get(TWO).isEmpty()) {
+                ywc = workOrderInfomap.get(TWO).size();
+            }
+            if (workOrderInfomap.get(THR) != null && !workOrderInfomap.get(THR).isEmpty()) {
+                ypj = workOrderInfomap.get(THR).size();
+            }
+
+        }
+        map.put("zs", zs);
+        map.put("djd", djd);
+        map.put("jxz", jxz);
+        map.put("ywc", ywc);
+        map.put("dpj", ypj);
+        return AjaxResult.success(map);
+    }
+
 
 }

+ 1 - 1
ruoyi-system/src/main/resources/mapper/system/OperationRecordMapper.xml

@@ -30,7 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="userName != null  and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
             <if test="record != null  and record != ''"> and record = #{record}</if>
         </where>
-        order by create_time
+        order by create_time desc
     </select>
     
     <select id="selectOperationRecordById" parameterType="Long" resultMap="OperationRecordResult">

+ 15 - 6
ruoyi-system/src/main/resources/mapper/system/WorkOrderInfoMapper.xml

@@ -88,7 +88,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="totalCostDx != null  and totalCostDx != ''"> and total_cost_dx = #{totalCostDx}</if>
             <if test="delFlag != null  and delFlag != ''"> and del_flag = #{delFlag}</if>
             <if test="createTime != null and createTime != ''"><!-- 开始时间检索 -->
-                and date_format(create_time,'%y%m%d') = date_format(#{createTime},'%y%m%d')
+                and date_format(create_time,'%Y%m%d') = date_format(#{createTime},'%Y%m%d')
             </if>
         </where>
         order by create_time desc
@@ -101,29 +101,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectWorkOrderInfoListBymonth" parameterType="WorkOrderInfo" resultMap="WorkOrderInfoResult">
         <include refid="selectWorkOrderInfoVo"/>
-        where date_format(create_time,'%y%m') = date_format(#{month},'%y%m') and del_flag = 'N'
+        where date_format(create_time,'%Y%m') = date_format(#{month},'%Y%m') and del_flag = 'N'
     </select>
     <select id="selectWorkOrderInfoListByTime" parameterType="WorkOrderInfo" resultMap="WorkOrderInfoResult">
         <include refid="selectWorkOrderInfoVo"/>
         where take_time &gt;= #{startDate}
         and take_time &lt;= #{endDate}
         and responsible_id = #{userId}
-        and order_placement !=null
+        and order_placement is not null
     </select>
     <select id="selectWorkOrderInfoListBymonthOne" parameterType="WorkOrderInfo" resultMap="WorkOrderInfoResult">
         <include refid="selectWorkOrderInfoVo"/>
-        where date_format(create_time,'%y%m') = date_format(#{month},'%y%m') and del_flag = 'N' and responsible_id != null
+        where date_format(create_time,'%Y%m') = date_format(#{month},'%Y%m') and del_flag = 'N' and responsible_id is not null
     </select>
     <select id="selectWorkOrderInfoListByYearOne" parameterType="WorkOrderInfo" resultMap="WorkOrderInfoResult">
         <include refid="selectWorkOrderInfoVo"/>
-        where date_format(create_time,'%y') = date_format(#{year},'%y') and del_flag = 'N' and responsible_id != null
+        where date_format(create_time,'%Y') = date_format(#{year},'%Y') and del_flag = 'N' and responsible_id is not null
     </select>
     <select id="selectWorkOrderInfoListByYear" parameterType="WorkOrderInfo" resultMap="WorkOrderInfoResult">
         <include refid="selectWorkOrderInfoVo"/>
-        where date_format(create_time,'%y') = date_format(#{year},'%y') and del_flag = 'N'
+        where date_format(create_time,'%Y') = date_format(#{year},'%Y') and del_flag = 'N'
         <if test="userId != null and userId !=0"> and responsible_id = #{userId}</if>
     </select>
 
+    <select id="selectWorkOrderInfoListByUserList" parameterType="WorkOrderInfo" resultMap="WorkOrderInfoResult">
+        <include refid="selectWorkOrderInfoVo"/>
+        where date_format(create_time,'%Y') = date_format(#{year},'%Y') and del_flag = 'N'
+        and responsible_id in
+        <foreach item="userId" index="index" collection="userIds" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </select>
+
     <insert id="insertWorkOrderInfo" parameterType="WorkOrderInfo">
         insert into work_order_info
         <trim prefix="(" suffix=")" suffixOverrides=",">