diff --git a/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java b/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java index aa18903..96aa5e1 100644 --- a/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java +++ b/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java @@ -1,5 +1,6 @@ package org.springblade.modules.business.contraller; +import com.aliyun.oss.ServiceException; import com.aliyuncs.exceptions.ClientException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -15,7 +16,9 @@ import lombok.RequiredArgsConstructor; import org.springblade.common.cache.SysCache; import org.springblade.common.cache.UserCache; import org.springblade.common.constant.CommonConstant; +import org.springblade.common.utils.LogUtil; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; @@ -26,12 +29,20 @@ import org.springblade.core.tool.utils.CollectionUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.enums.MaintenanceStatusEnum; +import org.springblade.modules.business.enums.WorkOrderStatusEnum; import org.springblade.modules.business.pojo.dto.MaintenanceTaskDto; import org.springblade.modules.business.pojo.entity.MaintenanceTaskDetailGoods; import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTask; import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTaskDetail; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPerson; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPersonDetail; +import org.springblade.modules.business.pojo.entity.workorder.WorkOrder; +import org.springblade.modules.business.pojo.entity.workorder.WorkOrderRepairMaterial; +import org.springblade.modules.business.pojo.vo.workorder.WorkOrderVO; import org.springblade.modules.business.service.*; +import org.springblade.modules.business.service.supplies.IApplyGoodsPersonDetailService; +import org.springblade.modules.business.service.supplies.IApplyGoodsPersonService; import org.springblade.modules.business.sms.SmsService; import org.springblade.modules.system.pojo.entity.Dept; import org.springblade.modules.system.pojo.entity.User; @@ -70,6 +81,8 @@ public class MaintenanceController extends BladeController { private final IMessageService messageService; private final IUserService userService; private final IDeptService deptService; + private final IApplyGoodsPersonService applyGoodsPersonService; + private final IApplyGoodsPersonDetailService applyGoodsPersonDetailService; @Value("${sms.template-id2}") private String templateCode; @@ -317,7 +330,7 @@ public class MaintenanceController extends BladeController { } if (!user.getRoleName().contains("administrator") && !user.getRoleName().contains("admin")) { List deptIds = null; - if(user.getRoleName().equals("客服") || user.getRoleName().equals("维修负责人") || user.getRoleName().equals("维修人员")){ + if(user.getRoleName().equals("客服") || user.getRoleName().equals("维修负责人") || user.getRoleName().equals("维修人员") || user.getRoleName().equals("库管员")){ String deptId = user.getDeptId(); List deptList = deptService.list(Wrappers.lambdaQuery(Dept.class).eq(Dept::getParentId,deptId).eq(Dept::getIsDeleted,0)); if(CollectionUtil.isNotEmpty(deptList)){ @@ -377,7 +390,6 @@ public class MaintenanceController extends BladeController { } } taskDetailService.saveOrUpdate(maintenanceTaskDetail); - } return R.success(); } @@ -541,6 +553,88 @@ public class MaintenanceController extends BladeController { return R.success(); } + /** + * 客户确认普通维修效果 + */ + @ApiLog(value = "客户确认维修效果") + @PostMapping("/repair-customer-normal-repair-confirm") + public R customerNormalRepairConfirm(@RequestBody MaintenanceTask task) { + MaintenanceTask taskOld = taskService.getById(task.getId()); + taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_CUSTOMER_NORMAL_REPAIR_CONFIRM.getValue()); + taskService.updateById(taskOld); + + return R.success(); + } + + /** + * 维修人员核销库存,待维修主管审批 + */ + @ApiLog(value = "维修人员核销库存,待维修主管审批") + @PostMapping("/repair-serviceman-write-off-inventory") + public R RepairServicemanWriteOffInventory(@RequestBody MaintenanceTaskDto taskDto) { + MaintenanceTask task = taskDto.getTask(); + List detailList = taskDto.getDetailList(); + for(MaintenanceTaskDetail detail : detailList){ + //更新物料信息 + List detailGoods = detail.getDetailGoodsList(); + maintenanceApplyGoodsService.updateBatchById(detailGoods); + //根据物料信息,核销维修人员库存 + for(MaintenanceTaskDetailGoods detailGood : detailGoods){ + ApplyGoodsPerson applyGoodsPerson = applyGoodsPersonService.getOne(Wrappers.lambdaQuery(ApplyGoodsPerson.class).eq(ApplyGoodsPerson::getProductCode,detailGood.getWarehouseId()).eq(ApplyGoodsPerson::getUserId,task.getServicemanId()).eq(BaseEntity::getIsDeleted,0)); + if(applyGoodsPerson != null){ + if(applyGoodsPerson.getNum() - detailGood.getUseNumber() < 0){ + throw new ServiceException("物料"+detailGood.getGoodsName()+"库存不足,请申领后再核销!"); + } + applyGoodsPerson.setNum(applyGoodsPerson.getNum() - detailGood.getUseNumber()); + applyGoodsPersonService.updateById(applyGoodsPerson); + ApplyGoodsPersonDetail applyGoodsPersonDetail = new ApplyGoodsPersonDetail(); + applyGoodsPersonDetail.setOrderId(task.getId()); + applyGoodsPersonDetail.setType("2"); + applyGoodsPersonDetail.setUserId(applyGoodsPerson.getUserId()); + applyGoodsPersonDetail.setUserName(applyGoodsPerson.getUserName()); + applyGoodsPersonDetail.setProductCode(applyGoodsPerson.getProductCode()); + applyGoodsPersonDetail.setProductName(applyGoodsPerson.getProductName()); + applyGoodsPersonDetail.setNum(detailGood.getUseNumber()); + applyGoodsPersonDetailService.save(applyGoodsPersonDetail); + }else{ + throw new ServiceException("物料"+detailGood.getGoodsName()+"库存不足,请申领后再核销!"); + } + } + } + + MaintenanceTask taskOld = taskService.getById(task.getId()); + taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_SERVICEMAN_WRITE_OFF_INVENTORY.getValue()); + taskOld.setActualAmount(task.getActualAmount()); + taskService.updateById(taskOld); + + return R.success(); + } + + /** + * 维修主管审批库存 + */ + @ApiLog(value = "维修主管审批库存") + @PostMapping("/repair-supervisor-approve-inventory") + public R RepairSupervisorApproveInventory(@RequestBody MaintenanceTask task) { + MaintenanceTask taskOld = taskService.getById(task.getId()); + taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_SUPERVISOR_APPROVE_INVENTORY.getValue()); + taskService.updateById(taskOld); + + return R.success(); + } + + /** + * 维修主管审批库存 + */ + @ApiLog(value = "库管员审批库存") + @PostMapping("/repair-storeman-approve-inventory") + public R RepairStoremanApproveInventory(@RequestBody MaintenanceTask task) { + MaintenanceTask taskOld = taskService.getById(task.getId()); + taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_STOREMAN_APPROVE_INVENTORY.getValue()); + taskService.updateById(taskOld); + + return R.success(); + } /*---------- 维修方案结束 ----------*/ @@ -574,4 +668,5 @@ public class MaintenanceController extends BladeController { public void repairOutputService(@RequestBody MaintenanceTask task, HttpServletResponse response) throws IOException { taskDetailService.repairOutputService(task, response); } + } diff --git a/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java b/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java index 6c5b173..5fc7a67 100644 --- a/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java +++ b/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java @@ -29,6 +29,7 @@ import org.springblade.modules.business.pojo.dto.workorder.WorkOrderDTO; import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; import org.springblade.modules.business.pojo.entity.workorder.WorkOrder; import org.springblade.modules.business.pojo.entity.workorder.WorkOrderApproval; +import org.springblade.modules.business.pojo.entity.workorder.WorkOrderRepairMaterial; import org.springblade.modules.business.pojo.vo.workorder.WorkOrderVO; import org.springblade.modules.business.service.IMessageService; import org.springblade.modules.business.service.IWorkOrderApprovalService; @@ -87,7 +88,7 @@ public class WorkOrderController extends BladeController { public R> page(WorkOrderDTO workOrderDTO, Query query) { // 创建工作订单的查询条件包装器 LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(WorkOrder.class); - //客服、维修负责人查询所属运维中心下所有实验室的需求提报 + //客服、维修负责人、库管员查询所属运维中心下所有实验室的需求提报 BladeUser user = AuthUtil.getUser(); List deptIds; String deptId = user.getDeptId(); @@ -120,6 +121,11 @@ public class WorkOrderController extends BladeController { // 维修人员 wrapper.eq(WorkOrder::getRepairPerson, AuthUtil.getUserId()); break; + case "6": + // 库管员 + wrapper.ne(WorkOrder::getStatus, WorkOrderStatusEnum.KH_ORDER_DRAFT.getValue()); + wrapper.and(wrp -> wrp.in(WorkOrder::getReportUnit,deptIds).or().eq(WorkOrder::getReportUnit,user.getDeptId())); + break; default: log.error("数据权限设置失败"); return R.fail("数据权限设置失败"); @@ -640,7 +646,7 @@ public class WorkOrderController extends BladeController { workOrderOld.setApproveResult(workOrder.getApproveResult()); workOrderOld.setApproveTime(workOrder.getApproveTime()); workOrderOld.setApproveRemark(workOrder.getApproveRemark()); - workOrderOld.setStatus(WorkOrderStatusEnum.KH_REPAIR_CONFIRM.getValue()); + workOrderOld.setStatus(WorkOrderStatusEnum.KH_EMERGENCY_REPAIR_CONFIRM.getValue()); workOrderService.updateById(workOrderOld); WorkOrderApproval approval = new WorkOrderApproval(workOrder.getId(), AuthUtil.getUserId(), CommonConstant.TRUE_STR, DateUtil.now(), workOrder.getApproveRemark()); @@ -648,7 +654,7 @@ public class WorkOrderController extends BladeController { // todo 审核通过 //保存日志 - LogUtil.saveLog(workOrderOld.getRequirementCode(), WorkOrderStatusEnum.KH_REPAIR_CONFIRM.getName()); + LogUtil.saveLog(workOrderOld.getRequirementCode(), WorkOrderStatusEnum.KH_EMERGENCY_REPAIR_CONFIRM.getName()); //消息发送 messageService.saveMessage(workOrder.getRequirementCode(), "客户审核维修成果已通过,请尽快补填维修方案和物料相关", workOrder.getRepairPerson(), 2); @@ -717,4 +723,60 @@ public class WorkOrderController extends BladeController { LogUtil.saveLog(workOrder.getRequirementCode(),"维修人员撤回维修方案。"); return R.status(true); } + + /** + * 客户确认普通维修效果 + */ + @ApiLog(value = "提报管理-客户确认普通维修效果") + @PostMapping("/customer-normal-repair-confirm") + public R customerNormalRepairConfirm(@RequestBody WorkOrder workOrder) { + WorkOrder workOrderOld = workOrderService.getById(workOrder.getId()); + workOrderOld.setStatus(WorkOrderStatusEnum.KH_NORMAL_REPAIR_CONFIRM.getValue()); + //保存日志 + LogUtil.saveLog(workOrderOld.getRequirementCode(), WorkOrderStatusEnum.KH_NORMAL_REPAIR_CONFIRM.getName()); + workOrderService.updateById(workOrderOld); + + return R.success(""); + } + + /** + * 维修人员核销库存,待维修主管审批 + */ + @ApiLog(value = "提报管理-维修人员核销库存,待维修主管审批") + @PostMapping("/serviceman-write-off-inventory") + public R servicemanWriteOffInventory(@RequestBody WorkOrderVO workOrder) { + workOrderService.servicemanWriteOffInventory(workOrder); + return R.success(""); + } + + /** + * 维修主管审批库存 + */ + @ApiLog(value = "提报管理-维修主管审批库存") + @PostMapping("/supervisor-approve-inventory") + public R supervisorApproveInventory(@RequestBody WorkOrder workOrder) { + WorkOrder workOrderOld = workOrderService.getById(workOrder.getId()); + workOrderOld.setStatus(WorkOrderStatusEnum.ZG_APPROVE_INVENTORY.getValue()); + //保存日志 + LogUtil.saveLog(workOrderOld.getRequirementCode(), WorkOrderStatusEnum.ZG_APPROVE_INVENTORY.getName()); + workOrderService.updateById(workOrderOld); + + return R.success(""); + } + + /** + * 维修主管审批库存 + */ + @ApiLog(value = "提报管理-库管员审批库存") + @PostMapping("/storeman-approve-inventory") + public R storemanApproveInventory(@RequestBody WorkOrder workOrder) { + WorkOrder workOrderOld = workOrderService.getById(workOrder.getId()); + workOrderOld.setStatus(WorkOrderStatusEnum.KG_APPROVE_INVENTORY.getValue()); + //保存日志 + LogUtil.saveLog(workOrderOld.getRequirementCode(), WorkOrderStatusEnum.KG_APPROVE_INVENTORY.getName()); + workOrderService.updateById(workOrderOld); + + return R.success(""); + } + } diff --git a/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyController.java b/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyController.java index d7f65d2..00311d9 100644 --- a/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyController.java +++ b/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyController.java @@ -22,14 +22,10 @@ import org.springblade.core.tool.utils.CollectionUtil; import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.pojo.dto.supplies.ApplyDTO; import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; -import org.springblade.modules.business.pojo.entity.supplies.Apply; -import org.springblade.modules.business.pojo.entity.supplies.ApplyDetail; -import org.springblade.modules.business.pojo.entity.supplies.Goods; +import org.springblade.modules.business.pojo.entity.supplies.*; import org.springblade.modules.business.pojo.entity.workorder.WorkOrder; import org.springblade.modules.business.service.IWorkOrderService; -import org.springblade.modules.business.service.supplies.IApplyDetailService; -import org.springblade.modules.business.service.supplies.IApplyService; -import org.springblade.modules.business.service.supplies.IGoodsService; +import org.springblade.modules.business.service.supplies.*; import org.springblade.modules.system.pojo.entity.Dept; import org.springblade.modules.system.pojo.entity.User; import org.springblade.modules.system.service.IDeptService; @@ -57,6 +53,8 @@ public class ApplyController extends BladeController { private final IGoodsService goodsService; private final IWorkOrderService workOrderService; private final IDeptService deptService; + private final IApplyGoodsPersonService applyGoodsPersonService; + private final IApplyGoodsPersonDetailService applyGoodsPersonDetailService; /** * 物品申领表 详情 @@ -218,6 +216,7 @@ public class ApplyController extends BladeController { } goodsService.updateBatchById(goodsList); } + LogUtil.saveApplyLog(apply.getCode(),user.getRealName()+"审批通过!"); }else{ LogUtil.saveApplyLog(apply.getCode(),user.getRealName()+"审批驳回!"); @@ -258,6 +257,19 @@ public class ApplyController extends BladeController { applyDetail.setIsCk(1); applyDetail.setCkTime(new Date()); applyDetail.setOutNum(applyDetail.getApplyNum()); + //出库时,将对应的物品数量保存到维修人员的物品表中 + ApplyGoodsPerson applyGoodsPerson = applyGoodsPersonService.getOne(Wrappers.lambdaQuery(ApplyGoodsPerson.class).eq(ApplyGoodsPerson::getUserId,apply.getApplyUserId()).eq(ApplyGoodsPerson::getProductCode,applyDetail.getProductCode()).eq(BaseEntity::getIsDeleted,0)); + if(applyGoodsPerson != null){ + applyGoodsPerson.setNum(applyGoodsPerson.getNum() + applyDetail.getApplyNum()); + }else{ + applyGoodsPerson = new ApplyGoodsPerson(); + applyGoodsPerson.setUserId(apply.getApplyUserId()); + applyGoodsPerson.setUserName(apply.getApplyUser()); + applyGoodsPerson.setProductCode(applyDetail.getProductCode()); + applyGoodsPerson.setProductName(applyDetail.getProductName()); + applyGoodsPerson.setNum(applyDetail.getApplyNum()); + } + applyGoodsPersonService.saveOrUpdate(applyGoodsPerson); } if (CollectionUtil.isNotEmpty(detailList)) { @@ -283,11 +295,17 @@ public class ApplyController extends BladeController { applyDetail.setReturnTime(new Date()); applyDetail.setIsReturn(1); goods.setNum(goods.getNum() + applyDetail.getReturnNum()); + + ApplyGoodsPerson applyGoodsPerson = applyGoodsPersonService.getOne(Wrappers.lambdaQuery(ApplyGoodsPerson.class).eq(ApplyGoodsPerson::getUserId,apply.getApplyUserId()).eq(ApplyGoodsPerson::getProductCode,applyDetail.getProductCode()).eq(BaseEntity::getIsDeleted,0)); + applyGoodsPerson.setNum(applyGoodsPerson.getNum() - applyDetail.getReturnNum()); + applyGoodsPersonService.updateById(applyGoodsPerson); + break; } } } goodsService.updateBatchById(goodsList); + } if (CollectionUtil.isNotEmpty(detailList)) { diff --git a/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyGoodsPersonController.java b/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyGoodsPersonController.java new file mode 100644 index 0000000..c11fb1d --- /dev/null +++ b/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyGoodsPersonController.java @@ -0,0 +1,84 @@ +package org.springblade.modules.business.contraller.supplies; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.springblade.common.cache.DeptCache; +import org.springblade.common.cache.UserCache; +import org.springblade.common.utils.LogUtil; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.base.BaseEntity; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.modules.business.pojo.dto.supplies.ApplyDTO; +import org.springblade.modules.business.pojo.entity.supplies.Apply; +import org.springblade.modules.business.pojo.entity.supplies.ApplyDetail; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPerson; +import org.springblade.modules.business.pojo.entity.supplies.Goods; +import org.springblade.modules.business.pojo.entity.workorder.WorkOrder; +import org.springblade.modules.business.service.IWorkOrderService; +import org.springblade.modules.business.service.supplies.IApplyDetailService; +import org.springblade.modules.business.service.supplies.IApplyGoodsPersonService; +import org.springblade.modules.business.service.supplies.IApplyService; +import org.springblade.modules.business.service.supplies.IGoodsService; +import org.springblade.modules.system.pojo.entity.Dept; +import org.springblade.modules.system.pojo.entity.User; +import org.springblade.modules.system.service.IDeptService; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 物品申领表 控制器 + * + * @author BladeX + * @since 2024-10-17 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/applyGoodsPerson") +public class ApplyGoodsPersonController extends BladeController { + + private final IApplyGoodsPersonService applyGoodsPersonService; + private final IGoodsService goodsService; + + + + + /** + * 物品申领表 分页 + */ + @GetMapping("/list") + public R> list(ApplyGoodsPerson applyGoodsPerson, Query query) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(ApplyGoodsPerson.class); + wrapper.eq(ApplyGoodsPerson::getUserId,applyGoodsPerson.getUserId()); + IPage pages = applyGoodsPersonService.page(Condition.getPage(query), wrapper); + if(CollectionUtil.isNotEmpty(pages.getRecords())){ + pages.getRecords().forEach(item ->{ + Goods goods = goodsService.getOne(Wrappers.lambdaQuery(Goods.class).eq(Goods::getInventoryId,item.getProductCode()).eq(BaseEntity::getIsDeleted,0)); + item.setGoodsId(goods.getId()); + item.setBrand(goods.getBrand()); + item.setXh(goods.getXh()); + item.setUnit(goods.getUnit()); + item.setRule(goods.getRule()); + item.setRemark(goods.getRemark()); + }); + } + return R.data(pages); + } + +} diff --git a/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyGoodsPersonDetailController.java b/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyGoodsPersonDetailController.java new file mode 100644 index 0000000..67b7497 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/contraller/supplies/ApplyGoodsPersonDetailController.java @@ -0,0 +1,68 @@ +package org.springblade.modules.business.contraller.supplies; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.AllArgsConstructor; +import org.springblade.common.cache.SysCache; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.base.BaseEntity; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTask; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPerson; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPersonDetail; +import org.springblade.modules.business.pojo.entity.workorder.WorkOrder; +import org.springblade.modules.business.service.IMaintenanceTaskService; +import org.springblade.modules.business.service.IWorkOrderService; +import org.springblade.modules.business.service.supplies.IApplyGoodsPersonDetailService; +import org.springblade.modules.business.service.supplies.IApplyGoodsPersonService; +import org.springblade.modules.system.pojo.entity.Dept; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 物品申领表 控制器 + * + * @author BladeX + * @since 2024-10-17 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/applyGoodsPersonDetail") +public class ApplyGoodsPersonDetailController extends BladeController { + + private final IApplyGoodsPersonDetailService applyGoodsPersonDetailService; + private final IWorkOrderService workOrderService; + private final IMaintenanceTaskService maintenanceTaskService; + + + /** + * 物品申领表 分页 + */ + @GetMapping("/list") + public R> list(ApplyGoodsPersonDetail applyGoodsPersonDetail, Query query) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(ApplyGoodsPersonDetail.class); + wrapper.eq(ApplyGoodsPersonDetail::getProductCode,applyGoodsPersonDetail.getProductCode()); + IPage pages = applyGoodsPersonDetailService.page(Condition.getPage(query), wrapper); + if(CollectionUtil.isNotEmpty(pages.getRecords())){ + pages.getRecords().forEach(item ->{ + if("1".equals(item.getType())){ + WorkOrder workorder = workOrderService.getOne(Wrappers.lambdaQuery(WorkOrder.class).eq(BaseEntity::getId,item.getOrderId()).eq(BaseEntity::getIsDeleted,0)); + item.setRequirementCode(workorder.getRequirementCode()); + item.setRequirementUnit(SysCache.getDeptName(Long.parseLong(workorder.getReportUnit()))); + }else{ + MaintenanceTask task = maintenanceTaskService.getOne(Wrappers.lambdaQuery(MaintenanceTask.class).eq(BaseEntity::getId,item.getOrderId()).eq(BaseEntity::getIsDeleted,0)); + item.setRequirementCode(task.getTaskCode()); + item.setRequirementUnit(task.getDeptName()); + } + + }); + } + return R.data(pages); + } + +} diff --git a/src/main/java/org/springblade/modules/business/enums/MaintenanceStatusEnum.java b/src/main/java/org/springblade/modules/business/enums/MaintenanceStatusEnum.java index fa3de66..9a7c544 100644 --- a/src/main/java/org/springblade/modules/business/enums/MaintenanceStatusEnum.java +++ b/src/main/java/org/springblade/modules/business/enums/MaintenanceStatusEnum.java @@ -78,6 +78,26 @@ public enum MaintenanceStatusEnum { * 客服确认开发票 */ REPAIR_INVOICE(8), + + /** + * 客户确认维修效果 + */ + REPAIR_CUSTOMER_NORMAL_REPAIR_CONFIRM(9), + + /** + * 维修人员核销库存 + */ + REPAIR_SERVICEMAN_WRITE_OFF_INVENTORY(10), + + /** + * 维修主管进行神品 + */ + REPAIR_SUPERVISOR_APPROVE_INVENTORY(11), + + /** + * 库管员审批库存 + */ + REPAIR_STOREMAN_APPROVE_INVENTORY(12), ; final int value; diff --git a/src/main/java/org/springblade/modules/business/enums/WorkOrderStatusEnum.java b/src/main/java/org/springblade/modules/business/enums/WorkOrderStatusEnum.java index ef97ee4..0005f5b 100644 --- a/src/main/java/org/springblade/modules/business/enums/WorkOrderStatusEnum.java +++ b/src/main/java/org/springblade/modules/business/enums/WorkOrderStatusEnum.java @@ -41,7 +41,12 @@ public enum WorkOrderStatusEnum { /** * 客户确认维修效果 */ - KH_REPAIR_CONFIRM(105,"客户确认维修效果"), + KH_EMERGENCY_REPAIR_CONFIRM(105,"客户确认紧急维修效果"), + + /** + * 客户确认维修效果 + */ + KH_NORMAL_REPAIR_CONFIRM(106,"客户确认维修效果"), @@ -89,6 +94,11 @@ public enum WorkOrderStatusEnum { */ ZG_REPAIR_PLAN_PASS(301,"主管审批通过,待客户审批"), + /** + * 维修主管审批库存 + */ + ZG_APPROVE_INVENTORY(302,"维修主管审批库存"), + // ---------------------------------- 维修人员以4开头 /** * 维修人员拒绝工单, 待客服处理 @@ -125,6 +135,17 @@ public enum WorkOrderStatusEnum { * 维修人员补填维修方案 */ WX_REPAIR_PLAN_SUBMIT_AFTER(406,"维修人员补填维修方案"), + + /** + * 维修人员核销库存,待维修主管审批 + */ + WX_REPAIR_WRITE_OFF_INVENTORY(407,"维修人员核销库存,待维修主管审批"), + + // ---------------------------------- 库管员以5开头 + /** + * 库管员审批库存 + */ + KG_APPROVE_INVENTORY(501,"库管员审批库存"), ; final int value; diff --git a/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonDetailMapper.java b/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonDetailMapper.java new file mode 100644 index 0000000..0680a68 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonDetailMapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 庄骞 (smallchill@163.com) + */ +package org.springblade.modules.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPerson; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPersonDetail; + +/** + * 物品申领表明细 Mapper 接口 + * + * @author BladeX + * @since 2024-10-17 + */ +public interface ApplyGoodsPersonDetailMapper extends BaseMapper { + + + +} diff --git a/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonDetailMapper.xml b/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonDetailMapper.xml new file mode 100644 index 0000000..99b3481 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonDetailMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonMapper.java b/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonMapper.java new file mode 100644 index 0000000..778ad41 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonMapper.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 庄骞 (smallchill@163.com) + */ +package org.springblade.modules.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPerson; + +/** + * 物品申领表明细 Mapper 接口 + * + * @author BladeX + * @since 2024-10-17 + */ +public interface ApplyGoodsPersonMapper extends BaseMapper { + + + +} diff --git a/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonMapper.xml b/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonMapper.xml new file mode 100644 index 0000000..275fef7 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/springblade/modules/business/pojo/dto/MaintenanceTaskDto.java b/src/main/java/org/springblade/modules/business/pojo/dto/MaintenanceTaskDto.java index f8fc8f3..0b775a5 100644 --- a/src/main/java/org/springblade/modules/business/pojo/dto/MaintenanceTaskDto.java +++ b/src/main/java/org/springblade/modules/business/pojo/dto/MaintenanceTaskDto.java @@ -51,4 +51,5 @@ public class MaintenanceTaskDto { * 总价 */ private Double totalPrice; + } diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/MaintenanceTaskDetailGoods.java b/src/main/java/org/springblade/modules/business/pojo/entity/MaintenanceTaskDetailGoods.java index 4e8701d..6ba690a 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/MaintenanceTaskDetailGoods.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/MaintenanceTaskDetailGoods.java @@ -3,6 +3,8 @@ package org.springblade.modules.business.pojo.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.poi.hpsf.Decimal; @@ -40,5 +42,9 @@ public class MaintenanceTaskDetailGoods extends BaseEntity { private Long parentId; + //实际使用数量 + @JsonSerialize(nullsUsing = NullSerializer.class) + private Integer useNumber; + } diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTaskDetail.java b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTaskDetail.java index 4657912..02004bd 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTaskDetail.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTaskDetail.java @@ -148,4 +148,5 @@ public class MaintenanceTaskDetail extends BaseEntity { */ private String repairOption; + } diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/RepairGoodsOutputData.java b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/RepairGoodsOutputData.java index c0c238c..35f2d07 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/RepairGoodsOutputData.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/RepairGoodsOutputData.java @@ -23,4 +23,7 @@ public class RepairGoodsOutputData { private Double totalPrice; + //实际使用数量 + private Integer useNumber; + } diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/supplies/ApplyGoodsPerson.java b/src/main/java/org/springblade/modules/business/pojo/entity/supplies/ApplyGoodsPerson.java new file mode 100644 index 0000000..86c32c3 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/pojo/entity/supplies/ApplyGoodsPerson.java @@ -0,0 +1,83 @@ +package org.springblade.modules.business.pojo.entity.supplies; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 物品申领表明细 实体类 + * + * @author BladeX + * @since 2024-10-17 + */ +@Data +@TableName("lab_apply_goods_person") +@EqualsAndHashCode(callSuper = true) +public class ApplyGoodsPerson extends BaseEntity { + + /** + * + */ + private Long userId; + /** + * + */ + private String userName; + /** + * + */ + private String productCode; + + /** + * + */ + private String productName; + + /** + * + */ + private Integer num; + + + /** + * 单位 + */ + @TableField(exist = false) + private String unit; + + /** + * 物品型号 + */ + @TableField(exist = false) + private String xh; + + /** + * 品牌 + */ + @TableField(exist = false) + private String brand; + + /** + * 备注 + */ + @TableField(exist = false) + private String remark; + + /** + * 物品规格 + */ + @TableField(exist = false) + private String rule; + + /** + * 物品规格 + */ + @TableField(exist = false) + private long goodsId; +} diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/supplies/ApplyGoodsPersonDetail.java b/src/main/java/org/springblade/modules/business/pojo/entity/supplies/ApplyGoodsPersonDetail.java new file mode 100644 index 0000000..7ef75f3 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/pojo/entity/supplies/ApplyGoodsPersonDetail.java @@ -0,0 +1,65 @@ +package org.springblade.modules.business.pojo.entity.supplies; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +/** + * 物品申领表明细 实体类 + * + * @author BladeX + * @since 2024-10-17 + */ +@Data +@TableName("lab_apply_goods_person_detail") +@EqualsAndHashCode(callSuper = true) +public class ApplyGoodsPersonDetail extends BaseEntity { + /** + * + */ + private Long orderId; + + /** + * + */ + private String type; + + /** + * + */ + private Long userId; + /** + * + */ + private String userName; + /** + * + */ + private String productCode; + + /** + * + */ + private String productName; + + /** + * + */ + private Integer num; + + + /** + * 需求单号 + */ + @TableField(exist = false) + private String requirementCode; + + /** + * 提报单位 + */ + @TableField(exist = false) + private String requirementUnit; + +} diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderFillData.java b/src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderFillData.java index 1ffe4ad..90b4b60 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderFillData.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderFillData.java @@ -20,4 +20,6 @@ public class WorkOrderFillData { private Double price; private Integer no; + + private Integer useCount; } diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderRepairMaterial.java b/src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderRepairMaterial.java index 4642772..e9a109f 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderRepairMaterial.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderRepairMaterial.java @@ -67,4 +67,10 @@ public class WorkOrderRepairMaterial extends BaseEntity { * 型号 */ private String xh; + + + /** + * 实际使用数量 + */ + private Integer useCount; } diff --git a/src/main/java/org/springblade/modules/business/pojo/vo/workorder/WorkOrderVO.java b/src/main/java/org/springblade/modules/business/pojo/vo/workorder/WorkOrderVO.java index eb1cc81..29f16b9 100644 --- a/src/main/java/org/springblade/modules/business/pojo/vo/workorder/WorkOrderVO.java +++ b/src/main/java/org/springblade/modules/business/pojo/vo/workorder/WorkOrderVO.java @@ -62,4 +62,7 @@ public class WorkOrderVO extends WorkOrder { * 评价意见 */ private String evaluationRemarks; + + + private String type; } diff --git a/src/main/java/org/springblade/modules/business/service/IWorkOrderService.java b/src/main/java/org/springblade/modules/business/service/IWorkOrderService.java index 0a6281f..6a762cf 100644 --- a/src/main/java/org/springblade/modules/business/service/IWorkOrderService.java +++ b/src/main/java/org/springblade/modules/business/service/IWorkOrderService.java @@ -102,4 +102,6 @@ public interface IWorkOrderService extends BaseService { public void batchReportService(List workOrder, HttpServletResponse response) throws IOException; public Map selectAverageFaultRepairTime(String startMonth, String endMonth); + + public void servicemanWriteOffInventory(WorkOrderVO workOrder); } diff --git a/src/main/java/org/springblade/modules/business/service/impl/MaintenanceTaskDetailServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/MaintenanceTaskDetailServiceImpl.java index c882b12..4259d0d 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/MaintenanceTaskDetailServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/MaintenanceTaskDetailServiceImpl.java @@ -413,6 +413,7 @@ public class MaintenanceTaskDetailServiceImpl extends BaseServiceImpl materials = workOrder.getMaterials(); + //更新物料信息 + workOrderRepairMaterialService.updateBatchById(materials); + //根据物料信息,核销维修人员库存 + for(WorkOrderRepairMaterial material : materials){ + ApplyGoodsPerson applyGoodsPerson = applyGoodsPersonService.getOne(Wrappers.lambdaQuery(ApplyGoodsPerson.class).eq(ApplyGoodsPerson::getProductCode,material.getInventoryId()).eq(ApplyGoodsPerson::getUserId,workOrder.getRepairPerson()).eq(BaseEntity::getIsDeleted,0)); + if(applyGoodsPerson != null){ + applyGoodsPerson.setNum(applyGoodsPerson.getNum() - material.getUseCount()); + applyGoodsPersonService.updateById(applyGoodsPerson); + ApplyGoodsPersonDetail applyGoodsPersonDetail = new ApplyGoodsPersonDetail(); + applyGoodsPersonDetail.setOrderId(workOrder.getId()); + applyGoodsPersonDetail.setType("1"); + applyGoodsPersonDetail.setUserId(applyGoodsPerson.getUserId()); + applyGoodsPersonDetail.setUserName(applyGoodsPerson.getUserName()); + applyGoodsPersonDetail.setProductCode(applyGoodsPerson.getProductCode()); + applyGoodsPersonDetail.setProductName(applyGoodsPerson.getProductName()); + applyGoodsPersonDetail.setNum(material.getUseCount()); + applyGoodsPersonDetailService.save(applyGoodsPersonDetail); + }else{ + throw new ServiceException("物料"+material.getMaterialName()+"库存不足,请申领后再核销!"); + } + } + + WorkOrder workOrderOld = baseMapper.selectById(workOrder.getId()); + workOrderOld.setStatus(WorkOrderStatusEnum.WX_REPAIR_WRITE_OFF_INVENTORY.getValue()); + workOrderOld.setTotalCost(workOrder.getTotalCost()); + workOrderOld.setDiscountPrice(workOrder.getDiscountPrice()); + workOrderOld.setTotalPrice(workOrder.getTotalPrice()); + //保存日志 + LogUtil.saveLog(workOrderOld.getRequirementCode(), WorkOrderStatusEnum.WX_REPAIR_WRITE_OFF_INVENTORY.getName()); + baseMapper.updateById(workOrderOld); + } + @Transactional(rollbackFor = Exception.class) @Override public void repairPlanRefuse(WorkOrder workOrder) { @@ -614,6 +660,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl implements IApplyGoodsPersonDetailService { + + +} diff --git a/src/main/java/org/springblade/modules/business/service/impl/supplies/ApplyGoodsPersonServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/supplies/ApplyGoodsPersonServiceImpl.java new file mode 100644 index 0000000..9c22680 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/impl/supplies/ApplyGoodsPersonServiceImpl.java @@ -0,0 +1,21 @@ +package org.springblade.modules.business.service.impl.supplies; + +import lombok.AllArgsConstructor; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.modules.business.mapper.ApplyGoodsPersonMapper; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPerson; +import org.springblade.modules.business.service.supplies.IApplyGoodsPersonService; +import org.springframework.stereotype.Service; + +/** + * 物品申领表明细 服务实现类 + * + * @author BladeX + * @since 2024-10-17 + */ +@Service +@AllArgsConstructor +public class ApplyGoodsPersonServiceImpl extends BaseServiceImpl implements IApplyGoodsPersonService { + + +} diff --git a/src/main/java/org/springblade/modules/business/service/supplies/IApplyGoodsPersonDetailService.java b/src/main/java/org/springblade/modules/business/service/supplies/IApplyGoodsPersonDetailService.java new file mode 100644 index 0000000..a45fd4d --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/supplies/IApplyGoodsPersonDetailService.java @@ -0,0 +1,15 @@ +package org.springblade.modules.business.service.supplies; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPersonDetail; + +/** + * 维修人员物品表 服务类 + * + * @author BladeX + * @since 2024-10-17 + */ +public interface IApplyGoodsPersonDetailService extends BaseService { + + +} diff --git a/src/main/java/org/springblade/modules/business/service/supplies/IApplyGoodsPersonService.java b/src/main/java/org/springblade/modules/business/service/supplies/IApplyGoodsPersonService.java new file mode 100644 index 0000000..6e7be4b --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/supplies/IApplyGoodsPersonService.java @@ -0,0 +1,15 @@ +package org.springblade.modules.business.service.supplies; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPerson; + +/** + * 维修人员物品表 服务类 + * + * @author BladeX + * @since 2024-10-17 + */ +public interface IApplyGoodsPersonService extends BaseService { + + +} diff --git a/src/main/resources/excel/RepairService.xlsx b/src/main/resources/excel/RepairService.xlsx index 7c16921..3264c83 100644 Binary files a/src/main/resources/excel/RepairService.xlsx and b/src/main/resources/excel/RepairService.xlsx differ diff --git a/src/main/resources/excel/WorkOrderServiceSheet.xlsx b/src/main/resources/excel/WorkOrderServiceSheet.xlsx index 41d56d1..da88c88 100644 Binary files a/src/main/resources/excel/WorkOrderServiceSheet.xlsx and b/src/main/resources/excel/WorkOrderServiceSheet.xlsx differ