diff --git a/yudao-module-common/yudao-module-common-biz/src/main/java/cn/iocoder/yudao/module/common/controller/admin/mold/vo/MoldRespVO.java b/yudao-module-common/yudao-module-common-biz/src/main/java/cn/iocoder/yudao/module/common/controller/admin/mold/vo/MoldRespVO.java index ab0168bf4..636361b6c 100644 --- a/yudao-module-common/yudao-module-common-biz/src/main/java/cn/iocoder/yudao/module/common/controller/admin/mold/vo/MoldRespVO.java +++ b/yudao-module-common/yudao-module-common-biz/src/main/java/cn/iocoder/yudao/module/common/controller/admin/mold/vo/MoldRespVO.java @@ -1,5 +1,10 @@ package cn.iocoder.yudao.module.common.controller.admin.mold.vo; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -105,6 +110,9 @@ public class MoldRespVO { @Schema(description = "压网时间") @ExcelProperty("压网时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) private LocalDateTime pressureNetTime; diff --git a/yudao-module-common/yudao-module-common-biz/src/main/java/cn/iocoder/yudao/module/common/dal/mysql/mold/MoldMapper.java b/yudao-module-common/yudao-module-common-biz/src/main/java/cn/iocoder/yudao/module/common/dal/mysql/mold/MoldMapper.java index 27d32332c..a2282e1ef 100644 --- a/yudao-module-common/yudao-module-common-biz/src/main/java/cn/iocoder/yudao/module/common/dal/mysql/mold/MoldMapper.java +++ b/yudao-module-common/yudao-module-common-biz/src/main/java/cn/iocoder/yudao/module/common/dal/mysql/mold/MoldMapper.java @@ -21,7 +21,7 @@ import java.util.stream.Collectors; @Mapper public interface MoldMapper extends BaseMapperX { - default PageResult selectPage(MoldPageReqVO reqVO) { + default LambdaQueryWrapperX buildQueryWrapper(MoldPageReqVO reqVO) { LambdaQueryWrapperX wrapper = new LambdaQueryWrapperX<>(); wrapper .likeIfPresent(MoldDO::getCode, reqVO.getCode()) @@ -55,7 +55,15 @@ public interface MoldMapper extends BaseMapperX { if (reqVO.getStatuss() != null && !reqVO.getStatuss().isEmpty()) { wrapper.in(MoldDO::getStatus, reqVO.getStatuss()); } - return selectPage(reqVO, wrapper); + return wrapper; + } + + default PageResult selectPage(MoldPageReqVO reqVO) { + return selectPage(reqVO, buildQueryWrapper(reqVO)); + } + + default List selectList(MoldPageReqVO reqVO) { + return selectList(buildQueryWrapper(reqVO)); } // 保持原有方法以兼容旧代码 diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java index cd9fdf877..587dc4f99 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java @@ -142,8 +142,8 @@ public class MoldBrandController { @GetMapping("/mold/list") @Operation(summary = "获得模具列表") @PreAuthorize("@ss.hasPermission('erp:mold-brand:query')") - public CommonResult> getMoldList() { - List moldDOList = moldBrandService.getMoldList(); + public CommonResult> getMoldList(@Valid MoldPageReqVO pageReqVO) { + List moldDOList = moldBrandService.getMoldList(pageReqVO); return success(moldDOList); } diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPressureNetRecordSaveReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPressureNetRecordSaveReqVO.java index f217bef28..82f335720 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPressureNetRecordSaveReqVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPressureNetRecordSaveReqVO.java @@ -1,5 +1,10 @@ package cn.iocoder.yudao.module.erp.controller.admin.mold.vo; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -29,6 +34,9 @@ public class MoldPressureNetRecordSaveReqVO { @Schema(description = "压网时间", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "压网时间不能为空") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) private LocalDateTime pressureNetTime; @Schema(description = "备注", example = "备注") diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockInController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockInController.java index b660a7320..2327a71ac 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockInController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockInController.java @@ -9,19 +9,17 @@ import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.ratelimiter.core.annotation.RateLimiter; -import cn.iocoder.yudao.module.common.controller.admin.mold.vo.MoldRespVO; +import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldBrandDO; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInRespVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInSaveReqVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.StockInTypeEnum; -import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.out.ErpStockOutRespVO; import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpSupplierDO; import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO; import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInDO; import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInItemDO; -import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockOutItemDO; -import cn.iocoder.yudao.module.erp.service.mold.MoldService; +import cn.iocoder.yudao.module.erp.service.mold.MoldBrandService; import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService; import cn.iocoder.yudao.module.erp.service.stock.ErpStockInService; @@ -68,7 +66,7 @@ public class ErpStockInController { private ErpSupplierService supplierService; @Resource - private MoldService moldService; + private MoldBrandService moldBrandService; @Resource private AdminUserApi adminUserApi; @@ -119,14 +117,14 @@ public class ErpStockInController { } List stockInItemList = stockInService.getStockInItemListByInId(id); if (Objects.equals(stockIn.getInType(), "模具入库")) { - Map moldMap = moldService.getMoldVOMap( + Map moldMap = moldBrandService.getMoldVOMap( convertSet(stockInItemList, ErpStockInItemDO::getProductId)); return success(BeanUtils.toBean(stockIn, ErpStockInRespVO.class, stockInVO -> stockInVO.setItems(BeanUtils.toBean(stockInItemList, ErpStockInRespVO.Item.class, item -> { ErpStockDO stock = stockService.getStock(item.getProductId(), item.getWarehouseId()); item.setStockCount(stock != null ? stock.getCount() : BigDecimal.ZERO); MapUtils.findAndThen(moldMap, item.getProductId(), mold -> item.setProductName(mold.getName()) - .setProductBarCode(mold.getCode()).setProductUnitName(mold.getUnitName())); + .setProductBarCode(mold.getCode())); })))); } else { Map productMap = productService.getProductVOMap( @@ -188,7 +186,7 @@ public class ErpStockInController { Map userMap = adminUserApi.getUserMap( convertSet(pageResult.getList(), stockIn -> Long.parseLong(stockIn.getCreator()))); // 1.7 模具信息 - Map moldMap = moldService.getMoldVOMap( + Map moldMap = moldBrandService.getMoldVOMap( convertSet(stockInItemList, ErpStockInItemDO::getProductId)); // 2. 开始拼接 @@ -196,7 +194,7 @@ public class ErpStockInController { if (Objects.equals(stockIn.getInType(), "模具入库")) { stockIn.setItems(BeanUtils.toBean(stockInItemMap.get(stockIn.getId()), ErpStockInRespVO.Item.class, item -> MapUtils.findAndThen(moldMap, item.getProductId(), mold -> item.setProductName(mold.getName()) - .setProductBarCode(mold.getCode()).setProductUnitName(mold.getUnitName())))); + .setProductBarCode(mold.getCode())))); stockIn.setProductNames(CollUtil.join(stockIn.getItems(), ",", ErpStockInRespVO.Item::getProductName)); } else { stockIn.setItems(BeanUtils.toBean(stockInItemMap.get(stockIn.getId()), ErpStockInRespVO.Item.class, @@ -234,4 +232,4 @@ public class ErpStockInController { return success(buildStockInVOPageResult(pageResult)); } -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInRespVO.java index 8ee0b0974..21f2773d5 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInRespVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInRespVO.java @@ -82,6 +82,12 @@ public class ErpStockInRespVO { @Schema(description = "入库项编号", example = "11756") private Long id; + @Schema(description = "模具组 ID", example = "1") + private Long moldSetId; + + @Schema(description = "模具组名称", example = "A组") + private String moldSetName; + @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3113") private Long warehouseId; @@ -111,4 +117,4 @@ public class ErpStockInRespVO { } -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInSaveReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInSaveReqVO.java index 4c2bc8c9a..8d39b99ba 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInSaveReqVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInSaveReqVO.java @@ -50,6 +50,9 @@ public class ErpStockInSaveReqVO { @Schema(description = "入库项编号", example = "11756") private Long id; + @Schema(description = "模具组 ID(模具入库时传入,兼容旧前端仍可使用 id 传值)", example = "1") + private Long moldSetId; + @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3113") // @NotNull(message = "仓库编号不能为空") private Long warehouseId; @@ -72,4 +75,4 @@ public class ErpStockInSaveReqVO { private Long deviceId; } -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockInItemDO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockInItemDO.java index 0481029f0..f5e13a798 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockInItemDO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockInItemDO.java @@ -29,6 +29,8 @@ public class ErpStockInItemDO extends BaseDO { */ @TableId private Long id; + private Long moldSetId; + private String moldSetName; /** * 入库编号 * @@ -76,4 +78,4 @@ public class ErpStockInItemDO extends BaseDO { * 关联 {@link ErpProductDO#getId()} */ private Long deviceId; -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldPressureNetRecordMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldPressureNetRecordMapper.java index 92b8ae297..4ab7d831c 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldPressureNetRecordMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldPressureNetRecordMapper.java @@ -6,8 +6,10 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldPressureNetRecordPageReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldPressureNetRecordDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.Collection; +import java.util.Collections; import java.util.List; @Mapper @@ -27,12 +29,14 @@ public interface MoldPressureNetRecordMapper extends BaseMapperX selectListByMoldIds(Collection moldIds) { - return selectList(new LambdaQueryWrapperX() - .inIfPresent(MoldPressureNetRecordDO::getMoldId, moldIds) - .orderByDesc(MoldPressureNetRecordDO::getPressureNetTime) - .orderByDesc(MoldPressureNetRecordDO::getId)); + if (moldIds == null || moldIds.isEmpty()) { + return Collections.emptyList(); + } + return selectLatestListByMoldIds(moldIds); } + List selectLatestListByMoldIds(@Param("moldIds") Collection moldIds); + default List selectListByMoldBrandIds(Collection moldBrandIds) { return selectList(new LambdaQueryWrapperX() .inIfPresent(MoldPressureNetRecordDO::getMoldBrandId, moldBrandIds) diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandService.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandService.java index 96f53dc1e..a4e4719d0 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandService.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandService.java @@ -96,7 +96,7 @@ public interface MoldBrandService { */ PageResult getMoldPage(MoldPageReqVO pageReqVO); - List getMoldList(); + List getMoldList(MoldPageReqVO pageReqVO); /** * 创建模具 diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandServiceImpl.java index 5669a4096..3a03c70c4 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandServiceImpl.java @@ -25,6 +25,7 @@ import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldBrandRespVO; import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldBrandStatusStatisticsRespVO; import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldBrandTreeRespVO; import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldOperateSimpleDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldPressureNetRecordDO; import cn.iocoder.yudao.module.erp.dal.mysql.mold.MoldOperateQueryMapper; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; @@ -448,8 +449,8 @@ public class MoldBrandServiceImpl implements MoldBrandService { } @Override - public List getMoldList() { - return moldMapper.selectList(); + public List getMoldList(MoldPageReqVO pageReqVO) { + return moldMapper.selectList(pageReqVO); } private List buildMoldVOList(List list) { @@ -474,9 +475,9 @@ public class MoldBrandServiceImpl implements MoldBrandService { if (CollUtil.isEmpty(moldIds)) { return Collections.emptyMap(); } - List records = moldPressureNetRecordMapper.selectListByMoldIds(moldIds); + List records = moldPressureNetRecordMapper.selectListByMoldIds(moldIds); Map result = new HashMap<>(); - for (cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldPressureNetRecordDO record : records) { + for (MoldPressureNetRecordDO record : records) { if (record.getMoldId() != null && !result.containsKey(record.getMoldId())) { result.put(record.getMoldId(), record.getPressureNetTime()); } diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java index 0cfb1d74e..0fd9ec689 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java @@ -4,11 +4,10 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.common.controller.admin.mold.vo.MoldSaveReqVO; +import cn.iocoder.yudao.module.common.controller.admin.mold.vo.MoldBrandSaveReqVO; import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldBrandDO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInSaveReqVO; -import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.out.ErpStockOutSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO; @@ -21,7 +20,6 @@ import cn.iocoder.yudao.module.erp.dal.redis.no.ErpNoRedisDAO; import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus; import cn.iocoder.yudao.module.erp.enums.stock.ErpStockRecordBizTypeEnum; import cn.iocoder.yudao.module.erp.service.mold.MoldBrandService; -import cn.iocoder.yudao.module.erp.service.mold.MoldService; import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService; import cn.iocoder.yudao.module.erp.service.stock.bo.ErpStockRecordCreateReqBO; @@ -61,9 +59,6 @@ public class ErpStockInServiceImpl implements ErpStockInService { @Resource private ErpProductService productService; - @Resource - private MoldService moldService; - @Resource private ErpWarehouseService warehouseService; @Resource private ErpSupplierService supplierService; @@ -158,9 +153,9 @@ public class ErpStockInServiceImpl implements ErpStockInService { stockInItems.forEach(stockInItem -> { BigDecimal count = approve ? stockInItem.getCount() : stockInItem.getCount().negate(); if (Objects.equals(stockIn.getInType(), "模具入库")) { - MoldDO moldDO = moldService.getMold(stockInItem.getProductId()); + MoldBrandDO moldDO = moldBrandService.getMoldBrand(stockInItem.getProductId()); stockRecordService.createStockRecord(new ErpStockRecordCreateReqBO( - stockInItem.getProductId(),moldDO.getBrandId(), stockInItem.getWarehouseId(), count, + stockInItem.getProductId(), moldDO.getId(), stockInItem.getWarehouseId(), count, ErpStockRecordBizTypeEnum.OTHER_IN.getType(), stockInItem.getInId(), stockInItem.getId(), stockIn.getNo(), stockIn.getInTime())); } else { ErpProductDO productDO = productService.getProduct(stockInItem.getProductId()); @@ -180,7 +175,7 @@ public class ErpStockInServiceImpl implements ErpStockInService { if (Objects.equals(stockIn.getInType(), "模具入库")) { for (ErpStockInItemDO item : stockInItems) { if (item.getProductId() != null) { - MoldDO moldDO = moldService.getMold(item.getProductId()); + MoldBrandDO moldDO = moldBrandService.getMoldBrand(item.getProductId()); // 已经在库 if (Objects.equals(moldDO.getStatus(), 1)) { @@ -188,7 +183,7 @@ public class ErpStockInServiceImpl implements ErpStockInService { } moldDO.setStatus(1); // 在库 - moldService.updateMold(BeanUtils.toBean(moldDO, MoldSaveReqVO.class)); + moldBrandService.updateMoldBrand(BeanUtils.toBean(moldDO, MoldBrandSaveReqVO.class)); } } @@ -202,14 +197,17 @@ public class ErpStockInServiceImpl implements ErpStockInService { // convertSet(list, ErpStockInSaveReqVO.Item::getProductId)); // Map moldMap = convertMap(moldList, MoldDO::getId); List moldList = moldBrandService.validMoldList( - convertSet(list, ErpStockInSaveReqVO.Item::getProductId)); + convertSet(list, ErpStockInSaveReqVO.Item::getId)); Map moldMap = convertMap(moldList, MoldBrandDO::getId); + List productList = productService.validProductList( + convertSet(moldList, MoldBrandDO::getProductId)); + Map productMap = convertMap(productList, ErpProductDO::getId); // 1.2 校验仓库存在 // warehouseService.validWarehouseList(convertSet( // list, ErpStockInSaveReqVO.Item::getWarehouseId)); // 2. 转化为 ErpStockInItemDO 列表 return convertList(list, o -> BeanUtils.toBean(o, ErpStockInItemDO.class, item -> item -// .setProductUnitId(moldMap.get(item.getProductId()).getUnitId()) + .setProductUnitId(productMap.get(item.getProductId()).getUnitId()) .setTotalPrice(MoneyUtils.priceMultiply(item.getProductPrice(), item.getCount())))); } else { @@ -303,4 +301,4 @@ public class ErpStockInServiceImpl implements ErpStockInService { return stockInItemMapper.selectListByInIds(inIds); } -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/mold/MoldPressureNetRecordMapper.xml b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/mold/MoldPressureNetRecordMapper.xml new file mode 100644 index 000000000..c4f6e2e49 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/mold/MoldPressureNetRecordMapper.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/MoldTaskManagementController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/MoldTaskManagementController.java index 0156ff99a..5bc683ab3 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/MoldTaskManagementController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/MoldTaskManagementController.java @@ -137,6 +137,14 @@ public class MoldTaskManagementController { return success(true); } + @PostMapping("/createMoldTicketDirect") + @Operation(summary = "直接创建工单管理") + @PreAuthorize("@ss.hasPermission('mes:mold-task-management:create')") + public CommonResult createTicketDirect(@Valid @RequestBody MoldTaskManagementCreateTicketReqVO createReqVO) { + moldtaskManagementService.createMoldTicketDirect(createReqVO); + return success(true); + } + private PageResult buildPageCreatorName(PageResult planMaintenanceRespVOPageResult) { for (MoldTaskManagementRespVO planMaintenanceRespVO : planMaintenanceRespVOPageResult.getList()) { @@ -149,4 +157,4 @@ public class MoldTaskManagementController { return planMaintenanceRespVOPageResult; } -} \ No newline at end of file +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementCreateTicketReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementCreateTicketReqVO.java new file mode 100644 index 000000000..1e7121bfd --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementCreateTicketReqVO.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 模具任务管理直接创建工单 Request VO") +@Data +public class MoldTaskManagementCreateTicketReqVO { + + @Schema(description = "id", example = "26348") + private Long id; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试任务") + @NotBlank(message = "名称不能为空") + private String name; + + @Schema(description = "类型(1-点检 2-保养)", example = "2") + private Integer taskType; + + @Schema(description = "模具列表", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "模具列表不能为空") + private String moldList; + + @Schema(description = "项目表单", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "项目表单不能为空") + private Long projectForm; + + @Schema(description = "起止开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private String startDate; + + @Schema(description = "起止结束日期", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonFormat(pattern = "yyyy-MM-dd") +// @NotBlank(message = "起止结束日期不能为空") + private String endDate; + + @Schema(description = "cron表达式") + private String cronExpression; + + @Schema(description = "可操作人") + private String operableUsers; + + @Schema(description = "是否启用") + private Boolean enabled; +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementService.java index 5f1023103..29de0db19 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementService.java @@ -53,4 +53,6 @@ public interface MoldTaskManagementService { PageResult getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO); void createMoldTicket(Long id); -} \ No newline at end of file + + void createMoldTicketDirect(@Valid MoldTaskManagementCreateTicketReqVO createReqVO); +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java index eb308f676..16c8789fe 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java @@ -1,49 +1,42 @@ package cn.iocoder.yudao.module.mes.service.moldtaskmanagement; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldBrandDO; -import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO; +import cn.iocoder.yudao.module.common.dal.dataobject.moldticketmanagement.MoldTicketManagementDO; +import cn.iocoder.yudao.module.common.dal.dataobject.moldticketresults.MoldTicketResultsDO; import cn.iocoder.yudao.module.common.dal.mysql.mold.MoldBrandMapper; -import cn.iocoder.yudao.module.common.dal.mysql.mold.MoldMapper; -import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; +import cn.iocoder.yudao.module.common.dal.mysql.moldticketmanagement.MoldTicketManagementMapper; +import cn.iocoder.yudao.module.common.dal.mysql.moldticketresults.MoldTicketResultsMapper; +import cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo.MoldTaskManagementCreateTicketReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo.MoldTaskManagementPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo.MoldTaskManagementSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.moldplanmaintenance.MoldPlanMaintenanceDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldtaskmanagement.MoldTaskManagementDO; import cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan.SubjectMoldPlanDO; -import cn.iocoder.yudao.module.common.dal.dataobject.moldticketmanagement.MoldTicketManagementDO; -import cn.iocoder.yudao.module.common.dal.dataobject.moldticketresults.MoldTicketResultsDO; -import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO; -import cn.iocoder.yudao.module.mes.dal.mysql.moldsubject.MoldSubjectMapper; import cn.iocoder.yudao.module.mes.dal.mysql.moldplanmaintenance.MoldPlanMaintenanceMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.moldsubject.MoldSubjectMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.moldtaskmanagement.MoldTaskManagementMapper; import cn.iocoder.yudao.module.mes.dal.mysql.subjectmoldplan.SubjectMoldPlanMapper; -import cn.iocoder.yudao.module.common.dal.mysql.moldticketmanagement.MoldTicketManagementMapper; -import cn.iocoder.yudao.module.common.dal.mysql.moldticketresults.MoldTicketResultsMapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import javax.annotation.Resource; +import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.text.SimpleDateFormat; -import java.util.*; +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Random; import java.util.stream.Collectors; -import cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo.*; -import cn.iocoder.yudao.module.mes.dal.dataobject.moldtaskmanagement.MoldTaskManagementDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.mes.dal.mysql.moldtaskmanagement.MoldTaskManagementMapper; - import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; - -import org.springframework.util.CollectionUtils; -import lombok.extern.slf4j.Slf4j; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.TASK_MANAGEMENT_NOT_EXISTS; -/** - * 设备类型 Service 实现类 - * - * @author 内蒙必硕 - */ @Service @Slf4j @Validated @@ -51,53 +44,38 @@ public class MoldTaskManagementServiceImpl implements MoldTaskManagementService @Resource private MoldTaskManagementMapper moldtaskManagementMapper; - @Resource private MoldTicketManagementMapper moldticketManagementMapper; - @Resource private MoldTicketResultsMapper moldticketResultsMapper; - - @Resource - private MoldMapper moldMapper; @Resource private MoldBrandMapper moldBrandMapper; - @Resource private MoldPlanMaintenanceMapper moldplanMaintenanceMapper; - @Resource private SubjectMoldPlanMapper subjectmoldPlanMapper; - - @Resource private MoldSubjectMapper moldSubjectMapper; @Override public Long createMoldTaskManagement(MoldTaskManagementSaveReqVO createReqVO) { - // 插入 MoldTaskManagementDO moldtaskManagement = BeanUtils.toBean(createReqVO, MoldTaskManagementDO.class); moldtaskManagementMapper.insert(moldtaskManagement); - // 返回 return moldtaskManagement.getId(); } @Override public void updateMoldTaskManagement(MoldTaskManagementSaveReqVO updateReqVO) { - // 校验存在 validateMoldTaskManagementExists(updateReqVO.getId()); - // 更新 MoldTaskManagementDO updateObj = BeanUtils.toBean(updateReqVO, MoldTaskManagementDO.class); moldtaskManagementMapper.updateById(updateObj); } @Override - public void deleteMoldTaskManagement(List idList ) { + public void deleteMoldTaskManagement(List idList) { for (Long id : idList) { - // 校验存在 validateMoldTaskManagementExists(id); } - // 删除 moldtaskManagementMapper.deleteByIds(idList); } @@ -112,89 +90,73 @@ public class MoldTaskManagementServiceImpl implements MoldTaskManagementService return moldtaskManagementMapper.selectById(id); } -// @Override -// public PageResult getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) { -// -// PageResult moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO); -// for (MoldTaskManagementDO moldtaskManagementDO : moldtaskManagementDOPageResult.getList()) { -// MoldPlanMaintenanceDO moldplanMaintenanceDO = moldplanMaintenanceMapper.selectById(moldtaskManagementDO.getProjectForm()); -// moldtaskManagementDO.setProjectFormName(moldplanMaintenanceDO.getPlanName()); -// } -// -// -// return moldtaskManagementDOPageResult; -// } -@Override -public PageResult getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) { - // 1. 查询分页数据 - PageResult moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO); - - // 2. 空列表直接返回,避免遍历空指针 - if (CollectionUtils.isEmpty(moldtaskManagementDOPageResult.getList())) { - return moldtaskManagementDOPageResult; - } - - // 3. 遍历处理每条数据,添加全量空值校验 - for (MoldTaskManagementDO moldtaskManagementDO : moldtaskManagementDOPageResult.getList()) { - // 3.1 校验关联的维保计划ID(projectForm)非空 - Long projectFormId = moldtaskManagementDO.getProjectForm(); - if (projectFormId == null) { - log.warn("模具任务{}的维保计划ID为空,跳过计划名称填充", moldtaskManagementDO.getId()); - moldtaskManagementDO.setProjectFormName("无维保计划"); // 兜底默认值 - continue; + @Override + public PageResult getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) { + PageResult pageResult = moldtaskManagementMapper.selectPage(pageReqVO); + if (CollectionUtils.isEmpty(pageResult.getList())) { + return pageResult; } - // 3.2 查询维保计划 - MoldPlanMaintenanceDO moldplanMaintenanceDO = moldplanMaintenanceMapper.selectById(projectFormId); - - // 3.3 校验查询结果非空 - if (moldplanMaintenanceDO == null) { - log.warn("模具任务{}关联的维保计划{}不存在", moldtaskManagementDO.getId(), projectFormId); - moldtaskManagementDO.setProjectFormName("维保计划不存在"); // 兜底 - } else { - // 3.4 正常赋值(确保planName非空,避免空字符串) - String planName = moldplanMaintenanceDO.getPlanName(); - moldtaskManagementDO.setProjectFormName(planName == null ? "未命名维保计划" : planName); + for (MoldTaskManagementDO moldtaskManagementDO : pageResult.getList()) { + Long projectFormId = moldtaskManagementDO.getProjectForm(); + if (projectFormId == null) { + log.warn("模具任务{}的维保计划ID为空,跳过计划名称填充", moldtaskManagementDO.getId()); + moldtaskManagementDO.setProjectFormName("无维保计划"); + continue; + } + + MoldPlanMaintenanceDO moldplanMaintenanceDO = moldplanMaintenanceMapper.selectById(projectFormId); + if (moldplanMaintenanceDO == null) { + log.warn("模具任务{}关联的维保计划{}不存在", moldtaskManagementDO.getId(), projectFormId); + moldtaskManagementDO.setProjectFormName("维保计划不存在"); + } else { + String planName = moldplanMaintenanceDO.getPlanName(); + moldtaskManagementDO.setProjectFormName(planName == null ? "未命名维保计划" : planName); + } } + return pageResult; } - // 4. 返回处理后的结果 - return moldtaskManagementDOPageResult; -} - @Override public void createMoldTicket(Long id) { - - List moldticketManagementDOS = new ArrayList<>(); - - //检验数据是否存在 validateMoldTaskManagementExists(id); MoldTaskManagementDO moldtaskManagementDO = moldtaskManagementMapper.selectById(id); - if (moldtaskManagementDO == null){ + if (moldtaskManagementDO == null) { throw exception(TASK_MANAGEMENT_NOT_EXISTS); } + createMoldTicketInternal(moldtaskManagementDO.getId(), moldtaskManagementDO.getProjectForm(), + moldtaskManagementDO.getTaskType(), moldtaskManagementDO.getName(), + moldtaskManagementDO.getEndDate(), moldtaskManagementDO.getMoldList()); + } + + @Override + public void createMoldTicketDirect(MoldTaskManagementCreateTicketReqVO createReqVO) { + createMoldTicketInternal(createReqVO.getId(), createReqVO.getProjectForm(), createReqVO.getTaskType(), + createReqVO.getName(), createReqVO.getEndDate()!=null?LocalDate.parse(createReqVO.getEndDate()):null, createReqVO.getMoldList()); + } - // 将逗号分隔的字符串转换为Long类型的List - List idList = Arrays.stream(moldtaskManagementDO.getMoldList().split(",")) - .map(String::trim) // 去除可能存在的空格 + private void createMoldTicketInternal(Long taskId, Long planId, Integer taskType, String configName, + LocalDate endDate, String moldList) { + List moldIds = Arrays.stream(moldList.split(",")) + .map(String::trim) .map(Long::valueOf) .collect(Collectors.toList()); + for (Long moldId : moldIds) { + MoldBrandDO moldDO = moldBrandMapper.selectById(moldId); - for (Long moldId : idList) { MoldTicketManagementDO moldticketManagementDO = new MoldTicketManagementDO(); - MoldBrandDO moldDO = moldBrandMapper.selectById(moldId); - moldticketManagementDO.setTaskId(moldtaskManagementDO.getId()); + moldticketManagementDO.setTaskId(taskId); moldticketManagementDO.setPlanNo(generatePrefixedOrderNo()); - moldticketManagementDO.setPlanId(moldtaskManagementDO.getProjectForm()); + moldticketManagementDO.setPlanId(planId); moldticketManagementDO.setMoldName(moldDO.getName()); - moldticketManagementDO.setPlanType(moldtaskManagementDO.getTaskType()); - moldticketManagementDO.setConfigName(moldtaskManagementDO.getName()); - moldticketManagementDO.setTaskEndTime(moldtaskManagementDO.getEndDate().atStartOfDay()); + moldticketManagementDO.setPlanType(taskType); + moldticketManagementDO.setConfigName(configName); + moldticketManagementDO.setTaskEndTime(endDate !=null ? endDate.atStartOfDay(): null); moldticketManagementMapper.insert(moldticketManagementDO); - List moldSubjectDOList = new ArrayList<>(); - List subjectmoldPlanDOList = subjectmoldPlanMapper.selectList(Wrappers.lambdaQuery().eq(SubjectMoldPlanDO::getPlanId, moldticketManagementDO.getPlanId())); + List subjectmoldPlanDOList = subjectmoldPlanMapper.selectList( + Wrappers.lambdaQuery().eq(SubjectMoldPlanDO::getPlanId, planId)); for (SubjectMoldPlanDO subjectmoldPlanDO : subjectmoldPlanDOList) { MoldSubjectDO moldSubjectDO = moldSubjectMapper.selectById(subjectmoldPlanDO.getSubjectId()); @@ -207,19 +169,13 @@ public PageResult getMoldTaskManagementPage(MoldTaskManage moldticketResultsDO.setValueType(moldSubjectDO.getValueType()); moldticketResultsMapper.insert(moldticketResultsDO); } - } - } - - /** - * 带前缀的时间戳单号 - */ public static String generatePrefixedOrderNo() { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String date = sdf.format(new Date()); String randomNum = String.format("%06d", new Random().nextInt(1000000)); return "E" + date + randomNum; } -} \ No newline at end of file +}