功能修改

master
sunjianxi 1 year ago
parent cda41a7668
commit 2280a35d6b
  1. 99
      src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java
  2. 68
      src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java
  3. 30
      src/main/java/org/springblade/modules/business/contraller/supplies/ApplyController.java
  4. 84
      src/main/java/org/springblade/modules/business/contraller/supplies/ApplyGoodsPersonController.java
  5. 68
      src/main/java/org/springblade/modules/business/contraller/supplies/ApplyGoodsPersonDetailController.java
  6. 20
      src/main/java/org/springblade/modules/business/enums/MaintenanceStatusEnum.java
  7. 23
      src/main/java/org/springblade/modules/business/enums/WorkOrderStatusEnum.java
  8. 33
      src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonDetailMapper.java
  9. 26
      src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonDetailMapper.xml
  10. 32
      src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonMapper.java
  11. 24
      src/main/java/org/springblade/modules/business/mapper/ApplyGoodsPersonMapper.xml
  12. 1
      src/main/java/org/springblade/modules/business/pojo/dto/MaintenanceTaskDto.java
  13. 6
      src/main/java/org/springblade/modules/business/pojo/entity/MaintenanceTaskDetailGoods.java
  14. 1
      src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTaskDetail.java
  15. 3
      src/main/java/org/springblade/modules/business/pojo/entity/maintenance/RepairGoodsOutputData.java
  16. 83
      src/main/java/org/springblade/modules/business/pojo/entity/supplies/ApplyGoodsPerson.java
  17. 65
      src/main/java/org/springblade/modules/business/pojo/entity/supplies/ApplyGoodsPersonDetail.java
  18. 2
      src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderFillData.java
  19. 6
      src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderRepairMaterial.java
  20. 3
      src/main/java/org/springblade/modules/business/pojo/vo/workorder/WorkOrderVO.java
  21. 2
      src/main/java/org/springblade/modules/business/service/IWorkOrderService.java
  22. 1
      src/main/java/org/springblade/modules/business/service/impl/MaintenanceTaskDetailServiceImpl.java
  23. 48
      src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java
  24. 24
      src/main/java/org/springblade/modules/business/service/impl/supplies/ApplyGoodsPersonDetailServiceImpl.java
  25. 21
      src/main/java/org/springblade/modules/business/service/impl/supplies/ApplyGoodsPersonServiceImpl.java
  26. 15
      src/main/java/org/springblade/modules/business/service/supplies/IApplyGoodsPersonDetailService.java
  27. 15
      src/main/java/org/springblade/modules/business/service/supplies/IApplyGoodsPersonService.java
  28. BIN
      src/main/resources/excel/RepairService.xlsx
  29. BIN
      src/main/resources/excel/WorkOrderServiceSheet.xlsx

@ -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<String> 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<Dept> 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<MaintenanceTaskDetail> detailList = taskDto.getDetailList();
for(MaintenanceTaskDetail detail : detailList){
//更新物料信息
List<MaintenanceTaskDetailGoods> 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);
}
}

@ -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<IPage<WorkOrder>> page(WorkOrderDTO workOrderDTO, Query query) {
// 创建工作订单的查询条件包装器
LambdaQueryWrapper<WorkOrder> wrapper = Wrappers.lambdaQuery(WorkOrder.class);
//客服、维修负责人查询所属运维中心下所有实验室的需求提报
//客服、维修负责人、库管员查询所属运维中心下所有实验室的需求提报
BladeUser user = AuthUtil.getUser();
List<String> 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("");
}
}

@ -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)) {

@ -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<IPage<ApplyGoodsPerson>> list(ApplyGoodsPerson applyGoodsPerson, Query query) {
LambdaQueryWrapper<ApplyGoodsPerson> wrapper = Wrappers.lambdaQuery(ApplyGoodsPerson.class);
wrapper.eq(ApplyGoodsPerson::getUserId,applyGoodsPerson.getUserId());
IPage<ApplyGoodsPerson> 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);
}
}

@ -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<IPage<ApplyGoodsPersonDetail>> list(ApplyGoodsPersonDetail applyGoodsPersonDetail, Query query) {
LambdaQueryWrapper<ApplyGoodsPersonDetail> wrapper = Wrappers.lambdaQuery(ApplyGoodsPersonDetail.class);
wrapper.eq(ApplyGoodsPersonDetail::getProductCode,applyGoodsPersonDetail.getProductCode());
IPage<ApplyGoodsPersonDetail> 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);
}
}

@ -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;

@ -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;

@ -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<ApplyGoodsPersonDetail> {
}

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.modules.business.mapper.ApplyGoodsPersonDetailMapper">
<!-- 通用查询映射结果 -->
<resultMap id="applyGoodsPersonDetailResultMap" type="org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPersonDetail">
<result column="id" property="id"/>
<result column="order_id" property="orderId"/>
<result column="type" property="type"/>
<result column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
<result column="product_code" property="productCode"/>
<result column="product_name" property="productName"/>
<result column="num" property="num"/>
<result column="status" property="status"/>
<result column="create_user" property="createUser"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="create_dept" property="createDept"/>
<result column="update_user" property="updateUser"/>
<result column="is_deleted" property="isDeleted"/>
</resultMap>
</mapper>

@ -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<ApplyGoodsPerson> {
}

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.modules.business.mapper.ApplyGoodsPersonMapper">
<!-- 通用查询映射结果 -->
<resultMap id="applyGoodsPersonResultMap" type="org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPerson">
<result column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
<result column="product_code" property="productCode"/>
<result column="product_name" property="productName"/>
<result column="num" property="num"/>
<result column="status" property="status"/>
<result column="create_user" property="createUser"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="create_dept" property="createDept"/>
<result column="update_user" property="updateUser"/>
<result column="is_deleted" property="isDeleted"/>
</resultMap>
</mapper>

@ -51,4 +51,5 @@ public class MaintenanceTaskDto {
* 总价
*/
private Double totalPrice;
}

@ -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;
}

@ -148,4 +148,5 @@ public class MaintenanceTaskDetail extends BaseEntity {
*/
private String repairOption;
}

@ -23,4 +23,7 @@ public class RepairGoodsOutputData {
private Double totalPrice;
//实际使用数量
private Integer useNumber;
}

@ -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;
}

@ -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;
}

@ -20,4 +20,6 @@ public class WorkOrderFillData {
private Double price;
private Integer no;
private Integer useCount;
}

@ -67,4 +67,10 @@ public class WorkOrderRepairMaterial extends BaseEntity {
* 型号
*/
private String xh;
/**
* 实际使用数量
*/
private Integer useCount;
}

@ -62,4 +62,7 @@ public class WorkOrderVO extends WorkOrder {
* 评价意见
*/
private String evaluationRemarks;
private String type;
}

@ -102,4 +102,6 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
public void batchReportService(List<WorkOrder> workOrder, HttpServletResponse response) throws IOException;
public Map<String, Object> selectAverageFaultRepairTime(String startMonth, String endMonth);
public void servicemanWriteOffInventory(WorkOrderVO workOrder);
}

@ -413,6 +413,7 @@ public class MaintenanceTaskDetailServiceImpl extends BaseServiceImpl<Maintenanc
repairGoodsOutputData.setNo(no);
repairGoodsOutputData.setGoodsName(goods.getGoodsName());
repairGoodsOutputData.setNumber(goods.getNumber());
repairGoodsOutputData.setUseNumber(goods.getUseNumber());
repairGoodsOutputData.setPrice(goods.getPrice()/goods.getNumber());
repairGoodsOutputData.setTotalPrice(goods.getPrice());
repairGoodsList.add(repairGoodsOutputData);

@ -7,6 +7,7 @@ import com.alibaba.excel.metadata.data.ImageData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.aliyun.oss.ServiceException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.undertow.util.FileUtils;
@ -22,6 +23,7 @@ import org.springblade.common.cache.UserCache;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.utils.CommonDateUtil;
import org.springblade.common.utils.LogUtil;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.secure.BladeUser;
@ -32,13 +34,18 @@ import org.springblade.core.tool.utils.StringPool;
import org.springblade.modules.business.enums.WorkOrderStatusEnum;
import org.springblade.modules.business.excel.ImageExcelData;
import org.springblade.modules.business.excel.TemplateExcelUtils;
import org.springblade.modules.business.mapper.ApplyGoodsPersonMapper;
import org.springblade.modules.business.mapper.WorkOrderMapper;
import org.springblade.modules.business.pojo.entity.Device;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePersonnel;
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.*;
import org.springblade.modules.business.pojo.vo.PieStatVO;
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.system.pojo.entity.Dept;
import org.springblade.modules.system.pojo.entity.Role;
import org.springblade.modules.system.pojo.entity.User;
@ -93,6 +100,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final IRoleService roleService;
private final IApplyGoodsPersonService applyGoodsPersonService;
private final IApplyGoodsPersonDetailService applyGoodsPersonDetailService;
@Override
public WorkOrderVO detail(WorkOrder workOrder) {
WorkOrder detail = baseMapper.selectOne(Condition.getQueryWrapper(workOrder));
@ -437,6 +447,42 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return map;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void servicemanWriteOffInventory(WorkOrderVO workOrder) {
List<WorkOrderRepairMaterial> 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<WorkOrderMapper, WorkO
workOrderFillData.setNo(++no);
workOrderFillData.setMaterialName(workOrderRepairMaterial.getMaterialName());
workOrderFillData.setMaterialCount(workOrderRepairMaterial.getMaterialCount());
workOrderFillData.setUseCount(workOrderRepairMaterial.getUseCount());
workOrderFillData.setMaterialPrice(workOrderRepairMaterial.getMaterialPrice());
double price = workOrderRepairMaterial.getMaterialPrice() / workOrderRepairMaterial.getMaterialCount();
workOrderFillData.setPrice(price);
@ -743,6 +790,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workOrderFillData.setMaterialName(workOrderRepairMaterial.getMaterialName());
workOrderFillData.setMaterialCount(workOrderRepairMaterial.getMaterialCount());
workOrderFillData.setMaterialPrice(workOrderRepairMaterial.getMaterialPrice());
workOrderFillData.setUseCount(workOrderRepairMaterial.getUseCount());
double price = workOrderRepairMaterial.getMaterialPrice() / workOrderRepairMaterial.getMaterialCount();
workOrderFillData.setPrice(price);
workOrderFillDataList.add(workOrderFillData);

@ -0,0 +1,24 @@
package org.springblade.modules.business.service.impl.supplies;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.modules.business.mapper.ApplyGoodsPersonDetailMapper;
import org.springblade.modules.business.mapper.ApplyGoodsPersonMapper;
import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPerson;
import org.springblade.modules.business.pojo.entity.supplies.ApplyGoodsPersonDetail;
import org.springblade.modules.business.service.supplies.IApplyGoodsPersonDetailService;
import org.springblade.modules.business.service.supplies.IApplyGoodsPersonService;
import org.springframework.stereotype.Service;
/**
* 物品申领表明细 服务实现类
*
* @author BladeX
* @since 2024-10-17
*/
@Service
@AllArgsConstructor
public class ApplyGoodsPersonDetailServiceImpl extends BaseServiceImpl<ApplyGoodsPersonDetailMapper, ApplyGoodsPersonDetail> implements IApplyGoodsPersonDetailService {
}

@ -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<ApplyGoodsPersonMapper, ApplyGoodsPerson> implements IApplyGoodsPersonService {
}

@ -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<ApplyGoodsPersonDetail> {
}

@ -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<ApplyGoodsPerson> {
}
Loading…
Cancel
Save