diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java index 093efbac..755571c0 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java @@ -34,7 +34,6 @@ public class DlRepairTicketsController { private DlRepairTicketsService dlRepairTicketsService; - /** * 维修工单表 新增 * @@ -140,7 +139,7 @@ public class DlRepairTicketsController { @GetMapping("/print/{id}") @Operation(summary = "维修工单打印") public void printDocument(HttpServletResponse response, @PathVariable String id) { - dlRepairTicketsService.print(response,id); + dlRepairTicketsService.print(response, id); } /** @@ -160,19 +159,19 @@ public class DlRepairTicketsController { /** * 分类查询工单分页 * + * @param repairTicketsReqVO 查询对象 + * @param pageNo 页码 + * @param pageSize 条数 * @author 小李 * @date 16:26 2024/10/12 - * @param repairTicketsReqVO 查询对象 - * @param pageNo 页码 - * @param pageSize 条数 - **/ + **/ @GetMapping("/pageType") @Operation(summary = "分类查询工单分页") public CommonResult getPageType(DlRepairTicketsReqVO repairTicketsReqVO, - @RequestParam(value = "pageNo", defaultValue = "1")Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10")Integer pageSize){ + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { Page page = new Page<>(pageNo, pageSize); - if(StringUtils.isEmpty(repairTicketsReqVO.getSelectType())){ + if (StringUtils.isEmpty(repairTicketsReqVO.getSelectType())) { //查询类型为空,默认查待处理的 repairTicketsReqVO.setSelectType(RepairCons.TICKETS_WAITING); } @@ -187,20 +186,20 @@ public class DlRepairTicketsController { **/ @GetMapping("/userRole") @Operation(summary = "判断登录用户的角色,针对维修工单中的四个角色") - public CommonResult getUserRole(){ + public CommonResult getUserRole() { return success(dlRepairTicketsService.getUserRole()); } /** * 接单 * + * @param id 工单ID * @author 小李 * @date 11:48 2024/10/14 - * @param id 工单ID - **/ + **/ @GetMapping("/take") @Operation(summary = "接单") - public CommonResult updateTake(@RequestParam("id") String id){ + public CommonResult updateTake(@RequestParam("id") String id) { dlRepairTicketsService.updateTake(id); return CommonResult.ok(); } @@ -208,13 +207,13 @@ public class DlRepairTicketsController { /** * 指派员工,通知施工 * + * @param reqVO 请求对象 * @author 小李 * @date 15:34 2024/10/14 - * @param reqVO 请求对象 - **/ + **/ @PostMapping("/notify") @Operation(summary = "指派员工,通知施工") - public CommonResult updateRepair(@RequestBody DlRepairTicketsReqVO reqVO){ + public CommonResult updateRepair(@RequestBody DlRepairTicketsReqVO reqVO) { dlRepairTicketsService.updateRepair(reqVO); return CommonResult.ok(); } @@ -222,13 +221,13 @@ public class DlRepairTicketsController { /** * 更新工单状态 * + * @param respVO 请求对象 * @author 小李 * @date 15:46 2024/10/18 - * @param respVO 请求对象 - **/ + **/ @PostMapping("/updateStatus") @Operation(summary = "更新工单状态") - public CommonResult updateStatus(@RequestBody DlRepairTicketsRespVO respVO){ + public CommonResult updateStatus(@RequestBody DlRepairTicketsRespVO respVO) { dlRepairTicketsService.updateStatus(respVO); return CommonResult.ok(); } @@ -236,14 +235,14 @@ public class DlRepairTicketsController { /** * 配件客户是否可见 * + * @param id 工单ID + * @param show 是否可见 * @author 小李 * @date 21:52 2024/10/18 - * @param id 工单ID - * @param show 是否可见 - **/ + **/ @GetMapping("/show") @Operation(summary = "配件客户是否可见") - public CommonResult updateShow(@RequestParam("id") String id, @RequestParam("show") String show){ + public CommonResult updateShow(@RequestParam("id") String id, @RequestParam("show") String show) { dlRepairTicketsService.updateShow(id, show); return CommonResult.ok(); } @@ -252,19 +251,47 @@ public class DlRepairTicketsController { * 查待总检或待出厂检验的工单 * 维修服务顾问和总检用的 * + * @param repairTicketsReqVO 请求对象 + * @param pageNo 页码 + * @param pageSize 条数 * @author 小李 * @date 11:40 2024/10/23 - * @param repairTicketsReqVO 请求对象 - * @param pageNo 页码 - * @param pageSize 条数 - **/ + **/ @GetMapping("/pageByRole") @Operation(summary = "查待总检或待出厂检验的工单") public CommonResult getPageByRole(DlRepairTicketsReqVO repairTicketsReqVO, - @RequestParam(value = "pageNo", defaultValue = "1")Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10")Integer pageSize){ + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { Page page = new Page<>(pageNo, pageSize); return success(dlRepairTicketsService.getPageByRole(repairTicketsReqVO, page)); } + + /** + * 维修总检完成总检 + * + * @author 小李 + * @date 16:48 2024/10/23 + * @param respVO 请求对象 + **/ + @PostMapping("/inspection") + @Operation(summary = "维修总检完成总检") + public CommonResult inspection(@RequestBody DlRepairTicketsRespVO respVO) { + dlRepairTicketsService.inspection(respVO); + return CommonResult.ok(); + } + + /** + * 服务顾问上传出厂检验日志 + * + * @author 小李 + * @date 17:47 2024/10/23 + * @param respVO 请求对象 + **/ + @PostMapping("/confirm") + @Operation(summary = "服务顾问上传出厂检验日志") + public CommonResult confirm(@RequestBody DlRepairTicketsRespVO respVO) { + dlRepairTicketsService.confirm(respVO); + return CommonResult.ok(); + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java index bb8ed44e..5815be2f 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java @@ -145,4 +145,22 @@ public interface DlRepairTicketsService extends IService { * @param repairTicketsReqVO 请求对象 **/ IPage getPageByRole(DlRepairTicketsReqVO repairTicketsReqVO, Page page); + + /** + * 维修总检完成总检 + * + * @author 小李 + * @date 16:48 2024/10/23 + * @param respVO 请求对象 + **/ + void inspection(DlRepairTicketsRespVO respVO); + + /** + * 服务顾问上传出厂检验日志 + * + * @author 小李 + * @date 17:47 2024/10/23 + * @param respVO 请求对象 + **/ + void confirm(DlRepairTicketsRespVO respVO); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 823e578e..7f85ec0d 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -430,9 +430,15 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl getPageType(DlRepairTicketsReqVO repairTicketsReqVO, Page page) { String userRoleCode = getUserRole(); - if (userRoleCode.equals(RepairRoleEnum.ADMIN.getCode()) || userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode())) { + if (userRoleCode.equals(RepairRoleEnum.ADMIN.getCode())) { //维修管理员和总检,看所有数据 - } else if (userRoleCode.equals(RepairRoleEnum.ADVISOR.getCode())) { + } else if(userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode())){ + //总检 + if (RepairCons.TICKETS_WAITING.equals(repairTicketsReqVO.getSelectType())) { + //查待处理的,查需要自己处理的,否则就是查所有 + repairTicketsReqVO.setUserId(String.valueOf(SecurityFrameworkUtils.getLoginUserId())); + } + }else if (userRoleCode.equals(RepairRoleEnum.ADVISOR.getCode())) { //服务顾问看自己的 repairTicketsReqVO.setAdviserId(String.valueOf(SecurityFrameworkUtils.getLoginUserId())); } else if (userRoleCode.equals(RepairRoleEnum.REPAIR_STAFF.getCode())) { @@ -556,7 +562,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(DlRepairTickets::getId, respVO.getId()); - wrapper.set(DlRepairTickets::getTicketsWorkStatus, respVO.getTicketsWorkStatus()); +// 这里注掉,不能让员工更新工单的状态为完成,后面还有总检、服务顾问 +// wrapper.set(DlRepairTickets::getTicketsWorkStatus, respVO.getTicketsWorkStatus()); if (ObjectUtil.isNotEmpty(respVO.getIsFinish())) { wrapper.set(DlRepairTickets::getIsFinish, respVO.getIsFinish()); } @@ -610,7 +617,12 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl() + .setSql("now_repair_id = adviser_id") + .setSql("now_repair_name = adviser_name") + .eq(DlRepairTickets::getId, respVO.getId())); } else { repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), message); } @@ -622,12 +634,13 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl ids = permissionApi.getUserIdByRoleId(roleInfo.getId()); if (CollectionUtil.isEmpty(ids)) return; // 如果是移交给总检就需要通知总检并让其总检 - if (RecordTypeEnum.SGWCZJ.getCode().equals(respVO.getRecordType()) && respVO.getFinishType().equals("02")) { + if (RecordTypeEnum.SGWCZJ.getCode().equals(respVO.getRecordType()) && "02".equals(respVO.getFinishType())) { // 工单移交给总检(理论上讲只有一个总检,就算有多个这里面也只给一个) AdminUserRespDTO user = adminUserApi.getUser(ids.get(0)); baseMapper.update(new LambdaUpdateWrapper() .set(DlRepairTickets::getNowRepairId, user.getId()) .set(DlRepairTickets::getNowRepairName, user.getNickname()) + .set(DlRepairTickets::getTicketsWorkStatus, "05") .eq(DlRepairTickets::getId, respVO.getId())); repairWorkerService.sentMessage(user.getId(), "您有新的工单需要总检"); } else { @@ -648,7 +661,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl getPageByRole(DlRepairTicketsReqVO repairTicketsReqVO, Page page){ + public IPage getPageByRole(DlRepairTicketsReqVO repairTicketsReqVO, Page page) { String userRoleCode = getUserRole(); + // 当前操作人的id + Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); // 维修服务顾问 - if (userRoleCode.equals(RepairRoleEnum.ADVISOR.getCode())){ - - }else if (userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode())){ + if (userRoleCode.equals(RepairRoleEnum.ADVISOR.getCode())) { + repairTicketsReqVO.setNowRepairId(loginUserId); + repairTicketsReqVO.setIsFinish("1"); + } else if (userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode())) { // 总检 - }else { + repairTicketsReqVO.setNowRepairId(loginUserId); + repairTicketsReqVO.setIsFinish("0"); + } else { return null; } - // 还是用分类查询,不过需要重新构造查询条件 todo + // 还是用分类查询,不过需要重新构造查询条件 return baseMapper.getPageType(repairTicketsReqVO, page); } + + /** + * 维修总检完成总检 + * + * @author 小李 + * @date 16:48 2024/10/23 + * @param respVO 请求对象 + **/ + @Override + @DSTransactional + public void inspection(DlRepairTicketsRespVO respVO){ + // 新增日志 + repairRecordsService.saveRepairRecord(respVO.getId(), null, RecordTypeEnum.ZJ.getCode(), respVO.getRemark(), respVO.getImage()); + // 更新工单 + baseMapper.update(new LambdaUpdateWrapper() + .set(DlRepairTickets::getIsFinish, "1") + .setSql("now_repair_id = adviser_id") + .setSql("now_repair_name = adviser_name") + .eq(DlRepairTickets::getId, respVO.getId()) + ); + // 通知服务顾问 + DlRepairTickets tickets = baseMapper.selectById(respVO.getId()); + repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), "您有新的工单可以出厂检验"); + } + + /** + * 服务顾问上传出厂检验日志 + * + * @author 小李 + * @date 17:47 2024/10/23 + * @param respVO 请求对象 + **/ + @Override + public void confirm(DlRepairTicketsRespVO respVO){ + // 更新工单状态 + baseMapper.update(new LambdaUpdateWrapper() + .set(DlRepairTickets::getTicketsWorkStatus, "03") + .eq(DlRepairTickets::getId, respVO.getId()) + ); + + // 记录日志 + repairRecordsService.saveRepairRecord(respVO.getId(), null, RecordTypeEnum.JSGD.getCode(), respVO.getRemark(), respVO.getImage()); + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java index 9772a671..98266bf1 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java @@ -364,6 +364,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl + + and drt.now_repair_id = #{map.nowRepairId} + order by drt.create_time desc diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/controller/admin/RescueBigScreeController.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/controller/admin/RescueBigScreeController.java new file mode 100644 index 00000000..bf1d101e --- /dev/null +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/controller/admin/RescueBigScreeController.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.rescue.controller.admin; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.rescue.service.IRescueOrderInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/rescue/bigScree") +public class RescueBigScreeController { + @Autowired + private IRescueOrderInfoService rescueOrderInfoService; + + /** + * + * @param type count 数量 money 金额 + * @param timeType day 日 month 月 year 年 + * @return + */ + @GetMapping("/getRescueOrderCount") + public CommonResult getRescueOrderCount(String type, String timeType){ + return CommonResult.success(rescueOrderInfoService.getRescueOrderCount(type,timeType)); + } +} diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueOrderInfoMapper.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueOrderInfoMapper.java index 50f38dd0..3fd66f9f 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueOrderInfoMapper.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueOrderInfoMapper.java @@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 救援订单Mapper接口 @@ -33,5 +34,4 @@ public interface RescueOrderInfoMapper extends BaseMapper */ public List selectRescueOrderInfoList(RescueOrderInfo rescueOrderInfo); Double avgPartnerScore(@Param("driverId") Long driverId); - } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueOrderInfoService.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueOrderInfoService.java index 51ab1446..3709aba8 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueOrderInfoService.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueOrderInfoService.java @@ -69,4 +69,12 @@ public interface IRescueOrderInfoService extends IService RescueOrderInfo getOrderByOrderNo(String orderNo); Map payNotify( JSONObject jsonObject); public void reviewOrder(String rescueId, Integer starLevel, String reviewStr) throws Exception; + + /** + * + * @param type count 数量 money 金额 + * @param timeType day 日 month 月 year 年 + * @return + */ + List> getRescueOrderCount(String type, String timeType); } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java index 1d042229..80bf1cd8 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java @@ -1,6 +1,9 @@ package cn.iocoder.yudao.module.rescue.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.module.rescue.domain.*; @@ -22,6 +25,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; +import java.time.LocalDate; import java.util.*; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -313,4 +317,91 @@ public class RescueOrderInfoServiceImpl extends ServiceImpl> getRescueOrderCount(String type, String timeType) { + List> res = new ArrayList<>(); + DateTime startTime = DateUtil.date(); + DateTime endTime = new DateTime(); + List dateList = new ArrayList<>(); + switch (timeType) { + case "day": + startTime = DateUtil.beginOfDay(startTime); + endTime = DateUtil.endOfDay(endTime); + dateList = DateUtil.rangeToList(startTime, endTime, DateField.HOUR_OF_DAY); + break; + case "month": + startTime = DateUtil.beginOfMonth(startTime); + endTime = DateUtil.endOfMonth(endTime); + dateList = DateUtil.rangeToList(startTime, endTime, DateField.DAY_OF_MONTH); + break; + case "year": + startTime = DateUtil.beginOfYear(startTime); + endTime = DateUtil.endOfYear(endTime); + dateList = DateUtil.rangeToList(startTime, endTime, DateField.MONTH); + break; + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.between(RescueOrderInfo::getCreateTime, startTime, endTime); + queryWrapper.eq(RescueOrderInfo::getOrderStatus, "3"); + List list = this.list(queryWrapper); + for (DateTime dateTime : dateList) { + String name = ""; + switch (timeType) { + case "day": + name = dateTime.toString("HH:mm"); + break; + case "month": + name = dateTime.toString("MM-dd"); + break; + case "year": + name = dateTime.toString("YYYY-MM"); + break; + } + Map map = new HashMap<>(); + DateTime endTime1 = getEndTime(timeType, dateTime); + List rescueOrderInfos = filterOrdersByDate(list, dateTime, endTime1); + map.put("name", name); + if ("count".equals(type)) { + long count = rescueOrderInfos.stream().count(); + map.put("value", count); + }else if ("money".equals(type)) { + // 使用 stream() 计算总金额,并防止空指针异常 + long money = rescueOrderInfos.stream() + .filter(Objects::nonNull) // 过滤掉 null 对象 + .filter(order -> Objects.nonNull(order.getPayMoney())) // 过滤掉 payMoney 为 null 的对象 + .mapToLong(RescueOrderInfo::getPayMoney) // 获取支付金额 + .sum(); // 计算总和 + //将分转为元 + map.put("value", (double)money / 100); + } + res.add(map); + } + return res; + } + + public DateTime getEndTime(String timeType, DateTime startTime){ + switch (timeType) { + case "day": + return DateUtil.endOfHour(startTime); + case "month": + return DateUtil.endOfDay(startTime); + case "year": + return DateUtil.endOfMonth(startTime); + } + return null; + } + + public List filterOrdersByDate(List orders, Date startDate, Date endDate) { + return orders.stream() + .filter(order -> order.getOrderTime() != null && + !order.getOrderTime().before(startDate) && + !order.getOrderTime().after(endDate)) + .collect(Collectors.toList()); + } }