服务顾问通知取车前的完成前的编辑工单

This commit is contained in:
xiaofajia 2024-10-24 20:27:15 +08:00
parent 7ec5a905c5
commit 9ae8344f10
6 changed files with 240 additions and 8 deletions

View File

@ -308,5 +308,19 @@ public class DlRepairTicketsController {
dlRepairTicketsService.noticeCus(noticeCusVO);
return CommonResult.ok();
}
/**
* 新增工单子项
*
* @author 小李
* @date 19:59 2024/10/24
* @param respVO 主要有两个参数主表ID,itemList(这个需要前端处理成子表的对象能接收的数据)
**/
@PostMapping("/addItems")
@Operation(summary = "新增工单子项")
public CommonResult<?> addItems(@RequestBody DlRepairTicketsRespVO respVO) {
dlRepairTicketsService.addItems(respVO);
return CommonResult.ok();
}
}

View File

@ -69,5 +69,45 @@ public class DlRepairTitemController {
public CommonResult<?> updateRepairAndSale(@RequestBody DlRepairTitemReqVO dlRepairTitemReqVO){
return success(dlRepairTitemService.updateRepairAndSale(dlRepairTitemReqVO));
}
/**
* 查看单个维修子表的数据
*
* @author 小李
* @param id 子表ID
**/
@GetMapping("/getById")
@Operation(summary = "查看单个维修子表的数据")
public CommonResult<?> getItemById(@RequestParam("id") String id){
return success(dlRepairTitemService.getItemById(id));
}
/**
* 修改单个工单子项的内容
*
* @author 小李
* @date 15:41 2024/10/24
* @param dlRepairTitemReqVO 对象
**/
@PostMapping("/updateById")
@Operation(summary = "修改单个工单子项的内容")
public CommonResult<?> updateItemById(@RequestBody DlRepairTitemReqVO dlRepairTitemReqVO){
dlRepairTitemService.updateItemById(dlRepairTitemReqVO);
return CommonResult.ok();
}
/**
* 维修工单单个子项
*
* @author 小李
* @date 20:18 2024/10/24
* @param id 工单子项ID
**/
@DeleteMapping("/removeById")
@Operation(summary = "维修工单单个子项")
public CommonResult<?> removeItemById(@RequestParam("id") String id){
dlRepairTitemService.removeItemById(id);
return CommonResult.ok();
}
}

View File

@ -173,4 +173,22 @@ public interface DlRepairTicketsService extends IService<DlRepairTickets> {
* @param noticeCusVO 请求对象
**/
void noticeCus(NoticeCusVO noticeCusVO);
/**
* 重新计算工单的一些数值
*
* @author 小李
* @date 15:47 2024/10/24
* @param ticketId 工单ID
**/
boolean computeTicket(String ticketId);
/**
* 新增工单子项
*
* @author 小李
* @date 19:59 2024/10/24
* @param respVO 主要有两个参数主表ID,itemList(这个需要前端处理成子表的对象能接收的数据)
**/
void addItems(DlRepairTicketsRespVO respVO);
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.tickets.service;
import cn.iocoder.yudao.module.tickets.entity.DlRepairTitem;
import cn.iocoder.yudao.module.tickets.vo.DlRepairTitemReqVO;
import cn.iocoder.yudao.module.tickets.vo.DlRepairTitemRespVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -41,4 +42,29 @@ public interface DlRepairTitemService extends IService<DlRepairTitem> {
*/
DlRepairTitem updateRepairAndSale(DlRepairTitem dlRepairTitem);
/**
* 查看单个维修子表的数据
*
* @author 小李
* @param id 子表ID
**/
DlRepairTitem getItemById(String id);
/**
* 修改单个工单子项的内容
*
* @author 小李
* @date 15:41 2024/10/24
* @param dlRepairTitemReqVO 对象
**/
void updateItemById(DlRepairTitemReqVO dlRepairTitemReqVO);
/**
* 维修工单单个子项
*
* @author 小李
* @date 20:18 2024/10/24
* @param id 工单子项ID
**/
void removeItemById(String id);
}

View File

@ -187,10 +187,10 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
// 新增子表
itemList.forEach(item -> {
item.setTicketId(ticketsRespVO.getId());
if("01".equals(item.getItemType())){
if ("01".equals(item.getItemType())) {
//维修项目,初始状态待派工
item.setItemStatus(TicketsItemStatusEnum.WAITING_WORK.getCode());
}else if("02".equals(item.getItemType())){
} else if ("02".equals(item.getItemType())) {
//维修配件初始状态待领料
item.setItemStatus(TicketsItemStatusEnum.WAITING_RECEIVE.getCode());
}
@ -432,13 +432,13 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
String userRoleCode = getUserRole();
if (userRoleCode.equals(RepairRoleEnum.ADMIN.getCode())) {
//维修管理员和总检看所有数据
} else if(userRoleCode.equals(RepairRoleEnum.INSPECTION.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())) {
} else if (userRoleCode.equals(RepairRoleEnum.ADVISOR.getCode())) {
//服务顾问看自己的
repairTicketsReqVO.setAdviserId(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
} else if (userRoleCode.equals(RepairRoleEnum.REPAIR_STAFF.getCode())) {
@ -572,9 +572,9 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
@DSTransactional
public void updateStatus(DlRepairTicketsRespVO respVO) {
// 如果是开始施工但项目还在施工中就不能施工
if (RecordTypeEnum.KSSG.getCode().equals(respVO.getRecordType())){
if (RecordTypeEnum.KSSG.getCode().equals(respVO.getRecordType())) {
DlRepairTitem titem = titemService.getById(respVO.getItem().getId());
if (TicketsItemStatusEnum.WORKING.getCode().equals(titem.getItemStatus())){
if (TicketsItemStatusEnum.WORKING.getCode().equals(titem.getItemStatus())) {
throw exception0(500, "选择的项目在施工中,不能重新开始施工");
}
}
@ -616,7 +616,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
String message = createMessage(tickets.getNowRepairName(), tickets.getTicketNo(), titem.getItemName(), respVO.getRecordType(), respVO.getFinishType(), respVO.getNextName());
// 通知服务顾问
// 如果员工完成了订单
if (RecordTypeEnum.SGWCZJ.getCode().equals(respVO.getRecordType())&& "03".equals(respVO.getFinishType())) {
if (RecordTypeEnum.SGWCZJ.getCode().equals(respVO.getRecordType()) && "03".equals(respVO.getFinishType())) {
repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), "您有新的工单可以出厂检验");
// 需要把工单的当前操作人移交服务顾问
baseMapper.update(new LambdaUpdateWrapper<DlRepairTickets>()
@ -792,7 +792,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
.filter(item -> item.getValue().equals(tickets.getRepairType()))
.findFirst()
.orElse(null);
if (dictDataRespDTO != null){
if (dictDataRespDTO != null) {
type = dictDataRespDTO.getLabel();
}
// 构建消息
@ -804,6 +804,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
, tickets.getCarNo(), type, start, end, noticeCusVO.getName(), noticeCusVO.getMobile()
);
// todo 小程序通知客户
// todo 短信通知客户
// 记录日志
String recordStr = noticeCusVO.getName()
@ -816,6 +817,72 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
+ "前来取车";
repairRecordsService.saveRepairRecord(noticeCusVO.getId(), null, RecordTypeEnum.JSGD.getCode(), recordStr, null);
}
/**
* 重新计算工单的一些数值
*
* @param ticketId 工单ID
* @author 小李
* @date 15:47 2024/10/24
**/
@Override
public boolean computeTicket(String ticketId) {
// 查子表
List<DlRepairTitem> list = titemService.list(new LambdaQueryWrapper<DlRepairTitem>().eq(DlRepairTitem::getTicketId, ticketId));
// 计算
DlRepairTickets tickets = new DlRepairTickets();
// 计算子项总数
int count = list.stream().mapToInt(DlRepairTitem::getItemCount).sum();
tickets.setId(ticketId);
tickets.setCount(count);
// 分类计算各自的总价和最终工单总价
Map<String, List<DlRepairTitem>> map = list.stream().collect(Collectors.groupingBy(DlRepairTitem::getItemType));
// 01项目02配件03其他
tickets.setTotalPrice(BigDecimal.ZERO);
map.forEach((k, v) -> {
BigDecimal reduce = v.stream().map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
tickets.setTotalPrice(tickets.getTotalPrice().add(reduce));
if (k.equals("01")) {
tickets.setProjectPrice(reduce);
} else if (k.equals("02")) {
tickets.setPartPrice(reduce);
} else if (k.equals("03")) {
tickets.setOtherPrice(reduce);
}
});
return baseMapper.updateById(tickets) > 0;
}
/**
* 新增工单子项
*
* @author 小李
* @date 19:59 2024/10/24
* @param respVO 主要有两个参数主表ID,itemList(这个需要前端处理成子表的对象能接收的数据)
**/
@Override
@DSTransactional
public void addItems(DlRepairTicketsRespVO respVO){
// 先判断是否施工人员和销售人员是否都设置了
respVO.getItemList().forEach(item -> {
if (ObjectUtil.isEmpty(item.getRepairIds())){
throw exception0(500, "施工人员尚未设置");
}
if (ObjectUtil.isEmpty(item.getSaleId())){
throw exception0(500, "销售人员尚未设置");
}
});
// 新增子表
List<DlRepairTitem> itemList = respVO.getItemList();
itemList.forEach(item -> item.setTicketId(respVO.getId()));
titemService.saveBatch(itemList);
// 更新主表
boolean flag = computeTicket(respVO.getId());
if (!flag){
throw exception0(500, "系统错误");
}
}
}

View File

@ -2,16 +2,23 @@ package cn.iocoder.yudao.module.tickets.service.impl;
import cn.iocoder.yudao.module.tickets.entity.DlRepairTitem;
import cn.iocoder.yudao.module.tickets.mapper.DlRepairTitemMapper;
import cn.iocoder.yudao.module.tickets.service.DlRepairTicketsService;
import cn.iocoder.yudao.module.tickets.service.DlRepairTitemService;
import cn.iocoder.yudao.module.tickets.vo.DlRepairTitemReqVO;
import cn.iocoder.yudao.module.tickets.vo.DlRepairTitemRespVO;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0;
/**
* 针对表dl_repair_titem(维修工单子表)的数据库操作Service实现
*
@ -22,6 +29,9 @@ import java.util.List;
public class DlRepairTitemServiceImpl extends ServiceImpl<DlRepairTitemMapper, DlRepairTitem>
implements DlRepairTitemService {
@Resource
private DlRepairTicketsService repairTicketsService;
/**
* 维修工单子表 分页
*
@ -60,6 +70,63 @@ public class DlRepairTitemServiceImpl extends ServiceImpl<DlRepairTitemMapper, D
baseMapper.updateRepairAndSale(dlRepairTitem);
return dlRepairTitem;
}
/**
* 查看单个维修子表的数据
*
* @author 小李
* @param id 子表ID
**/
@Override
public DlRepairTitem getItemById(String id){
return baseMapper.selectById(id);
}
/**
* 修改单个工单子项的内容
*
* @author 小李
* @date 15:41 2024/10/24
* @param dlRepairTitemReqVO 对象
**/
@Override
@DSTransactional
public void updateItemById(DlRepairTitemReqVO dlRepairTitemReqVO){
// 更新工单子表
DlRepairTitem titem = new DlRepairTitem();
titem.setId(dlRepairTitemReqVO.getId());
titem.setItemCount(dlRepairTitemReqVO.getItemCount());
titem.setItemPrice(dlRepairTitemReqVO.getItemPrice());
titem.setItemDiscount(dlRepairTitemReqVO.getItemDiscount());
// 计算总价
BigDecimal total = titem.getItemPrice().multiply(BigDecimal.valueOf(titem.getItemCount())).multiply(titem.getItemDiscount());
titem.setItemMoney(total);
baseMapper.updateById(titem);
// 重新计算工单的一些数值
boolean flag = repairTicketsService.computeTicket(dlRepairTitemReqVO.getTicketId());
if (!flag){
throw exception0(500, "系统异常");
}
}
/**
* 维修工单单个子项
*
* @author 小李
* @date 20:18 2024/10/24
* @param id 工单子项ID
**/
@Override
@DSTransactional
public void removeItemById(String id){
// 先查出来备用
DlRepairTitem titem = baseMapper.selectById(id);
// 删除数据
baseMapper.deleteById(id);
// 更新主表
repairTicketsService.computeTicket(titem.getTicketId());
}
}