|
@@ -1,22 +1,48 @@
|
|
package com.ruoyi.system.service.impl;
|
|
package com.ruoyi.system.service.impl;
|
|
|
|
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.function.Function;
|
|
import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
+import com.deepoove.poi.XWPFTemplate;
|
|
|
|
+import com.deepoove.poi.config.Configure;
|
|
|
|
+import com.deepoove.poi.data.PictureRenderData;
|
|
|
|
+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.SysUser;
|
|
|
|
+import com.ruoyi.common.core.domain.model.LoginBody;
|
|
|
|
+import com.ruoyi.common.core.domain.model.LoginUser;
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
|
|
+import com.ruoyi.common.utils.SecurityUtils;
|
|
|
|
+import com.ruoyi.common.utils.ServletUtils;
|
|
|
|
+import com.ruoyi.common.utils.StringUtils;
|
|
|
|
+import com.ruoyi.common.utils.base64.Base64DecodedMultipartFile;
|
|
|
|
+import com.ruoyi.common.utils.file.FileUploadUtils;
|
|
|
|
+import com.ruoyi.common.utils.file.FileUtils;
|
|
import com.ruoyi.system.domain.ChargeDetails;
|
|
import com.ruoyi.system.domain.ChargeDetails;
|
|
import com.ruoyi.system.domain.WorkOrderFj;
|
|
import com.ruoyi.system.domain.WorkOrderFj;
|
|
|
|
+import com.ruoyi.system.domain.vo.WordVo;
|
|
import com.ruoyi.system.mapper.ChargeDetailsMapper;
|
|
import com.ruoyi.system.mapper.ChargeDetailsMapper;
|
|
import com.ruoyi.system.mapper.WorkOrderFjMapper;
|
|
import com.ruoyi.system.mapper.WorkOrderFjMapper;
|
|
|
|
+import lombok.SneakyThrows;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import com.ruoyi.system.mapper.WorkOrderInfoMapper;
|
|
import com.ruoyi.system.mapper.WorkOrderInfoMapper;
|
|
import com.ruoyi.system.domain.WorkOrderInfo;
|
|
import com.ruoyi.system.domain.WorkOrderInfo;
|
|
import com.ruoyi.system.service.IWorkOrderInfoService;
|
|
import com.ruoyi.system.service.IWorkOrderInfoService;
|
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import static com.ruoyi.common.constant.UserConstants.*;
|
|
import static com.ruoyi.common.constant.UserConstants.*;
|
|
|
|
+import static com.ruoyi.common.utils.DateUtils.YYYY_MM;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 工单信息Service业务层处理
|
|
* 工单信息Service业务层处理
|
|
@@ -36,6 +62,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
|
|
@Autowired
|
|
@Autowired
|
|
private ChargeDetailsMapper chargeDetailsMapper;
|
|
private ChargeDetailsMapper chargeDetailsMapper;
|
|
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 查询工单信息
|
|
* 查询工单信息
|
|
*
|
|
*
|
|
@@ -56,6 +83,9 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
|
|
Map<String,List<WorkOrderFj>> map = workOrderFjs.stream().collect(Collectors.groupingBy(WorkOrderFj::getType));
|
|
Map<String,List<WorkOrderFj>> map = workOrderFjs.stream().collect(Collectors.groupingBy(WorkOrderFj::getType));
|
|
workOrderInfo.setWorkOrderFjXqList(map.get(ONE));
|
|
workOrderInfo.setWorkOrderFjXqList(map.get(ONE));
|
|
workOrderInfo.setWorkOrderFjQmList(map.get(TWO));
|
|
workOrderInfo.setWorkOrderFjQmList(map.get(TWO));
|
|
|
|
+ if(map.get(THR)!=null && !map.get(THR).isEmpty()){
|
|
|
|
+ workOrderInfo.setWorkOrderFjgd(map.get(THR).get(0));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
//查询工单收费详情
|
|
//查询工单收费详情
|
|
ChargeDetails chargeDetails = new ChargeDetails();
|
|
ChargeDetails chargeDetails = new ChargeDetails();
|
|
@@ -90,8 +120,17 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
|
|
@Override
|
|
@Override
|
|
public int insertWorkOrderInfo(WorkOrderInfo workOrderInfo)
|
|
public int insertWorkOrderInfo(WorkOrderInfo workOrderInfo)
|
|
{
|
|
{
|
|
|
|
+ //生成工单编号(时间戳+4位随机数)
|
|
|
|
+ workOrderInfo.setOrderId(DateUtils.getOrderId());
|
|
workOrderInfo.setCreateTime(DateUtils.getNowDate());
|
|
workOrderInfo.setCreateTime(DateUtils.getNowDate());
|
|
- return workOrderInfoMapper.insertWorkOrderInfo(workOrderInfo);
|
|
|
|
|
|
+ int i = workOrderInfoMapper.insertWorkOrderInfo(workOrderInfo);
|
|
|
|
+ if(workOrderInfo.getWorkOrderFjXqList()!=null && !workOrderInfo.getWorkOrderFjXqList().isEmpty()){
|
|
|
|
+ for (WorkOrderFj workOrderFj : workOrderInfo.getWorkOrderFjXqList()) {
|
|
|
|
+ workOrderFj.setOrderId(workOrderInfo.getOrderId());
|
|
|
|
+ workOrderFjMapper.insertWorkOrderFj(workOrderFj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return i;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -112,6 +151,12 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
|
|
chargeDetailsMapper.insertChargeDetails(chargeDetails);
|
|
chargeDetailsMapper.insertChargeDetails(chargeDetails);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ if(workOrderInfo.getWorkOrderFjXqList()!=null && !workOrderInfo.getWorkOrderFjXqList().isEmpty()){
|
|
|
|
+ for (WorkOrderFj workOrderFj : workOrderInfo.getWorkOrderFjXqList()) {
|
|
|
|
+ workOrderFj.setOrderId(workOrderInfo.getOrderId());
|
|
|
|
+ workOrderFjMapper.insertWorkOrderFj(workOrderFj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
workOrderInfo.setUpdateTime(DateUtils.getNowDate());
|
|
workOrderInfo.setUpdateTime(DateUtils.getNowDate());
|
|
return workOrderInfoMapper.updateWorkOrderInfo(workOrderInfo);
|
|
return workOrderInfoMapper.updateWorkOrderInfo(workOrderInfo);
|
|
}
|
|
}
|
|
@@ -139,4 +184,416 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService
|
|
{
|
|
{
|
|
return workOrderInfoMapper.deleteWorkOrderInfoByOrderId(orderId);
|
|
return workOrderInfoMapper.deleteWorkOrderInfoByOrderId(orderId);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public int jd(WorkOrderInfo workOrderInfo) {
|
|
|
|
+ workOrderInfo.setServiceProgress(ONE);
|
|
|
|
+ workOrderInfo.setTakeTime(DateUtils.getNowDate());
|
|
|
|
+ SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
|
+ //自主接单
|
|
|
|
+ if(TWO.equals(workOrderInfo.getOrderPlacement())){
|
|
|
|
+ workOrderInfo.setResponsibleId(user.getUserId());
|
|
|
|
+ workOrderInfo.setResponsibleName(user.getNickName());
|
|
|
|
+ workOrderInfo.setResponsiblePhone(user.getPhonenumber());
|
|
|
|
+ }
|
|
|
|
+ return workOrderInfoMapper.updateWorkOrderInfo(workOrderInfo);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public AjaxResult dzgd(String orderId) {
|
|
|
|
+ //查询工单信息
|
|
|
|
+ WorkOrderInfo workOrderInfo = workOrderInfoMapper.selectWorkOrderInfoByOrderId(orderId);
|
|
|
|
+ //查询工单收费详情
|
|
|
|
+ ChargeDetails chargeDetails = new ChargeDetails();
|
|
|
|
+ chargeDetails.setOrderId(orderId);
|
|
|
|
+ List<ChargeDetails> chargeDetails1 = chargeDetailsMapper.selectChargeDetailsList(chargeDetails);
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ 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("qm", "{{@qm}}");
|
|
|
|
+
|
|
|
|
+ List<Object> workList = new ArrayList<>();
|
|
|
|
+ if(chargeDetails1!=null && !chargeDetails1.isEmpty()){
|
|
|
|
+ for (int i = 0; i < chargeDetails1.size(); i++) {
|
|
|
|
+ HashMap<String, Object> workItem = new HashMap<>();
|
|
|
|
+ workItem.put("xh", i + 1);
|
|
|
|
+ workItem.put("cpmc", chargeDetails1.get(i).getProductName());
|
|
|
|
+ workItem.put("sl", chargeDetails1.get(i).getProductNum());
|
|
|
|
+ workItem.put("dw", chargeDetails1.get(i).getProductUnit());
|
|
|
|
+ workItem.put("dj", chargeDetails1.get(i).getUnitPrice());
|
|
|
|
+ workItem.put("zj", chargeDetails1.get(i).getTotalPrice());
|
|
|
|
+ workList.add(workItem);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ finalMap.put("workList", workList);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 插入图片
|
|
|
|
+ /*try {
|
|
|
|
+ //这里也可以是用文件服务器返回的网络文件流
|
|
|
|
+ String pictureUrl = "http://5b0988e595225.cdn.sohucs.com/images/20171013/fec49f59b98041a4a16886893447f746.jpeg";
|
|
|
|
+ pictureUrl = "D:\\xx\\Java项目\\xx\\sxsoft_expert\\staticfile\\下载.png";
|
|
|
|
+ // 从网络流读取图片,置入word模板,等待编译
|
|
|
|
+ if (StringUtils.isNotEmpty(pictureUrl)) {
|
|
|
|
+ //PictureRenderData picture = Pictures.ofUrl(pictureUrl).size(40, 30).create();//网络图片地址
|
|
|
|
+ PictureRenderData picture = Pictures.ofLocal(pictureUrl).size(40, 30).create();//本地图片地址
|
|
|
|
+ finalMap.put("signPicture", picture);
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }*/
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 从网络url 下载word模板到指定文件夹
|
|
|
|
+ File wordTemplate = new File("D:\\ruoyi\\uploadPath\\gongdan\\muban\\工单模板.docx");
|
|
|
|
+ // 此处使用了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 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());
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ }
|
|
|
|
+ //将文件路径存入数据库
|
|
|
|
+ WorkOrderFj workOrderFj = new WorkOrderFj();
|
|
|
|
+ workOrderFj.setOrderId(orderId);
|
|
|
|
+ workOrderFj.setName(fileName);
|
|
|
|
+ workOrderFj.setUrl(templatePath);
|
|
|
|
+ workOrderFj.setType(THR);
|
|
|
|
+ //删除之前生成的文件
|
|
|
|
+ workOrderFjMapper.deleteWorkOrderFj(workOrderFj);
|
|
|
|
+ workOrderFjMapper.insertWorkOrderFj(workOrderFj);
|
|
|
|
+ return AjaxResult.success("成功",templatePath);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @SneakyThrows
|
|
|
|
+ @Override
|
|
|
|
+ public AjaxResult qm(WordVo wordVo) {
|
|
|
|
+ //查询工单信息
|
|
|
|
+ WorkOrderInfo workOrderInfo = workOrderInfoMapper.selectWorkOrderInfoByOrderId(wordVo.getOrderId());
|
|
|
|
+ int start = wordVo.getImage().indexOf(",");
|
|
|
|
+ String head = wordVo.getImage().substring(start + 1);
|
|
|
|
+ MultipartFile file = Base64DecodedMultipartFile.base64Convert(wordVo.getImage(),head,workOrderInfo.getOrderId()+"签字");
|
|
|
|
+ // 上传文件路径
|
|
|
|
+ String filePath = RuoYiConfig.getUploadPath();
|
|
|
|
+ // 上传并返回新文件名称
|
|
|
|
+ String fileName = FileUploadUtils.upload(filePath, file);
|
|
|
|
+ //将文件路径存入数据库
|
|
|
|
+ WorkOrderFj workOrderFj = new WorkOrderFj();
|
|
|
|
+ workOrderFj.setOrderId(wordVo.getOrderId());
|
|
|
|
+ workOrderFj.setName(FileUtils.getName(fileName));
|
|
|
|
+ workOrderFj.setUrl(fileName);
|
|
|
|
+ workOrderFj.setType(TWO);
|
|
|
|
+ //删除之前生成的文件
|
|
|
|
+ workOrderFjMapper.deleteWorkOrderFj(workOrderFj);
|
|
|
|
+ workOrderFjMapper.insertWorkOrderFj(workOrderFj);
|
|
|
|
+ //将文件写入word
|
|
|
|
+ WorkOrderFj workFj = new WorkOrderFj();
|
|
|
|
+ workFj.setOrderId(wordVo.getOrderId());
|
|
|
|
+ workFj.setType(THR);
|
|
|
|
+ List<WorkOrderFj> workOrderFjs = workOrderFjMapper.selectWorkOrderFjList(workFj);
|
|
|
|
+
|
|
|
|
+ HashMap<String, Object> finalMap = new HashMap<>();
|
|
|
|
+ //这里也可以是用文件服务器返回的网络文件流
|
|
|
|
+ String pictureUrl = "http://5b0988e595225.cdn.sohucs.com/images/20171013/fec49f59b98041a4a16886893447f746.jpeg";
|
|
|
|
+ pictureUrl = "http://localhost:8077" + fileName;
|
|
|
|
+ // 从网络流读取图片,置入word模板,等待编译
|
|
|
|
+ if (StringUtils.isNotEmpty(pictureUrl)) {
|
|
|
|
+ PictureRenderData picture = Pictures.ofUrl(pictureUrl).size(100, 60).create();//网络图片地址
|
|
|
|
+ //PictureRenderData picture = Pictures.ofLocal(pictureUrl).size(100, 60).create();//本地图片地址
|
|
|
|
+ finalMap.put("qm", picture);
|
|
|
|
+ }
|
|
|
|
+ // 从网络url 下载word模板到指定文件夹
|
|
|
|
+ //http://192.168.101.86:8077 "D:\\ruoyi\\uploadPath\\gongdan\\muban\\工单模板.docx"
|
|
|
|
+ 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;;
|
|
|
|
+ File word = new File(path);
|
|
|
|
+ try {
|
|
|
|
+ render.writeToFile(word.getAbsolutePath());
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ }
|
|
|
|
+ return AjaxResult.success("成功");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public AjaxResult lc() {
|
|
|
|
+
|
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
|
+ int zs = 0;
|
|
|
|
+ int djd = 0;
|
|
|
|
+ int jxz = 0;
|
|
|
|
+ int ywc = 0;
|
|
|
|
+ int dpj = 0;
|
|
|
|
+ int ypj = 0;
|
|
|
|
+ int szs = 0;
|
|
|
|
+ String zz = "0%";
|
|
|
|
+ //获取当前月
|
|
|
|
+ String month = DateUtils.dateTimeNow(YYYY_MM);
|
|
|
|
+ //获取上个月
|
|
|
|
+ String lastMonth = DateUtils.lastMonth();
|
|
|
|
+ //本月单量
|
|
|
|
+ List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonth(month);
|
|
|
|
+ //上个月单量
|
|
|
|
+ List<WorkOrderInfo> lastWorkOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonth(lastMonth);
|
|
|
|
+ if(lastWorkOrderInfoList!=null && !lastWorkOrderInfoList.isEmpty()){
|
|
|
|
+ szs = lastWorkOrderInfoList.size();
|
|
|
|
+ }
|
|
|
|
+ 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();
|
|
|
|
+ }
|
|
|
|
+ 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) // 先计算百分比并保留三位小数以处理可能的精度问题
|
|
|
|
+ .setScale(1, RoundingMode.HALF_UP); // 再设置为一位小数
|
|
|
|
+ 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("zz", zz);
|
|
|
|
+ return AjaxResult.success(map);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public AjaxResult fw() {
|
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
|
+ int zs = 0;
|
|
|
|
+ int wlfw = 0;
|
|
|
|
+ int sbfw = 0;
|
|
|
|
+ int rjfw = 0;
|
|
|
|
+ int kffw = 0;
|
|
|
|
+ int sjfw = 0;
|
|
|
|
+ int qtfw = 0;
|
|
|
|
+ //获取当前月
|
|
|
|
+ String month = DateUtils.dateTimeNow(YYYY_MM);
|
|
|
|
+ //本月单量
|
|
|
|
+ List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonth(month);
|
|
|
|
+ if(workOrderInfoList!=null && !workOrderInfoList.isEmpty()){
|
|
|
|
+ zs = workOrderInfoList.size();
|
|
|
|
+ Map<String,List<WorkOrderInfo>> workOrderInfomap = workOrderInfoList.stream().collect(Collectors.groupingBy(WorkOrderInfo::getType));
|
|
|
|
+
|
|
|
|
+ if(workOrderInfomap.get(ONE)!=null && !workOrderInfomap.get(ONE).isEmpty()){
|
|
|
|
+ wlfw = workOrderInfomap.get(ONE).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
|
|
|
|
+ sbfw = workOrderInfomap.get(TWO).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(THR)!=null && !workOrderInfomap.get(THR).isEmpty()){
|
|
|
|
+ rjfw = workOrderInfomap.get(THR).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(FOR)!=null && !workOrderInfomap.get(FOR).isEmpty()){
|
|
|
|
+ kffw = workOrderInfomap.get(FOR).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(FIV)!=null && !workOrderInfomap.get(FIV).isEmpty()){
|
|
|
|
+ sjfw = workOrderInfomap.get(FIV).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(SIX)!=null && !workOrderInfomap.get(SIX).isEmpty()){
|
|
|
|
+ qtfw = workOrderInfomap.get(SIX).size();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ map.put("zs", zs);
|
|
|
|
+ map.put("wlfw", wlfw);
|
|
|
|
+ map.put("sbfw", sbfw);
|
|
|
|
+ map.put("rjfw", rjfw);
|
|
|
|
+ map.put("kffw", kffw);
|
|
|
|
+ map.put("sjfw", sjfw);
|
|
|
|
+ map.put("qtfw", qtfw);
|
|
|
|
+ return AjaxResult.success(map);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public AjaxResult bj() {
|
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
|
+ //获取当前月
|
|
|
|
+ String month = DateUtils.dateTimeNow(YYYY_MM);
|
|
|
|
+ //获取上个月
|
|
|
|
+ String lastMonth = DateUtils.lastMonth();
|
|
|
|
+ //本月单量
|
|
|
|
+ List<WorkOrderInfo> workOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonth(month);
|
|
|
|
+ //上个月单量
|
|
|
|
+ List<WorkOrderInfo> lastWorkOrderInfoList = workOrderInfoMapper.selectWorkOrderInfoListBymonth(lastMonth);
|
|
|
|
+ List<String> y = new ArrayList<>();
|
|
|
|
+ List<Integer> x1 = new ArrayList<>();
|
|
|
|
+ List<Integer> x2 = new ArrayList<>();
|
|
|
|
+ y.add("网络服务");
|
|
|
|
+ y.add("设备服务");
|
|
|
|
+ y.add("软件服务");
|
|
|
|
+ y.add("开发服务");
|
|
|
|
+ y.add("设计服务");
|
|
|
|
+ y.add("其他服务");
|
|
|
|
+ //本月
|
|
|
|
+ int wlfw = 0;
|
|
|
|
+ int sbfw = 0;
|
|
|
|
+ int rjfw = 0;
|
|
|
|
+ int kffw = 0;
|
|
|
|
+ int sjfw = 0;
|
|
|
|
+ int qtfw = 0;
|
|
|
|
+ //上月
|
|
|
|
+ int swlfw = 0;
|
|
|
|
+ int ssbfw = 0;
|
|
|
|
+ int srjfw = 0;
|
|
|
|
+ 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(workOrderInfomap.get(ONE)!=null && !workOrderInfomap.get(ONE).isEmpty()){
|
|
|
|
+ wlfw = workOrderInfomap.get(ONE).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
|
|
|
|
+ sbfw = workOrderInfomap.get(TWO).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(THR)!=null && !workOrderInfomap.get(THR).isEmpty()){
|
|
|
|
+ rjfw = workOrderInfomap.get(THR).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(FOR)!=null && !workOrderInfomap.get(FOR).isEmpty()){
|
|
|
|
+ kffw = workOrderInfomap.get(FOR).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(FIV)!=null && !workOrderInfomap.get(FIV).isEmpty()){
|
|
|
|
+ sjfw = workOrderInfomap.get(FIV).size();
|
|
|
|
+ }
|
|
|
|
+ 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(workOrderInfomap.get(ONE)!=null && !workOrderInfomap.get(ONE).isEmpty()){
|
|
|
|
+ swlfw = workOrderInfomap.get(ONE).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
|
|
|
|
+ ssbfw = workOrderInfomap.get(TWO).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(THR)!=null && !workOrderInfomap.get(THR).isEmpty()){
|
|
|
|
+ srjfw = workOrderInfomap.get(THR).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(FOR)!=null && !workOrderInfomap.get(FOR).isEmpty()){
|
|
|
|
+ skffw = workOrderInfomap.get(FOR).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(FIV)!=null && !workOrderInfomap.get(FIV).isEmpty()){
|
|
|
|
+ ssjfw = workOrderInfomap.get(FIV).size();
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(SIX)!=null && !workOrderInfomap.get(SIX).isEmpty()){
|
|
|
|
+ sqtfw = workOrderInfomap.get(SIX).size();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ x1.add(wlfw);
|
|
|
|
+ x1.add(sbfw);
|
|
|
|
+ x1.add(rjfw);
|
|
|
|
+ x1.add(kffw);
|
|
|
|
+ x1.add(sjfw);
|
|
|
|
+ x1.add(qtfw);
|
|
|
|
+
|
|
|
|
+ x2.add(swlfw);
|
|
|
|
+ x2.add(ssbfw);
|
|
|
|
+ x2.add(srjfw);
|
|
|
|
+ x2.add(skffw);
|
|
|
|
+ x2.add(ssjfw);
|
|
|
|
+ x2.add(sqtfw);
|
|
|
|
+ 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<>();
|
|
|
|
+ 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";
|
|
|
|
+ SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
|
+ 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();
|
|
|
|
+ BigDecimal bzhjd = new BigDecimal(zzjd);
|
|
|
|
+ BigDecimal percentage = bzs.multiply(new BigDecimal("100"))
|
|
|
|
+ .divide(bzhjd, 3, RoundingMode.HALF_UP) // 先计算百分比并保留三位小数以处理可能的精度问题
|
|
|
|
+ .setScale(1, RoundingMode.HALF_UP); // 再设置为一位小数
|
|
|
|
+ zzbfb = percentage.toString()+"%";
|
|
|
|
+ }
|
|
|
|
+ if(workOrderInfomap.get(TWO)!=null && !workOrderInfomap.get(TWO).isEmpty()){
|
|
|
|
+ zdfp = workOrderInfomap.get(TWO).size();
|
|
|
|
+ BigDecimal bzdfp = new BigDecimal(zdfp);
|
|
|
|
+ BigDecimal percentage = bzs.multiply(new BigDecimal("100"))
|
|
|
|
+ .divide(bzdfp, 3, RoundingMode.HALF_UP) // 先计算百分比并保留三位小数以处理可能的精度问题
|
|
|
|
+ .setScale(1, RoundingMode.HALF_UP); // 再设置为一位小数
|
|
|
|
+ zpbfb = percentage.toString()+"%";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ map.put("zs",zs);
|
|
|
|
+ map.put("zzjd",zzjd);
|
|
|
|
+ map.put("zdfp",zdfp);
|
|
|
|
+ map.put("zpbfb",zpbfb);
|
|
|
|
+ map.put("zzbfb",zzbfb);
|
|
|
|
+ return AjaxResult.success(map);
|
|
|
|
+ }
|
|
}
|
|
}
|