diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/MaterialDetailController.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/MaterialDetailController.java index 4b2d08b..d4d92d9 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/MaterialDetailController.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/MaterialDetailController.java @@ -101,4 +101,17 @@ public class MaterialDetailController { BeanUtils.toBean(list, MaterialDetailRespVO.class)); } -} \ No newline at end of file + /** + * 批量创建物料明细 + * @param materialDetailSaveReqVOs 物料明细保存请求列表 + * @return 统一响应结果 + */ + @PostMapping("/batch-create") + @Operation(summary = "批量创建工单耗材明细") + @PreAuthorize("@ss.hasPermission('workorder:material-detail:create')") + public CommonResult batchCreateMaterialDetail( + @RequestBody @Valid List materialDetailSaveReqVOs) { + return success(materialDetailService.batchCreateMaterialDetail(materialDetailSaveReqVOs)); + } + +} diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailSaveReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailSaveReqVO.java index fd21287..add5ea8 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailSaveReqVO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailSaveReqVO.java @@ -16,14 +16,6 @@ public class MaterialDetailSaveReqVO { @NotEmpty(message = "工单号不能为空") private String orderNo; - @Schema(description = "提交用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10300") - @NotNull(message = "提交用户ID不能为空") - private Long userId; - - @Schema(description = "提交用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") - @NotEmpty(message = "提交用户名称不能为空") - private String userName; - @Schema(description = "种类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27821") @NotNull(message = "种类ID不能为空") private Long classifyId; @@ -60,7 +52,17 @@ public class MaterialDetailSaveReqVO { private String status; @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") - @NotEmpty(message = "描述不能为空") private String remark; -} \ No newline at end of file + /*耗材ID*/ + @Schema(description = "耗材ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "111") + @NotNull(message = "物料ID不能为空") + private Long materialId; + + /** + * 耗材名称 + */ + @Schema(description = "耗材名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "耗材名称") + @NotEmpty(message = "耗材名称不能为空") + private String materialName; +} diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/materialdetail/MaterialDetailDO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/materialdetail/MaterialDetailDO.java index 215fd64..9b12141 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/materialdetail/MaterialDetailDO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/materialdetail/MaterialDetailDO.java @@ -66,7 +66,7 @@ public class MaterialDetailDO extends BaseDO { /** * 使用数量 */ - private Double userCount; + private Long userCount; /** * 单位 */ @@ -80,5 +80,11 @@ public class MaterialDetailDO extends BaseDO { */ private String remark; + /*耗材ID*/ + private Long materialId; -} \ No newline at end of file + /** + * 耗材名称 + */ + private String materialName; +} diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoService.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoService.java index 95cee14..1946551 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoService.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoService.java @@ -59,4 +59,12 @@ public interface MainInfoService { */ PageResult getMainInfoPage(MainInfoPageReqVO pageReqVO); -} \ No newline at end of file + /** + * 获得工单信息 + * + * @param orderNo 编号 + * @return 工单信息 + */ + MainInfoDO getMainInfoByOrderNo(String orderNo); + +} diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoServiceImpl.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoServiceImpl.java index 3b11d64..acd3a1f 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoServiceImpl.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoServiceImpl.java @@ -1,24 +1,19 @@ package com.zteits.urbanops.module.workorder.service.maininfo; -import cn.hutool.core.collection.CollUtil; -import org.springframework.stereotype.Service; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.*; -import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; import com.zteits.urbanops.framework.common.pojo.PageResult; -import com.zteits.urbanops.framework.common.pojo.PageParam; import com.zteits.urbanops.framework.common.util.object.BeanUtils; - +import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO; +import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoSaveReqVO; +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.List; import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList; -import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList; -import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.*; +import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.MAIN_INFO_NOT_EXISTS; /** * 工单信息 Service 实现类 @@ -82,4 +77,9 @@ public class MainInfoServiceImpl implements MainInfoService { return mainInfoMapper.selectPage(pageReqVO); } -} \ No newline at end of file + @Override + public MainInfoDO getMainInfoByOrderNo(String orderNo) { + return mainInfoMapper.selectOne(MainInfoDO::getOrderNo, orderNo); + } + +} diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailService.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailService.java index 812fe24..47d84fd 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailService.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailService.java @@ -59,4 +59,12 @@ public interface MaterialDetailService { */ PageResult getMaterialDetailPage(MaterialDetailPageReqVO pageReqVO); -} \ No newline at end of file + /** + * 创建工单耗材明细 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Boolean batchCreateMaterialDetail(@Valid List createReqVO); + +} diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailServiceImpl.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailServiceImpl.java index 1145c54..f0b5fcf 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailServiceImpl.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailServiceImpl.java @@ -1,24 +1,30 @@ package com.zteits.urbanops.module.workorder.service.materialdetail; -import cn.hutool.core.collection.CollUtil; -import org.springframework.stereotype.Service; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import com.zteits.urbanops.module.workorder.controller.admin.materialdetail.vo.*; -import com.zteits.urbanops.module.workorder.dal.dataobject.materialdetail.MaterialDetailDO; import com.zteits.urbanops.framework.common.pojo.PageResult; -import com.zteits.urbanops.framework.common.pojo.PageParam; import com.zteits.urbanops.framework.common.util.object.BeanUtils; - +import com.zteits.urbanops.module.garden.controller.admin.materialinventoryout.vo.MaterialInventoryOutSaveReqVO; +import com.zteits.urbanops.module.garden.service.materialinventoryout.MaterialInventoryOutService; +import com.zteits.urbanops.module.workorder.controller.admin.materialdetail.vo.MaterialDetailPageReqVO; +import com.zteits.urbanops.module.workorder.controller.admin.materialdetail.vo.MaterialDetailSaveReqVO; +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; +import com.zteits.urbanops.module.workorder.dal.dataobject.materialdetail.MaterialDetailDO; import com.zteits.urbanops.module.workorder.dal.mysql.materialdetail.MaterialDetailMapper; +import com.zteits.urbanops.module.workorder.service.maininfo.MainInfoService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; +import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList; -import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList; -import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.*; +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception0; +import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; +import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname; +import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.MATERIAL_DETAIL_NOT_EXISTS; /** * 工单耗材明细 Service 实现类 @@ -32,10 +38,18 @@ public class MaterialDetailServiceImpl implements MaterialDetailService { @Resource private MaterialDetailMapper materialDetailMapper; + @Resource + private MaterialInventoryOutService materialInventoryOutService; + + @Resource + private MainInfoService mainInfoService; + @Override public Long createMaterialDetail(MaterialDetailSaveReqVO createReqVO) { // 插入 MaterialDetailDO materialDetail = BeanUtils.toBean(createReqVO, MaterialDetailDO.class); + materialDetail.setUserId(getLoginUserId()); + materialDetail.setUserName(getLoginUserNickname()); materialDetailMapper.insert(materialDetail); // 返回 @@ -82,4 +96,39 @@ public class MaterialDetailServiceImpl implements MaterialDetailService { return materialDetailMapper.selectPage(pageReqVO); } -} \ No newline at end of file + @Override + @Transactional + public Boolean batchCreateMaterialDetail(List createReqVO) { + + List materialDetailList = createReqVO.stream() + .map(vo -> { + MaterialDetailDO detailDO = new MaterialDetailDO(); + BeanUtils.copyProperties(vo, detailDO); // 单个对象属性拷贝 + detailDO.setUserId(getLoginUserId()); + detailDO.setUserName(getLoginUserNickname()); + return detailDO; + }) + .collect(Collectors.toList()); + + //订单号校验 + for (MaterialDetailDO materialDetailDO : materialDetailList) { + MainInfoDO mainInfoDO = mainInfoService.getMainInfoByOrderNo(materialDetailDO.getOrderNo()); + if (mainInfoDO == null) { + throw exception0(BAD_REQUEST.getCode(),"订单号"+materialDetailDO.getOrderNo()+"不存在"); + } + } + //耗材出库 + for (MaterialDetailDO materialDetailDO : materialDetailList) { + MaterialInventoryOutSaveReqVO materialInventoryOutSaveReqVO = new MaterialInventoryOutSaveReqVO(); + materialInventoryOutSaveReqVO.setMaterialId(materialDetailDO.getMaterialId()); + materialInventoryOutSaveReqVO.setMaterialName(materialDetailDO.getMaterialName()); + materialInventoryOutSaveReqVO.setOutInventoryNum(materialDetailDO.getUserCount()); + materialInventoryOutSaveReqVO.setOutDate(LocalDateTime.now()); + materialInventoryOutService.createMaterialInventoryOut(materialInventoryOutSaveReqVO); + } + //保存耗材 + materialDetailMapper.insertBatch(materialDetailList); + return Boolean.TRUE; + } + +}