Compare commits

...

3 Commits

@ -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.*;
@ -102,4 +107,19 @@ public class MoldRespVO {
@ExcelProperty("附件地址")
private String fileUrl;
@Schema(description = "压网时间")
@ExcelProperty("压网时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime pressureNetTime;
@Schema(description = "压网天数")
@ExcelProperty("压网天数")
private Long pressureNetDays;
}

@ -21,7 +21,7 @@ import java.util.stream.Collectors;
@Mapper
public interface MoldMapper extends BaseMapperX<MoldDO> {
default PageResult<MoldDO> selectPage(MoldPageReqVO reqVO) {
default LambdaQueryWrapperX<MoldDO> buildQueryWrapper(MoldPageReqVO reqVO) {
LambdaQueryWrapperX<MoldDO> wrapper = new LambdaQueryWrapperX<>();
wrapper
.likeIfPresent(MoldDO::getCode, reqVO.getCode())
@ -55,7 +55,15 @@ public interface MoldMapper extends BaseMapperX<MoldDO> {
if (reqVO.getStatuss() != null && !reqVO.getStatuss().isEmpty()) {
wrapper.in(MoldDO::getStatus, reqVO.getStatuss());
}
return selectPage(reqVO, wrapper);
return wrapper;
}
default PageResult<MoldDO> selectPage(MoldPageReqVO reqVO) {
return selectPage(reqVO, buildQueryWrapper(reqVO));
}
default List<MoldDO> selectList(MoldPageReqVO reqVO) {
return selectList(buildQueryWrapper(reqVO));
}
// 保持原有方法以兼容旧代码

@ -190,6 +190,7 @@ public interface ErrorCodeConstants {
ErrorCode MOLD_BRAND_CODE_EMPTY = new ErrorCode(1_003_000_007, "模具品牌编码不能为空");
// ========== 模具组相关 1_112_000 ==========
ErrorCode MOLD_SET_NOT_EXISTS = new ErrorCode(1_112_001, "模具组不存在");
ErrorCode MOLD_PRESSURE_NET_RECORD_NOT_EXISTS = new ErrorCode(1_112_002, "子模具压网记录不存在");
ErrorCode MOLD_SET_CODE_EMPTY = new ErrorCode(1_003_000_005, "模具组编码不能为空");

@ -142,8 +142,8 @@ public class MoldBrandController {
@GetMapping("/mold/list")
@Operation(summary = "获得模具列表")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:query')")
public CommonResult<List<MoldDO>> getMoldList() {
List<MoldDO> moldDOList = moldBrandService.getMoldList();
public CommonResult<List<MoldDO>> getMoldList(@Valid MoldPageReqVO pageReqVO) {
List<MoldDO> moldDOList = moldBrandService.getMoldList(pageReqVO);
return success(moldDOList);
}

@ -0,0 +1,98 @@
package cn.iocoder.yudao.module.erp.controller.admin.mold;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldPressureNetRecordPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldPressureNetRecordRespVO;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldPressureNetRecordSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldPressureNetRecordDO;
import cn.iocoder.yudao.module.erp.service.mold.MoldPressureNetRecordService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
@Tag(name = "管理后台 - 子模具压网记录")
@RestController
@RequestMapping("/erp/mold-pressure-net-record")
@Validated
public class MoldPressureNetRecordController {
@Resource
private MoldPressureNetRecordService moldPressureNetRecordService;
@PostMapping("/create")
@Operation(summary = "创建子模具压网记录")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:create')")
public CommonResult<Long> createMoldPressureNetRecord(@Valid @RequestBody MoldPressureNetRecordSaveReqVO createReqVO) {
return success(moldPressureNetRecordService.createMoldPressureNetRecord(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新子模具压网记录")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:update')")
public CommonResult<Boolean> updateMoldPressureNetRecord(@Valid @RequestBody MoldPressureNetRecordSaveReqVO updateReqVO) {
moldPressureNetRecordService.updateMoldPressureNetRecord(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除子模具压网记录")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('erp:mold-brand:delete')")
public CommonResult<Boolean> deleteMoldPressureNetRecord(@RequestParam("id") Long id) {
moldPressureNetRecordService.deleteMoldPressureNetRecord(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得子模具压网记录")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:query')")
public CommonResult<MoldPressureNetRecordRespVO> getMoldPressureNetRecord(@RequestParam("id") Long id) {
MoldPressureNetRecordDO record = moldPressureNetRecordService.getMoldPressureNetRecord(id);
return success(BeanUtils.toBean(record, MoldPressureNetRecordRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得子模具压网记录分页")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:query')")
public CommonResult<PageResult<MoldPressureNetRecordRespVO>> getMoldPressureNetRecordPage(@Valid MoldPressureNetRecordPageReqVO pageReqVO) {
PageResult<MoldPressureNetRecordDO> pageResult = moldPressureNetRecordService.getMoldPressureNetRecordPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MoldPressureNetRecordRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出子模具压网记录 Excel")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:query')")
@ApiAccessLog(operateType = EXPORT)
public void exportMoldPressureNetRecordExcel(@Valid MoldPressureNetRecordPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MoldPressureNetRecordDO> list = moldPressureNetRecordService.getMoldPressureNetRecordPage(pageReqVO).getList();
ExcelUtils.write(response, "子模具压网记录.xls", "数据", MoldPressureNetRecordRespVO.class,
BeanUtils.toBean(list, MoldPressureNetRecordRespVO.class));
}
}

@ -0,0 +1,42 @@
package cn.iocoder.yudao.module.erp.controller.admin.mold.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 子模具压网记录分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class MoldPressureNetRecordPageReqVO extends PageParam {
@Schema(description = "模具组ID", example = "1")
private Long moldBrandId;
@Schema(description = "模具组名称", example = "A组")
private String moldBrandName;
@Schema(description = "子模具ID", example = "1")
private Long moldId;
@Schema(description = "子模具名称", example = "子模具A")
private String moldName;
@Schema(description = "压网时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] pressureNetTime;
@Schema(description = "备注", example = "备注")
private String remark;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.erp.controller.admin.mold.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 子模具压网记录 Response VO")
@Data
@ExcelIgnoreUnannotated
public class MoldPressureNetRecordRespVO {
@Schema(description = "ID", example = "1")
@ExcelProperty("ID")
private Long id;
@Schema(description = "模具组ID", example = "1")
@ExcelProperty("模具组ID")
private Long moldBrandId;
@Schema(description = "模具组名称", example = "A组")
@ExcelProperty("模具组名称")
private String moldBrandName;
@Schema(description = "子模具ID", example = "1")
@ExcelProperty("子模具ID")
private Long moldId;
@Schema(description = "子模具名称", example = "子模具A")
@ExcelProperty("子模具名称")
private String moldName;
@Schema(description = "压网时间")
@ExcelProperty("压网时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime pressureNetTime;
@Schema(description = "备注", example = "备注")
@ExcelProperty("备注")
private String remark;
@Schema(description = "创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,44 @@
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;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 子模具压网记录新增/修改 Request VO")
@Data
public class MoldPressureNetRecordSaveReqVO {
@Schema(description = "ID", example = "1")
private Long id;
@Schema(description = "模具组ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "模具组ID不能为空")
private Long moldBrandId;
@Schema(description = "模具组名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "A组")
private String moldBrandName;
@Schema(description = "子模具ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "子模具ID不能为空")
private Long moldId;
@Schema(description = "子模具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "子模具A")
private String moldName;
@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 = "备注")
private String remark;
}

@ -85,4 +85,13 @@ public class MoldRespVO {
@ExcelProperty("附件地址")
private String fileUrl;
}
@Schema(description = "压网时间")
@ExcelProperty("压网时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime pressureNetTime;
@Schema(description = "压网天数", example = "5")
@ExcelProperty("压网天数")
private Long pressureNetDays;
}

@ -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<ErpStockInItemDO> stockInItemList = stockInService.getStockInItemListByInId(id);
if (Objects.equals(stockIn.getInType(), "模具入库")) {
Map<Long, MoldRespVO> moldMap = moldService.getMoldVOMap(
Map<Long, MoldBrandDO> 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<Long, ErpProductRespVO> productMap = productService.getProductVOMap(
@ -188,7 +186,7 @@ public class ErpStockInController {
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
convertSet(pageResult.getList(), stockIn -> Long.parseLong(stockIn.getCreator())));
// 1.7 模具信息
Map<Long, MoldRespVO> moldMap = moldService.getMoldVOMap(
Map<Long, MoldBrandDO> 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));
}
}
}

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

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

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.erp.dal.dataobject.mold;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.time.LocalDateTime;
/**
* DO
*/
@TableName("erp_mold_pressure_net_record")
@KeySequence("erp_mold_pressure_net_record_seq")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MoldPressureNetRecordDO extends BaseDO {
@TableId
private Long id;
private Long moldBrandId;
private String moldBrandName;
private Long moldId;
private String moldName;
private LocalDateTime pressureNetTime;
private String remark;
}

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

@ -0,0 +1,46 @@
package cn.iocoder.yudao.module.erp.dal.mysql.mold;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
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
public interface MoldPressureNetRecordMapper extends BaseMapperX<MoldPressureNetRecordDO> {
default PageResult<MoldPressureNetRecordDO> selectPage(MoldPressureNetRecordPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<MoldPressureNetRecordDO>()
.eqIfPresent(MoldPressureNetRecordDO::getMoldBrandId, reqVO.getMoldBrandId())
.likeIfPresent(MoldPressureNetRecordDO::getMoldBrandName, reqVO.getMoldBrandName())
.eqIfPresent(MoldPressureNetRecordDO::getMoldId, reqVO.getMoldId())
.likeIfPresent(MoldPressureNetRecordDO::getMoldName, reqVO.getMoldName())
.betweenIfPresent(MoldPressureNetRecordDO::getPressureNetTime, reqVO.getPressureNetTime())
.likeIfPresent(MoldPressureNetRecordDO::getRemark, reqVO.getRemark())
.betweenIfPresent(MoldPressureNetRecordDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(MoldPressureNetRecordDO::getPressureNetTime)
.orderByDesc(MoldPressureNetRecordDO::getId));
}
default List<MoldPressureNetRecordDO> selectListByMoldIds(Collection<Long> moldIds) {
if (moldIds == null || moldIds.isEmpty()) {
return Collections.emptyList();
}
return selectLatestListByMoldIds(moldIds);
}
List<MoldPressureNetRecordDO> selectLatestListByMoldIds(@Param("moldIds") Collection<Long> moldIds);
default List<MoldPressureNetRecordDO> selectListByMoldBrandIds(Collection<Long> moldBrandIds) {
return selectList(new LambdaQueryWrapperX<MoldPressureNetRecordDO>()
.inIfPresent(MoldPressureNetRecordDO::getMoldBrandId, moldBrandIds)
.orderByDesc(MoldPressureNetRecordDO::getPressureNetTime)
.orderByDesc(MoldPressureNetRecordDO::getId));
}
}

@ -96,7 +96,7 @@ public interface MoldBrandService {
*/
PageResult<MoldRespVO> getMoldPage(MoldPageReqVO pageReqVO);
List<MoldDO> getMoldList();
List<MoldDO> getMoldList(MoldPageReqVO pageReqVO);
/**
*
@ -198,4 +198,14 @@ public interface MoldBrandService {
void regenerateCode(Long id, String code) throws UnsupportedEncodingException;
List<MoldBrandDO> validMoldList(Set<Long> longs);
default Map<Long, MoldBrandDO> getMoldVOMap(Collection<Long> ids) {
if(ids.isEmpty())return new HashMap<>();
return convertMap(getMoldVOList(ids), MoldBrandDO::getId);
}
List<MoldBrandDO> getMoldVOList(Collection<Long> ids);
}

@ -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;
@ -50,6 +51,9 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@ -87,6 +91,8 @@ public class MoldBrandServiceImpl implements MoldBrandService {
private QrcodeRecordService qrcodeService;
@Resource
private MoldOperateQueryMapper moldOperateQueryMapper;
@Resource
private cn.iocoder.yudao.module.erp.dal.mysql.mold.MoldPressureNetRecordMapper moldPressureNetRecordMapper;
@Autowired
private AutoCodeUtil autoCodeUtil;
@ -443,8 +449,8 @@ public class MoldBrandServiceImpl implements MoldBrandService {
}
@Override
public List<MoldDO> getMoldList() {
return moldMapper.selectList();
public List<MoldDO> getMoldList(MoldPageReqVO pageReqVO) {
return moldMapper.selectList(pageReqVO);
}
private List<MoldRespVO> buildMoldVOList(List<MoldDO> list) {
@ -453,11 +459,31 @@ public class MoldBrandServiceImpl implements MoldBrandService {
}
Map<Long, ErpProductUnitDO> unitMap = productUnitService.getProductUnitMap(
convertSet(list, MoldDO::getUnitId));
Map<Long, LocalDateTime> latestPressureNetTimeMap = buildLatestPressureNetTimeMap(convertSet(list, MoldDO::getId));
return BeanUtils.toBean(list, MoldRespVO.class, product -> {
MapUtils.findAndThen(unitMap, product.getUnitId(),
unit -> product.setUnitName(unit.getName()));
LocalDateTime pressureNetTime = latestPressureNetTimeMap.get(product.getId());
product.setPressureNetTime(pressureNetTime);
if (pressureNetTime != null) {
product.setPressureNetDays(ChronoUnit.DAYS.between(pressureNetTime.toLocalDate(), LocalDate.now()));
}
});
}
private Map<Long, LocalDateTime> buildLatestPressureNetTimeMap(Set<Long> moldIds) {
if (CollUtil.isEmpty(moldIds)) {
return Collections.emptyMap();
}
List<MoldPressureNetRecordDO> records = moldPressureNetRecordMapper.selectListByMoldIds(moldIds);
Map<Long, LocalDateTime> result = new HashMap<>();
for (MoldPressureNetRecordDO record : records) {
if (record.getMoldId() != null && !result.containsKey(record.getMoldId())) {
result.put(record.getMoldId(), record.getPressureNetTime());
}
}
return result;
}
@Override
public Long createMold(MoldSaveReqVO createReqVO) throws UnsupportedEncodingException {
String Code = createReqVO.getCode();
@ -768,6 +794,15 @@ public class MoldBrandServiceImpl implements MoldBrandService {
return moldBrandMapper.selectBatchIds(ids);
}
@Override
public List<MoldBrandDO> getMoldVOList(Collection<Long> ids) {
if (CollUtil.isEmpty(ids)) {
return Collections.emptyList();
}
List<MoldBrandDO> list = moldBrandMapper.selectBatchIds(ids);
return list;
}
/**
*
*/

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.erp.service.mold;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldPressureNetRecordPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldPressureNetRecordSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldPressureNetRecordDO;
import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Map;
public interface MoldPressureNetRecordService {
Long createMoldPressureNetRecord(@Valid MoldPressureNetRecordSaveReqVO createReqVO);
void updateMoldPressureNetRecord(@Valid MoldPressureNetRecordSaveReqVO updateReqVO);
void deleteMoldPressureNetRecord(Long id);
MoldPressureNetRecordDO getMoldPressureNetRecord(Long id);
PageResult<MoldPressureNetRecordDO> getMoldPressureNetRecordPage(MoldPressureNetRecordPageReqVO pageReqVO);
Map<Long, LocalDateTime> getLatestPressureNetTimeMapByMoldIds(Collection<Long> moldIds);
Map<Long, LocalDateTime> getLatestPressureNetTimeMapByMoldBrandIds(Collection<Long> moldBrandIds);
}

@ -0,0 +1,126 @@
package cn.iocoder.yudao.module.erp.service.mold;
import cn.hutool.core.collection.CollUtil;
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.mysql.mold.MoldBrandMapper;
import cn.iocoder.yudao.module.common.dal.mysql.mold.MoldMapper;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldPressureNetRecordPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldPressureNetRecordSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldPressureNetRecordDO;
import cn.iocoder.yudao.module.erp.dal.mysql.mold.MoldPressureNetRecordMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.MOLD_NOT_EXISTS;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.MOLD_PRESSURE_NET_RECORD_NOT_EXISTS;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.MOLD_SET_NOT_EXISTS;
@Service
@Validated
public class MoldPressureNetRecordServiceImpl implements MoldPressureNetRecordService {
@Resource
private MoldPressureNetRecordMapper moldPressureNetRecordMapper;
@Resource
private MoldBrandMapper moldBrandMapper;
@Resource
private MoldMapper moldMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createMoldPressureNetRecord(MoldPressureNetRecordSaveReqVO createReqVO) {
MoldPressureNetRecordDO record = BeanUtils.toBean(createReqVO, MoldPressureNetRecordDO.class);
fillMoldInfo(record);
moldPressureNetRecordMapper.insert(record);
return record.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateMoldPressureNetRecord(MoldPressureNetRecordSaveReqVO updateReqVO) {
validateMoldPressureNetRecordExists(updateReqVO.getId());
MoldPressureNetRecordDO updateObj = BeanUtils.toBean(updateReqVO, MoldPressureNetRecordDO.class);
fillMoldInfo(updateObj);
moldPressureNetRecordMapper.updateById(updateObj);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteMoldPressureNetRecord(Long id) {
validateMoldPressureNetRecordExists(id);
moldPressureNetRecordMapper.deleteById(id);
}
@Override
public MoldPressureNetRecordDO getMoldPressureNetRecord(Long id) {
return moldPressureNetRecordMapper.selectById(id);
}
@Override
public PageResult<MoldPressureNetRecordDO> getMoldPressureNetRecordPage(MoldPressureNetRecordPageReqVO pageReqVO) {
return moldPressureNetRecordMapper.selectPage(pageReqVO);
}
@Override
public Map<Long, LocalDateTime> getLatestPressureNetTimeMapByMoldIds(Collection<Long> moldIds) {
if (CollUtil.isEmpty(moldIds)) {
return Collections.emptyMap();
}
List<MoldPressureNetRecordDO> records = moldPressureNetRecordMapper.selectListByMoldIds(moldIds);
return buildLatestTimeMap(records, true);
}
@Override
public Map<Long, LocalDateTime> getLatestPressureNetTimeMapByMoldBrandIds(Collection<Long> moldBrandIds) {
if (CollUtil.isEmpty(moldBrandIds)) {
return Collections.emptyMap();
}
List<MoldPressureNetRecordDO> records = moldPressureNetRecordMapper.selectListByMoldBrandIds(moldBrandIds);
return buildLatestTimeMap(records, false);
}
private Map<Long, LocalDateTime> buildLatestTimeMap(List<MoldPressureNetRecordDO> records, boolean byMoldId) {
Map<Long, LocalDateTime> result = new LinkedHashMap<>();
for (MoldPressureNetRecordDO record : records) {
Long key = byMoldId ? record.getMoldId() : record.getMoldBrandId();
if (key != null && !result.containsKey(key)) {
result.put(key, record.getPressureNetTime());
}
}
return result;
}
private void fillMoldInfo(MoldPressureNetRecordDO record) {
MoldDO mold = moldMapper.selectById(record.getMoldId());
if (mold == null) {
throw exception(MOLD_NOT_EXISTS);
}
Long moldBrandId = mold.getBrandId() != null ? mold.getBrandId() : record.getMoldBrandId();
MoldBrandDO moldBrand = moldBrandMapper.selectById(moldBrandId);
if (moldBrand == null) {
throw exception(MOLD_SET_NOT_EXISTS);
}
record.setMoldBrandId(moldBrand.getId());
record.setMoldBrandName(moldBrand.getName());
record.setMoldName(mold.getName());
}
private void validateMoldPressureNetRecordExists(Long id) {
if (moldPressureNetRecordMapper.selectById(id) == null) {
throw exception(MOLD_PRESSURE_NET_RECORD_NOT_EXISTS);
}
}
}

@ -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<Long, MoldDO> moldMap = convertMap(moldList, MoldDO::getId);
List<MoldBrandDO> moldList = moldBrandService.validMoldList(
convertSet(list, ErpStockInSaveReqVO.Item::getProductId));
convertSet(list, ErpStockInSaveReqVO.Item::getId));
Map<Long, MoldBrandDO> moldMap = convertMap(moldList, MoldBrandDO::getId);
List<ErpProductDO> productList = productService.validProductList(
convertSet(moldList, MoldBrandDO::getProductId));
Map<Long, ErpProductDO> 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);
}
}
}

@ -0,0 +1,21 @@
<?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="cn.iocoder.yudao.module.erp.dal.mysql.mold.MoldPressureNetRecordMapper">
<select id="selectLatestListByMoldIds" resultType="cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldPressureNetRecordDO">
SELECT *
FROM erp_mold_pressure_net_record
WHERE id IN (
SELECT MAX(id)
FROM erp_mold_pressure_net_record
WHERE deleted = 0
and mold_id IN
<foreach collection="moldIds" item="moldId" open="(" separator="," close=")">
#{moldId}
</foreach>
GROUP BY mold_id
)
ORDER BY id DESC
</select>
</mapper>

@ -137,6 +137,14 @@ public class MoldTaskManagementController {
return success(true);
}
@PostMapping("/createMoldTicketDirect")
@Operation(summary = "直接创建工单管理")
@PreAuthorize("@ss.hasPermission('mes:mold-task-management:create')")
public CommonResult<Boolean> createTicketDirect(@Valid @RequestBody MoldTaskManagementCreateTicketReqVO createReqVO) {
moldtaskManagementService.createMoldTicketDirect(createReqVO);
return success(true);
}
private PageResult<MoldTaskManagementRespVO> buildPageCreatorName(PageResult<MoldTaskManagementRespVO> planMaintenanceRespVOPageResult) {
for (MoldTaskManagementRespVO planMaintenanceRespVO : planMaintenanceRespVOPageResult.getList()) {
@ -149,4 +157,4 @@ public class MoldTaskManagementController {
return planMaintenanceRespVOPageResult;
}
}
}

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

@ -53,4 +53,6 @@ public interface MoldTaskManagementService {
PageResult<MoldTaskManagementDO> getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO);
void createMoldTicket(Long id);
}
void createMoldTicketDirect(@Valid MoldTaskManagementCreateTicketReqVO createReqVO);
}

@ -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<Long> idList ) {
public void deleteMoldTaskManagement(List<Long> 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<MoldTaskManagementDO> getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) {
//
// PageResult<MoldTaskManagementDO> moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO);
// for (MoldTaskManagementDO moldtaskManagementDO : moldtaskManagementDOPageResult.getList()) {
// MoldPlanMaintenanceDO moldplanMaintenanceDO = moldplanMaintenanceMapper.selectById(moldtaskManagementDO.getProjectForm());
// moldtaskManagementDO.setProjectFormName(moldplanMaintenanceDO.getPlanName());
// }
//
//
// return moldtaskManagementDOPageResult;
// }
@Override
public PageResult<MoldTaskManagementDO> getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) {
// 1. 查询分页数据
PageResult<MoldTaskManagementDO> moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO);
// 2. 空列表直接返回,避免遍历空指针
if (CollectionUtils.isEmpty(moldtaskManagementDOPageResult.getList())) {
return moldtaskManagementDOPageResult;
}
// 3. 遍历处理每条数据,添加全量空值校验
for (MoldTaskManagementDO moldtaskManagementDO : moldtaskManagementDOPageResult.getList()) {
// 3.1 校验关联的维保计划IDprojectForm非空
Long projectFormId = moldtaskManagementDO.getProjectForm();
if (projectFormId == null) {
log.warn("模具任务{}的维保计划ID为空跳过计划名称填充", moldtaskManagementDO.getId());
moldtaskManagementDO.setProjectFormName("无维保计划"); // 兜底默认值
continue;
@Override
public PageResult<MoldTaskManagementDO> getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) {
PageResult<MoldTaskManagementDO> 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<MoldTicketManagementDO> 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<Long> 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<Long> 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<MoldSubjectDO> moldSubjectDOList = new ArrayList<>();
List<SubjectMoldPlanDO> subjectmoldPlanDOList = subjectmoldPlanMapper.selectList(Wrappers.<SubjectMoldPlanDO>lambdaQuery().eq(SubjectMoldPlanDO::getPlanId, moldticketManagementDO.getPlanId()));
List<SubjectMoldPlanDO> subjectmoldPlanDOList = subjectmoldPlanMapper.selectList(
Wrappers.<SubjectMoldPlanDO>lambdaQuery().eq(SubjectMoldPlanDO::getPlanId, planId));
for (SubjectMoldPlanDO subjectmoldPlanDO : subjectmoldPlanDOList) {
MoldSubjectDO moldSubjectDO = moldSubjectMapper.selectById(subjectmoldPlanDO.getSubjectId());
@ -207,19 +169,13 @@ public PageResult<MoldTaskManagementDO> 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;
}
}
}

Loading…
Cancel
Save