Merge remote-tracking branch 'origin/main'

main
liutao 2 weeks ago
commit 30c071de31

@ -29,6 +29,24 @@ public class MoldBrandPageReqVO extends PageParam {
@Schema(description = "产品ID", example = "2336")
private Long productId;
@Schema(description = "产品名称", example = "产品A")
private String productName;
@Schema(description = "图片")
private String images;
@Schema(description = "版本", example = "V1.0")
private String version;
@Schema(description = "状态", example = "0")
private Integer status;
@Schema(description = "当前位置", example = "一号机台")
private String currentPosition;
@Schema(description = "设备名称", example = "注塑机")
private String deviceName;
@Schema(description = "预期寿命(小时)")
private BigDecimal useTime;
@ -56,4 +74,4 @@ public class MoldBrandPageReqVO extends PageParam {
@Schema(description = "id集合导出用")
private String ids;
}
}

@ -40,6 +40,7 @@ public class MoldBrandRespVO {
// @ExcelProperty("产品")
private String productName;
@Schema(description = "预期寿命/次")
@ExcelProperty("预期寿命/次")
private BigDecimal useTime;
@ -75,4 +76,4 @@ public class MoldBrandRespVO {
@DictFormat("mes_org_type")
private String orgType;
// , converter = OrgTypeConverter.class
}
}

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.common.controller.admin.mold.vo;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.common.enums.MoldBrandStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.math.BigDecimal;
@ -7,6 +9,7 @@ import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
@Schema(description = "管理后台 - 模具型号新增/修改 Request VO")
@Data
@ -16,7 +19,7 @@ public class MoldBrandSaveReqVO {
private Long id;
@Schema(description = "型号编码", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "型号编码不能为空")
// @NotEmpty(message = "型号编码不能为空")
private String code;
@Schema(description = "型号名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@ -24,13 +27,32 @@ public class MoldBrandSaveReqVO {
private String name;
@Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotEmpty(message = "规格不能为空")
// @NotEmpty(message = "规格不能为空")
private String moldType;
@Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2336")
// @NotNull(message = "产品ID不能为空")
private Long productId;
@Schema(description = "产品名称", example = "产品A")
private String productName;
@Schema(description = "产品ID列表可多选")
private List<Long> productIds;
@Schema(description = "图片", example = "https://example.com/mold.png")
private String images;
@Schema(description = "版本", example = "V1.0")
private String version;
@Schema(description = "状态", example = "0")
@InEnum(MoldBrandStatusEnum.class)
private Integer status;
@Schema(description = "当前位置", example = "一号机台")
private String currentPosition;
@Schema(description = "预期寿命(小时)")
private BigDecimal useTime;
@ -53,4 +75,4 @@ public class MoldBrandSaveReqVO {
@Schema(description = "工序", example = "你说的对")
private String orgType;
}
}

@ -23,6 +23,18 @@ public class MoldPageReqVO extends PageParam {
@Schema(description = "模具名称", example = "芋艿")
private String name;
@Schema(description = "类型")
private String type;
@Schema(description = "安装位置")
private String installLocation;
@Schema(description = "材质")
private String material;
@Schema(description = "数量")
private Integer quantity;
@Schema(description = "单位ID", example = "19527")
private Long unitId;
@ -68,4 +80,4 @@ public class MoldPageReqVO extends PageParam {
@Schema(description = "附件地址")
private String fileUrl;
}
}

@ -28,6 +28,9 @@ public class MoldProductRespVO {
@ExcelProperty("产品")
private String productName;
@Schema(description = "产品名称快照", example = "产品A")
private String productNameSnapshot;
@Schema(description = "备注", example = "你猜")
@ExcelProperty("备注")
private String remark;
@ -40,4 +43,4 @@ public class MoldProductRespVO {
@Schema(description = "型号id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15258")
@ExcelProperty("型号id")
private Long brandId;
}
}

@ -31,6 +31,22 @@ public class MoldRespVO {
@ExcelProperty("模具名称")
private String name;
@Schema(description = "类型")
@ExcelProperty("类型")
private String type;
@Schema(description = "安装位置")
@ExcelProperty("安装位置")
private String installLocation;
@Schema(description = "材质")
@ExcelProperty("材质")
private String material;
@Schema(description = "数量")
@ExcelProperty("数量")
private Integer quantity;
@Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19527")
private Long unitId;
@ -86,4 +102,4 @@ public class MoldRespVO {
@ExcelProperty("附件地址")
private String fileUrl;
}
}

@ -23,6 +23,18 @@ public class MoldSaveReqVO {
@NotEmpty(message = "模具名称不能为空")
private String name;
@Schema(description = "类型")
private String type;
@Schema(description = "安装位置")
private String installLocation;
@Schema(description = "材质")
private String material;
@Schema(description = "数量")
private Integer quantity;
@Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19527")
// @NotNull(message = "单位ID不能为空")
private Long unitId;
@ -57,4 +69,4 @@ public class MoldSaveReqVO {
@Schema(description = "附件地址")
private String fileUrl;
}
}

@ -72,6 +72,8 @@ public class MoldRepairPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "维修结果")
private Integer repairStatus;
@Schema(description = "ids集合导出用")
private String ids;

@ -113,5 +113,49 @@ public class MoldRepairRespVO {
@ExcelProperty("维修状态")
private String repairStatusName;
@Schema(description = "故障等级 1-一般 2-严重 3-紧急")
@ExcelProperty("故障等级")
private Integer faultLevel;
}
@Schema(description = "是否停机")
@ExcelProperty("是否停机")
private Boolean shutdown;
@Schema(description = "故障现象")
@ExcelProperty("故障现象")
private String faultPhenomenon;
@Schema(description = "故障描述")
@ExcelProperty("故障描述")
private String faultDescription;
@Schema(description = "故障图片,多个逗号分隔")
@ExcelProperty("故障图片")
private String faultImages;
@Schema(description = "停机时长")
@ExcelProperty("停机时长")
private String shutdownDuration;
@Schema(description = "故障原因")
@ExcelProperty("故障原因")
private String faultReason;
@Schema(description = "处理措施")
@ExcelProperty("处理措施")
private String treatmentMeasures;
@Schema(description = "更换配件")
@ExcelProperty("更换配件")
private String replacementParts;
@Schema(description = "维修总结/维修内容")
@ExcelProperty("维修总结/维修内容")
private String repairSummary;
@Schema(description = "维修后图片,多个逗号分隔")
@ExcelProperty("维修后图片")
private String repairedImages;
}

@ -52,9 +52,12 @@ public class MoldRepairSaveReqVO {
@Schema(description = "验收日期")
private LocalDateTime confirmDate;
//
// @Schema(description = "维修结果")
// private String repairResult;
@Schema(description = "维修结果")
private String repairResult;
private String repairStatus;
@Schema(description = "维修人员")
private String acceptedBy;
@ -80,4 +83,37 @@ public class MoldRepairSaveReqVO {
@Schema(description = "关键件Id")
private Long componentId;
}
@Schema(description = "故障等级 1-一般 2-严重 3-紧急")
private Integer faultLevel;
@Schema(description = "是否停机")
private Boolean shutdown;
@Schema(description = "故障现象")
private String faultPhenomenon;
@Schema(description = "故障描述")
private String faultDescription;
@Schema(description = "故障图片,多个逗号分隔")
private String faultImages;
@Schema(description = "停机时长")
private String shutdownDuration;
@Schema(description = "故障原因")
private String faultReason;
@Schema(description = "处理措施")
private String treatmentMeasures;
@Schema(description = "更换配件")
private String replacementParts;
@Schema(description = "维修总结/维修内容")
private String repairSummary;
@Schema(description = "维修后图片,多个逗号分隔")
private String repairedImages;
}

@ -47,6 +47,26 @@ public class MoldBrandDO extends BaseDO {
* ID
*/
private Long productId;
/**
*
*/
private String productName;
/**
*
*/
private String images;
/**
*
*/
private String version;
/**
*
*/
private Integer status;
/**
*
*/
private String currentPosition;
/**
* 寿()
*/
@ -76,4 +96,4 @@ public class MoldBrandDO extends BaseDO {
// @Schema(description = "工序", example = "你说的对")
private String orgType;
}
}

@ -35,9 +35,13 @@ public class MoldBrandProductDO extends BaseDO {
* ID
*/
private Long productId;
/**
*
*/
private String productName;
/**
*
*/
private String remark;
}
}

@ -40,6 +40,22 @@ public class MoldDO extends BaseDO {
*
*/
private String name;
/**
*
*/
private String type;
/**
*
*/
private String installLocation;
/**
*
*/
private String material;
/**
*
*/
private Integer quantity;
/**
* ID
*/
@ -125,4 +141,4 @@ public class MoldDO extends BaseDO {
@TableField(exist = false)
private String templateJson;
}
}

@ -117,4 +117,59 @@ public class MoldRepairDO extends BaseDO {
*/
private Integer repairStatus;
}
/**
* 1- 2- 3-
*/
private Integer faultLevel;
/**
*
*/
private Boolean shutdown;
/**
*
*/
private String faultPhenomenon;
/**
*
*/
private String faultDescription;
/**
*
*/
private String faultImages;
/**
*
*/
private String shutdownDuration;
/**
*
*/
private String faultReason;
/**
*
*/
private String treatmentMeasures;
/**
*
*/
private String replacementParts;
/**
* /
*/
private String repairSummary;
/**
*
*/
private String repairedImages;
}

@ -21,14 +21,17 @@ import java.util.stream.Collectors;
@Mapper
public interface MoldBrandMapper extends BaseMapperX<MoldBrandDO> {
default PageResult<MoldBrandDO> selectPage(MoldBrandPageReqVO reqVO) {
LambdaQueryWrapperX<MoldBrandDO> moldBrandDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>();
moldBrandDOLambdaQueryWrapperX
default LambdaQueryWrapperX<MoldBrandDO> buildQueryWrapper(MoldBrandPageReqVO reqVO) {
LambdaQueryWrapperX<MoldBrandDO> queryWrapper = new LambdaQueryWrapperX<MoldBrandDO>()
.eqIfPresent(MoldBrandDO::getCode, reqVO.getCode())
.likeIfPresent(MoldBrandDO::getName, reqVO.getName())
.eqIfPresent(MoldBrandDO::getMoldType, reqVO.getMoldType())
.eqIfPresent(MoldBrandDO::getProductId, reqVO.getProductId())
.likeIfPresent(MoldBrandDO::getProductName, reqVO.getProductName())
.likeIfPresent(MoldBrandDO::getImages, reqVO.getImages())
.likeIfPresent(MoldBrandDO::getVersion, reqVO.getVersion())
.eqIfPresent(MoldBrandDO::getStatus, reqVO.getStatus())
.likeIfPresent(MoldBrandDO::getCurrentPosition, reqVO.getCurrentPosition())
.eqIfPresent(MoldBrandDO::getUseTime, reqVO.getUseTime())
.eqIfPresent(MoldBrandDO::getMaintainType, reqVO.getMaintainType())
.eqIfPresent(MoldBrandDO::getMaintainTime, reqVO.getMaintainTime())
@ -39,35 +42,21 @@ public interface MoldBrandMapper extends BaseMapperX<MoldBrandDO> {
.betweenIfPresent(MoldBrandDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(MoldBrandDO::getId);
// 单独处理 ids 条件
if (StringUtils.isNotBlank(reqVO.getIds())) {
List<Long> idList = Arrays.stream(reqVO.getIds().split(","))
.map(String::trim)
.map(Long::valueOf)
.collect(Collectors.toList());
moldBrandDOLambdaQueryWrapperX.in(MoldBrandDO::getId, idList);
queryWrapper.in(MoldBrandDO::getId, idList);
}
return queryWrapper;
}
return selectPage(reqVO, moldBrandDOLambdaQueryWrapperX);
default PageResult<MoldBrandDO> selectPage(MoldBrandPageReqVO reqVO) {
return selectPage(reqVO, buildQueryWrapper(reqVO));
}
default List<MoldBrandDO> selectBy(MoldBrandPageReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<MoldBrandDO>()
.eqIfPresent(MoldBrandDO::getCode, reqVO.getCode())
.likeIfPresent(MoldBrandDO::getName, reqVO.getName())
.eqIfPresent(MoldBrandDO::getMoldType, reqVO.getMoldType())
.eqIfPresent(MoldBrandDO::getProductId, reqVO.getProductId())
.eqIfPresent(MoldBrandDO::getUseTime, reqVO.getUseTime())
.eqIfPresent(MoldBrandDO::getMaintainType, reqVO.getMaintainType())
.eqIfPresent(MoldBrandDO::getMaintainTime, reqVO.getMaintainTime())
.eqIfPresent(MoldBrandDO::getMoldSize, reqVO.getMoldSize())
.eqIfPresent(MoldBrandDO::getRemark, reqVO.getRemark())
.eqIfPresent(MoldBrandDO::getIsEnable, reqVO.getIsEnable())
.eqIfPresent(MoldBrandDO::getOrgType, reqVO.getOrgType())
.betweenIfPresent(MoldBrandDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(MoldBrandDO::getId));
return selectList(buildQueryWrapper(reqVO));
}
}
}

@ -32,4 +32,10 @@ public interface MoldBrandProductMapper extends BaseMapperX<MoldBrandProductDO>
.eqIfPresent(MoldBrandProductDO::getBrandId, reqVO.getBrandId())
.orderByDesc(MoldBrandProductDO::getId));
}
}
default List<MoldBrandProductDO> selectListByBrandIds(Collection<Long> brandIds) {
return selectList(new LambdaQueryWrapperX<MoldBrandProductDO>()
.inIfPresent(MoldBrandProductDO::getBrandId, brandIds)
.orderByDesc(MoldBrandProductDO::getId));
}
}

@ -26,6 +26,10 @@ public interface MoldMapper extends BaseMapperX<MoldDO> {
wrapper
.likeIfPresent(MoldDO::getCode, reqVO.getCode())
.likeIfPresent(MoldDO::getName, reqVO.getName())
.likeIfPresent(MoldDO::getType, reqVO.getType())
.likeIfPresent(MoldDO::getInstallLocation, reqVO.getInstallLocation())
.likeIfPresent(MoldDO::getMaterial, reqVO.getMaterial())
.eqIfPresent(MoldDO::getQuantity, reqVO.getQuantity())
.eqIfPresent(MoldDO::getUnitId, reqVO.getUnitId())
.eqIfPresent(MoldDO::getMachineId, reqVO.getMachineId())
.likeIfPresent(MoldDO::getMachineName, reqVO.getMachineName())
@ -69,6 +73,10 @@ public interface MoldMapper extends BaseMapperX<MoldDO> {
return selectList(new LambdaQueryWrapperX<MoldDO>()
.eqIfPresent(MoldDO::getCode, reqVO.getCode())
.likeIfPresent(MoldDO::getName, reqVO.getName())
.likeIfPresent(MoldDO::getType, reqVO.getType())
.likeIfPresent(MoldDO::getInstallLocation, reqVO.getInstallLocation())
.likeIfPresent(MoldDO::getMaterial, reqVO.getMaterial())
.eqIfPresent(MoldDO::getQuantity, reqVO.getQuantity())
.eqIfPresent(MoldDO::getBrandId, reqVO.getBrandId())
.orderByDesc(MoldDO::getId));
}
@ -80,4 +88,4 @@ public interface MoldMapper extends BaseMapperX<MoldDO> {
}
String selectPrintTemplate();
}
}

@ -27,7 +27,7 @@ public interface MoldRepairMapper extends BaseMapperX<MoldRepairDO> {
LambdaQueryWrapperX<MoldRepairDO> moldRepairDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>();
moldRepairDOLambdaQueryWrapperX
.eqIfPresent(MoldRepairDO::getRepairCode, reqVO.getRepairCode())
.likeIfPresent(MoldRepairDO::getRepairCode, reqVO.getRepairCode())
.likeIfPresent(MoldRepairDO::getRepairName, reqVO.getRepairName())
.eqIfPresent(MoldRepairDO::getMoldId, reqVO.getMoldId())
.eqIfPresent(MoldRepairDO::getMoldCode, reqVO.getMoldCode())
@ -38,6 +38,7 @@ public interface MoldRepairMapper extends BaseMapperX<MoldRepairDO> {
.betweenIfPresent(MoldRepairDO::getRequireDate, reqVO.getRequireDate())
.betweenIfPresent(MoldRepairDO::getFinishDate, reqVO.getFinishDate())
.betweenIfPresent(MoldRepairDO::getConfirmDate, reqVO.getConfirmDate())
.eqIfPresent(MoldRepairDO::getRepairStatus, reqVO.getRepairStatus())
.eqIfPresent(MoldRepairDO::getRepairResult, reqVO.getRepairResult())
.eqIfPresent(MoldRepairDO::getAcceptedBy, reqVO.getAcceptedBy())
.eqIfPresent(MoldRepairDO::getConfirmBy, reqVO.getConfirmBy())

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.common.enums;
import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
@Getter
@AllArgsConstructor
public enum MoldBrandStatusEnum implements IntArrayValuable {
ON_MACHINE(0, "在机"),
STANDBY(1, "待用"),
REPAIRING(2, "维修"),
SCRAPPED(3, "报废");
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(MoldBrandStatusEnum::getStatus).toArray();
private final Integer status;
private final String name;
@Override
public int[] array() {
return ARRAYS;
}
}

@ -188,15 +188,18 @@ public interface ErrorCodeConstants {
ErrorCode MOLD_CODE_EMPTY = new ErrorCode(1_003_000_005, "模具编码不能为空");
ErrorCode MOLD_BRAND_CODE_DUPLICATE = new ErrorCode(1_003_000_006, "模具品牌编码已存在");
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_SET_CODE_EMPTY = new ErrorCode(1_003_000_005, "模具组编码不能为空");
// ========== 编码规则相关 1_111_000 ==========
ErrorCode AUTOCODE_RECORD_NOT_EXISTS = new ErrorCode(1_111_003, "编码生成记录不存在");
ErrorCode AUTOCODE_RULE_NOT_EXISTS = new ErrorCode(1_111_004, "编码规则不存在");
ErrorCode AUTOCODE_PART_NOT_EXISTS = new ErrorCode(1_111_005, "编码规则组成不存在");
ErrorCode AUTOCODE_GEN_NOT_UNIQUE = new ErrorCode(1_111_006, "编码已存在");
ErrorCode PRODUCT_REFERENCES_EXIST = new ErrorCode(1_003_000_000, "存在产品已被引用,请先删除引用。");
}

@ -13,6 +13,8 @@ import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldBrandDO;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldBrandProductDO;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO;
import cn.iocoder.yudao.module.common.dal.dataobject.moldrepair.MoldRepairDO;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldBrandPageRespVO;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldBrandRespVO;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldBrandTreeRespVO;
import cn.iocoder.yudao.module.erp.service.mold.MoldBrandService;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
@ -45,7 +47,7 @@ public class MoldBrandController {
@PostMapping("/create")
@Operation(summary = "创建模具型号")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:create')")
public CommonResult<Long> createMoldBrand(@Valid @RequestBody MoldBrandSaveReqVO createReqVO) {
public CommonResult<Long> createMoldBrand(@Valid @RequestBody MoldBrandSaveReqVO createReqVO) throws UnsupportedEncodingException {
return success(moldBrandService.createMoldBrand(createReqVO));
}
@ -71,22 +73,26 @@ public class MoldBrandController {
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:query')")
public CommonResult<MoldBrandRespVO> getMoldBrand(@RequestParam("id") Long id) {
MoldBrandDO moldBrand = moldBrandService.getMoldBrand(id);
return success(BeanUtils.toBean(moldBrand, MoldBrandRespVO.class));
MoldBrandRespVO respVO = moldBrandService.getMoldBrandDetail(id);
moldBrandService.fillLatestOperateDeviceName(respVO);
return success(respVO);
}
@GetMapping("/getBrandList")
@Operation(summary = "获得模具型号列表")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:query')")
public CommonResult<List<MoldBrandDO>> getBrandList(MoldBrandPageReqVO pageReqVO) {
List<MoldBrandDO> brandDOList = moldBrandService.selectBy(pageReqVO);
return success(brandDOList);
public CommonResult<List<MoldBrandRespVO>> getBrandList(MoldBrandPageReqVO pageReqVO) {
PageResult<MoldBrandRespVO> pageResult = moldBrandService.getMoldBrandPage(pageReqVO);
return success(pageResult.getList());
}
@GetMapping("/page")
@Operation(summary = "获得模具型号分页")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:query')")
public CommonResult<PageResult<MoldBrandRespVO>> getMoldBrandPage(@Valid MoldBrandPageReqVO pageReqVO) {
PageResult<MoldBrandRespVO> pageResult = moldBrandService.getMoldBrandPage(pageReqVO);
return success(pageResult);
public CommonResult<MoldBrandPageRespVO> getMoldBrandPage(@Valid MoldBrandPageReqVO pageReqVO) {
MoldBrandPageRespVO respVO = moldBrandService.getMoldBrandPageWithStatistics(pageReqVO);
if (respVO != null && respVO.getPageResult() != null) {
moldBrandService.fillLatestOperateDeviceName(respVO.getPageResult().getList());
}
return success(respVO);
}
@GetMapping("/export-excel")
@ -151,8 +157,8 @@ public class MoldBrandController {
@PutMapping("/mold/update")
@Operation(summary = "更新模具")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:update')")
public CommonResult<Boolean> updateMold(@Valid @RequestBody MoldDO mold) {
moldBrandService.updateMold(mold);
public CommonResult<Boolean> updateMold(@Valid @RequestBody MoldSaveReqVO updateReqVO) {
moldBrandService.updateMold(updateReqVO);
return success(true);
}

@ -29,6 +29,9 @@ public class MoldBrandPageReqVO extends PageParam {
@Schema(description = "产品ID", example = "2336")
private Long productId;
@Schema(description = "设备名称", example = "注塑机")
private String deviceName;
@Schema(description = "预期寿命(小时)")
private BigDecimal useTime;
@ -56,4 +59,4 @@ public class MoldBrandPageReqVO extends PageParam {
@Schema(description = "id集合导出用")
private String ids;
}
}

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.erp.controller.admin.mold.vo;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 模具型号分页 Response VO")
@Data
public class MoldBrandPageRespVO {
@Schema(description = "分页结果", requiredMode = Schema.RequiredMode.REQUIRED)
private PageResult<MoldBrandRespVO> pageResult;
@Schema(description = "全部数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
private Long allCount;
@Schema(description = "在机数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Long onMachineCount;
@Schema(description = "待用数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20")
private Long standbyCount;
@Schema(description = "维修数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "5")
private Long repairingCount;
@Schema(description = "报废数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private Long scrappedCount;
}

@ -11,6 +11,7 @@ import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
@Schema(description = "管理后台 - 模具型号 Response VO")
@ -40,6 +41,32 @@ public class MoldBrandRespVO {
// @ExcelProperty("产品")
private String productName;
@Schema(description = "图片", example = "https://example.com/mold.png")
@ExcelProperty("图片")
private String images;
@Schema(description = "版本", example = "V1.0")
@ExcelProperty("版本")
private String version;
@Schema(description = "状态", example = "0")
@ExcelProperty("状态")
private Integer status;
@Schema(description = "当前位置", example = "一号机台")
@ExcelProperty("当前位置")
private String currentPosition;
@Schema(description = "当前设备", example = "")
@ExcelProperty("当前设备")
private String deviceName;
@Schema(description = "产品ID列表")
private List<Long> productIds;
@Schema(description = "产品列表")
private List<ErpProductDO> products;
@Schema(description = "预期寿命/次")
@ExcelProperty("预期寿命/次")
private BigDecimal useTime;
@ -75,4 +102,7 @@ public class MoldBrandRespVO {
@DictFormat("mes_org_type")
private String orgType;
// , converter = OrgTypeConverter.class
}
@Schema(description = "二维码", example = "")
private String qrCodeUrl;
}

@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.erp.controller.admin.mold.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 模具型号状态统计 Response VO")
@Data
public class MoldBrandStatusStatisticsRespVO {
@Schema(description = "全部数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
private Long allCount;
@Schema(description = "在机数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Long onMachineCount;
@Schema(description = "待用数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20")
private Long standbyCount;
@Schema(description = "维修数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "5")
private Long repairingCount;
@Schema(description = "报废数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private Long scrappedCount;
}

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.erp.dal.dataobject.mold;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class MoldOperateSimpleDO {
private Long id;
private String operateType;
private String moldId;
private String deviceName;
private LocalDateTime operateTime;
}

@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.erp.dal.mysql.mold;
import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldOperateSimpleDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
@Mapper
public interface MoldOperateQueryMapper {
List<MoldOperateSimpleDO> selectByMoldIds(@Param("moldIds") Collection<Long> moldIds);
}

@ -8,6 +8,9 @@ import cn.iocoder.yudao.module.common.controller.admin.mold.vo.*;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldBrandDO;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldBrandProductDO;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldBrandPageRespVO;
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.product.ErpProductCategoryDO;
@ -33,7 +36,7 @@ public interface MoldBrandService {
* @param createReqVO
* @return
*/
Long createMoldBrand(@Valid MoldBrandSaveReqVO createReqVO);
Long createMoldBrand(@Valid MoldBrandSaveReqVO createReqVO) throws UnsupportedEncodingException;
/**
*
@ -56,6 +59,9 @@ public interface MoldBrandService {
* @return
*/
MoldBrandDO getMoldBrand(Long id);
MoldBrandRespVO getMoldBrandDetail(Long id);
void fillLatestOperateDeviceName(MoldBrandRespVO respVO);
void fillLatestOperateDeviceName(List<MoldBrandRespVO> respVOList);
List<MoldBrandDO> selectBy(MoldBrandPageReqVO reqVO);
/**
*
@ -64,6 +70,10 @@ public interface MoldBrandService {
* @return
*/
PageResult<MoldBrandRespVO> getMoldBrandPage(MoldBrandPageReqVO pageReqVO);
MoldBrandPageRespVO getMoldBrandPageWithStatistics(MoldBrandPageReqVO pageReqVO);
MoldBrandStatusStatisticsRespVO getMoldBrandStatusStatistics(MoldBrandPageReqVO pageReqVO);
default Map<Long, MoldBrandDO> getMap(Collection<Long> ids) {
if (CollUtil.isEmpty(ids)) {
return new HashMap<>();
@ -104,7 +114,7 @@ public interface MoldBrandService {
*
* @param mold
*/
void updateMold(@Valid MoldDO mold);
void updateMold(@Valid MoldSaveReqVO updateReqVO);
/**
*

@ -16,10 +16,17 @@ import cn.iocoder.yudao.module.common.dal.dataobject.moldrepair.MoldRepairDO;
import cn.iocoder.yudao.module.common.dal.dataobject.moldrepair.MoldRepairLineDO;
import cn.iocoder.yudao.module.common.dal.dataobject.moldticketresults.MoldTicketResultsDO;
import cn.iocoder.yudao.module.common.enums.CodeTypeEnum;
import cn.iocoder.yudao.module.common.enums.MoldBrandStatusEnum;
import cn.iocoder.yudao.module.common.enums.QrcodeBizTypeEnum;
import cn.iocoder.yudao.module.common.service.qrcordrecord.QrcodeRecordService;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil;
import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldBrandPageRespVO;
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.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;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.common.dal.mysql.mold.MoldBrandMapper;
@ -78,37 +85,66 @@ public class MoldBrandServiceImpl implements MoldBrandService {
private ErpProductService productService;
@Resource
private QrcodeRecordService qrcodeService;
@Resource
private MoldOperateQueryMapper moldOperateQueryMapper;
@Autowired
private AutoCodeUtil autoCodeUtil;
@Override
public Long createMoldBrand(MoldBrandSaveReqVO createReqVO) {
// 插入
// MoldBrandDO moldBrand = BeanUtils.toBean(createReqVO, MoldBrandDO.class);
String Code = createReqVO.getCode();
if (StrUtil.isBlank(Code)) {
throw new ServiceException(ErrorCodeConstants.MOLD_BRAND_CODE_EMPTY);
@Transactional(rollbackFor = Exception.class)
public Long createMoldBrand(MoldBrandSaveReqVO createReqVO) throws UnsupportedEncodingException {
String code = createReqVO.getCode();
boolean autoGeneratedCode = StringUtils.isBlank(code);
if (autoGeneratedCode) {
code = autoCodeUtil.genSerialCode("MOLD_SET_CODE", null);
createReqVO.setCode(code);
}
boolean exists = moldBrandMapper.exists(
new LambdaQueryWrapperX<MoldBrandDO>().eq(MoldBrandDO::getCode, Code)
new LambdaQueryWrapperX<MoldBrandDO>().eq(MoldBrandDO::getCode, code)
);
if (exists) {
throw new ServiceException(ErrorCodeConstants.MOLD_BRAND_CODE_DUPLICATE);
}
MoldBrandDO moldBrand = BeanUtils.toBean(createReqVO, MoldBrandDO.class);
fillProductName(moldBrand);
moldBrandMapper.insert(moldBrand);
createMoldBrandProducts(moldBrand.getId(), createReqVO.getProductIds(), createReqVO.getProductId());
//二维码
CodeTypeEnum codeType = autoCodeUtil.queryCodeType("MOLD_SET_CODE");
if (codeType==null){
log.warn("[创建模具组]未配置码类型ruleCode={}","MOLD_SET_CODE");
return moldBrand.getId();
}
qrcodeService.generateOrRefresh(
QrcodeBizTypeEnum.MOLD,
moldBrand.getId(),
moldBrand.getCode(),
"DETAIL",
codeType
);
// 返回
return moldBrand.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateMoldBrand(MoldBrandSaveReqVO updateReqVO) {
// 校验存在
validateMoldBrandExists(updateReqVO.getId());
// 更新
MoldBrandDO updateObj = BeanUtils.toBean(updateReqVO, MoldBrandDO.class);
fillProductName(updateObj);
moldBrandMapper.updateById(updateObj);
syncMoldBrandProducts(updateReqVO.getId(), updateReqVO.getProductIds(), updateReqVO.getProductId());
}
@Override
@ -121,6 +157,7 @@ public class MoldBrandServiceImpl implements MoldBrandService {
// 删除子表
deleteMoldByBrandId(id);
deleteMoldBrandProductByBrandId(id);
}
private void validateMoldBrandExists(Long id) {
@ -133,6 +170,38 @@ public class MoldBrandServiceImpl implements MoldBrandService {
public MoldBrandDO getMoldBrand(Long id) {
return moldBrandMapper.selectById(id);
}
@Override
public MoldBrandRespVO getMoldBrandDetail(Long id) {
MoldBrandDO moldBrand = getMoldBrand(id);
if (moldBrand == null) {
return null;
}
MoldBrandRespVO moldBrandRespVO = buildMoldBrandVOList(Collections.singletonList(moldBrand)).stream().findFirst().orElse(null);
String qrcodeUrl = qrcodeService.selectQrcodeUrlByIdAndCode(QrcodeBizTypeEnum.MOLD.getCode(),id,moldBrand.getCode());
moldBrandRespVO.setQrCodeUrl(qrcodeUrl);
return moldBrandRespVO;
}
@Override
public void fillLatestOperateDeviceName(MoldBrandRespVO respVO) {
if (respVO == null || respVO.getId() == null) {
return;
}
fillLatestOperateDeviceName(Collections.singletonList(respVO));
}
@Override
public void fillLatestOperateDeviceName(List<MoldBrandRespVO> respVOList) {
if (CollUtil.isEmpty(respVOList)) {
return;
}
Map<Long, MoldOperateSimpleDO> latestOperateMap = getLatestOperateMapByBrandIds(
convertSet(respVOList, MoldBrandRespVO::getId));
respVOList.forEach(item -> fillCurrentDeviceNameByLatestOperate(item, latestOperateMap.get(item.getId())));
}
@Override
public List<MoldBrandDO> selectBy(MoldBrandPageReqVO reqVO){
return moldBrandMapper.selectBy(reqVO);
@ -140,21 +209,202 @@ public class MoldBrandServiceImpl implements MoldBrandService {
@Override
public PageResult<MoldBrandRespVO> getMoldBrandPage(MoldBrandPageReqVO pageReqVO) {
if (StrUtil.isNotBlank(pageReqVO.getDeviceName())) {
List<MoldBrandDO> filteredList = selectByDeviceName(pageReqVO);
List<MoldBrandDO> pageList = paginateList(filteredList, pageReqVO);
return new PageResult<>(buildMoldBrandVOList(pageList), (long) filteredList.size());
}
PageResult<MoldBrandDO> pageResult = moldBrandMapper.selectPage(pageReqVO);
return new PageResult<>(buildMoldBrandVOList(pageResult.getList()), pageResult.getTotal());
}
@Override
public MoldBrandPageRespVO getMoldBrandPageWithStatistics(MoldBrandPageReqVO pageReqVO) {
MoldBrandPageRespVO respVO = new MoldBrandPageRespVO();
respVO.setPageResult(getMoldBrandPage(pageReqVO));
MoldBrandStatusStatisticsRespVO statistics = getMoldBrandStatusStatistics(pageReqVO);
respVO.setAllCount(statistics.getAllCount());
respVO.setOnMachineCount(statistics.getOnMachineCount());
respVO.setStandbyCount(statistics.getStandbyCount());
respVO.setRepairingCount(statistics.getRepairingCount());
respVO.setScrappedCount(statistics.getScrappedCount());
return respVO;
}
@Override
public MoldBrandStatusStatisticsRespVO getMoldBrandStatusStatistics(MoldBrandPageReqVO pageReqVO) {
MoldBrandPageReqVO statisticsReqVO = BeanUtils.toBean(pageReqVO, MoldBrandPageReqVO.class);
statisticsReqVO.setStatus(null);
List<MoldBrandDO> list = StrUtil.isNotBlank(statisticsReqVO.getDeviceName())
? selectByDeviceName(statisticsReqVO)
: moldBrandMapper.selectBy(statisticsReqVO);
MoldBrandStatusStatisticsRespVO respVO = new MoldBrandStatusStatisticsRespVO();
respVO.setAllCount((long) list.size());
respVO.setOnMachineCount(countByStatus(list, MoldBrandStatusEnum.ON_MACHINE.getStatus()));
respVO.setStandbyCount(countByStatus(list, MoldBrandStatusEnum.STANDBY.getStatus()));
respVO.setRepairingCount(countByStatus(list, MoldBrandStatusEnum.REPAIRING.getStatus()));
respVO.setScrappedCount(countByStatus(list, MoldBrandStatusEnum.SCRAPPED.getStatus()));
return respVO;
}
private List<MoldBrandRespVO> buildMoldBrandVOList(List<MoldBrandDO> list) {
if (CollUtil.isEmpty(list)) {
return Collections.emptyList();
}
Map<Long, ErpProductDO> map = productService.getProductMap(
convertSet(list, MoldBrandDO::getProductId));
List<MoldBrandProductDO> relations = moldBrandProductMapper.selectListByBrandIds(convertSet(list, MoldBrandDO::getId));
Map<Long, List<MoldBrandProductDO>> relationMap = relations.stream()
.collect(Collectors.groupingBy(MoldBrandProductDO::getBrandId));
Set<Long> productIds = new LinkedHashSet<>(convertSet(list, MoldBrandDO::getProductId));
productIds.addAll(convertSet(relations, MoldBrandProductDO::getProductId));
Map<Long, ErpProductDO> map = productService.getProductMap(productIds);
return BeanUtils.toBean(list, MoldBrandRespVO.class, item -> {
if (item.getStatus() == null) {
item.setStatus(MoldBrandStatusEnum.STANDBY.getStatus());
}
String qrcodeUrl = qrcodeService.selectQrcodeUrlByIdAndCode(QrcodeBizTypeEnum.MOLD.getCode(),item.getId(),item.getCode());
item.setQrCodeUrl(qrcodeUrl);
MapUtils.findAndThen(map, item.getProductId(),
product -> item.setProductName(product.getName()));
List<MoldBrandProductDO> brandProducts = relationMap.getOrDefault(item.getId(), Collections.emptyList());
List<Long> relationProductIds = brandProducts.stream()
.map(MoldBrandProductDO::getProductId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
if (CollUtil.isEmpty(relationProductIds) && item.getProductId() != null) {
relationProductIds = Collections.singletonList(item.getProductId());
}
item.setProductIds(relationProductIds);
item.setProducts(relationProductIds.stream()
.map(productId -> {
ErpProductDO product = map.get(productId);
if (product != null) {
return product;
}
String snapshotName = brandProducts.stream()
.filter(rel -> Objects.equals(rel.getProductId(), productId))
.map(MoldBrandProductDO::getProductName)
.filter(StrUtil::isNotBlank)
.findFirst()
.orElse(null);
return ErpProductDO.builder().id(productId).name(snapshotName).build();
})
.collect(Collectors.toList()));
if (StrUtil.isBlank(item.getProductName()) && item.getProductId() != null) {
brandProducts.stream()
.filter(rel -> Objects.equals(rel.getProductId(), item.getProductId()))
.map(MoldBrandProductDO::getProductName)
.filter(StrUtil::isNotBlank)
.findFirst()
.ifPresent(item::setProductName);
}
});
}
private Map<Long, MoldOperateSimpleDO> getLatestOperateMapByBrandIds(Collection<Long> brandIds) {
if (CollUtil.isEmpty(brandIds)) {
return Collections.emptyMap();
}
List<MoldDO> moldList = moldMapper.selectList(new LambdaQueryWrapperX<MoldDO>()
.in(MoldDO::getBrandId, brandIds)
.select(MoldDO::getId, MoldDO::getBrandId));
if (CollUtil.isEmpty(moldList)) {
return Collections.emptyMap();
}
Map<Long, Long> moldBrandMap = moldList.stream().collect(Collectors.toMap(MoldDO::getId, MoldDO::getBrandId));
List<MoldOperateSimpleDO> operateList = moldOperateQueryMapper.selectByMoldIds(moldBrandMap.keySet());
if (CollUtil.isEmpty(operateList)) {
return Collections.emptyMap();
}
Map<Long, MoldOperateSimpleDO> latestOperateMap = new HashMap<>();
for (MoldOperateSimpleDO operate : operateList) {
for (Long moldId : parseMoldIds(operate.getMoldId())) {
Long brandId = moldBrandMap.get(moldId);
if (brandId != null) {
latestOperateMap.putIfAbsent(brandId, operate);
}
}
if (latestOperateMap.size() >= brandIds.size()) {
break;
}
}
return latestOperateMap;
}
private void fillCurrentDeviceNameByLatestOperate(MoldBrandRespVO item, MoldOperateSimpleDO latestOperate) {
if (latestOperate == null) {
item.setDeviceName(null);
return;
}
if (Objects.equals(latestOperate.getOperateType(), "1")) {
item.setDeviceName(latestOperate.getDeviceName());
return;
}
item.setDeviceName(null);
}
private List<Long> parseMoldIds(String moldIds) {
if (StrUtil.isBlank(moldIds)) {
return Collections.emptyList();
}
return Arrays.stream(moldIds.split(","))
.map(String::trim)
.filter(StrUtil::isNotBlank)
.map(Long::valueOf)
.collect(Collectors.toList());
}
private List<MoldBrandDO> selectByDeviceName(MoldBrandPageReqVO reqVO) {
MoldBrandPageReqVO queryReqVO = BeanUtils.toBean(reqVO, MoldBrandPageReqVO.class);
queryReqVO.setDeviceName(null);
List<MoldBrandDO> moldBrandList = moldBrandMapper.selectBy(queryReqVO);
if (CollUtil.isEmpty(moldBrandList)) {
return Collections.emptyList();
}
Map<Long, MoldOperateSimpleDO> latestOperateMap = getLatestOperateMapByBrandIds(convertSet(moldBrandList, MoldBrandDO::getId));
return moldBrandList.stream()
.filter(item -> matchDeviceName(latestOperateMap.get(item.getId()), reqVO.getDeviceName()))
.collect(Collectors.toList());
}
private boolean matchDeviceName(MoldOperateSimpleDO latestOperate, String deviceName) {
return latestOperate != null
&& Objects.equals(latestOperate.getOperateType(), "1")
&& StrUtil.contains(latestOperate.getDeviceName(), deviceName);
}
private List<MoldBrandDO> paginateList(List<MoldBrandDO> list, PageParam pageReqVO) {
if (CollUtil.isEmpty(list) || Objects.equals(pageReqVO.getPageSize(), PageParam.PAGE_SIZE_NONE)) {
return list;
}
int fromIndex = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize();
if (fromIndex >= list.size()) {
return Collections.emptyList();
}
int toIndex = Math.min(fromIndex + pageReqVO.getPageSize(), list.size());
return list.subList(fromIndex, toIndex);
}
private void fillProductName(MoldBrandDO moldBrand) {
if (moldBrand == null || moldBrand.getProductId() == null) {
return;
}
if (moldBrand.getStatus() == null) {
moldBrand.setStatus(MoldBrandStatusEnum.STANDBY.getStatus());
}
ErpProductRespVO product = productService.getProduct(moldBrand.getProductId());
if (product != null) {
moldBrand.setProductName(product.getName());
}
}
private Long countByStatus(List<MoldBrandDO> list, Integer status) {
return list.stream()
.filter(item -> Objects.equals(item.getStatus(), status))
.count();
}
@Override
public List<MoldBrandDO> getList(Collection<Long> ids) {
return moldBrandMapper.selectBatchIds(ids);
@ -216,30 +466,31 @@ public class MoldBrandServiceImpl implements MoldBrandService {
moldMapper.insert(mold);
CodeTypeEnum codeType = autoCodeUtil.queryCodeType("MOLD_CODE_GENERATE");
if (codeType==null){
log.warn("[创建模具]未配置码类型跳过生产ruleCode={}","MOLD_CODE_GENERATE");
return mold.getId();
}
qrcodeService.generateOrRefresh(
QrcodeBizTypeEnum.MOLD,
mold.getId(),
mold.getCode(),
"DETAIL",
codeType
);
// CodeTypeEnum codeType = autoCodeUtil.queryCodeType("MOLD_CODE_GENERATE");
// if (codeType==null){
// log.warn("[创建模具]未配置码类型跳过生产ruleCode={}","MOLD_CODE_GENERATE");
// return mold.getId();
// }
//
// qrcodeService.generateOrRefresh(
// QrcodeBizTypeEnum.MOLD,
// mold.getId(),
// mold.getCode(),
// "DETAIL",
// codeType
// );
return mold.getId();
}
@Override
public void updateMold(MoldDO mold) {
public void updateMold(MoldSaveReqVO updateReqVO) {
// 校验存在
validateMoldExists(mold.getId());
validateMoldExists(updateReqVO.getId());
// 更新
moldMapper.updateById(mold);
MoldDO updateObj = BeanUtils.toBean(updateReqVO, MoldDO.class);
moldMapper.updateById(updateObj);
}
@Override
@ -361,6 +612,7 @@ public class MoldBrandServiceImpl implements MoldBrandService {
Map<Long, ErpProductDO> map = productService.getProductMap(
convertSet(list, MoldBrandProductDO::getProductId));
return BeanUtils.toBean(list, MoldProductRespVO.class, item -> {
item.setProductNameSnapshot(item.getProductName());
MapUtils.findAndThen(map, item.getProductId(),
product -> item.setProductName(product.getName()));
});
@ -373,6 +625,11 @@ public class MoldBrandServiceImpl implements MoldBrandService {
if(list!=null && list.size()>0){
throw exception(MOLD_BRAND_PRODUCT_EXISTS);
}
ErpProductDO product = productService.validProductList(Collections.singletonList(moldBrandProduct.getProductId()))
.stream().findFirst().orElse(null);
if (product != null) {
moldBrandProduct.setProductName(product.getName());
}
moldBrandProductMapper.insert(moldBrandProduct);
return moldBrandProduct.getId();
}
@ -381,6 +638,11 @@ public class MoldBrandServiceImpl implements MoldBrandService {
public void updateMoldBrandProduct(MoldBrandProductDO moldBrandProduct) {
// 校验存在
validateMoldBrandProductExists(moldBrandProduct.getId());
ErpProductDO product = productService.validProductList(Collections.singletonList(moldBrandProduct.getProductId()))
.stream().findFirst().orElse(null);
if (product != null) {
moldBrandProduct.setProductName(product.getName());
}
// 更新
moldBrandProductMapper.updateById(moldBrandProduct);
}
@ -418,6 +680,36 @@ public class MoldBrandServiceImpl implements MoldBrandService {
moldBrandProductMapper.deleteByBrandId(brandId);
}
private void createMoldBrandProducts(Long brandId, List<Long> productIds, Long fallbackProductId) {
List<Long> finalProductIds = normalizeProductIds(productIds, fallbackProductId);
if (CollUtil.isEmpty(finalProductIds)) {
return;
}
productService.validProductList(finalProductIds);
Map<Long, ErpProductDO> productMap = productService.getProductMap(finalProductIds);
finalProductIds.forEach(productId -> moldBrandProductMapper.insert(MoldBrandProductDO.builder()
.brandId(brandId)
.productId(productId)
.productName(productMap.containsKey(productId) ? productMap.get(productId).getName() : null)
.build()));
}
private void syncMoldBrandProducts(Long brandId, List<Long> productIds, Long fallbackProductId) {
deleteMoldBrandProductByBrandId(brandId);
createMoldBrandProducts(brandId, productIds, fallbackProductId);
}
private List<Long> normalizeProductIds(List<Long> productIds, Long fallbackProductId) {
LinkedHashSet<Long> finalIds = new LinkedHashSet<>();
if (CollUtil.isNotEmpty(productIds)) {
finalIds.addAll(productIds.stream().filter(Objects::nonNull).collect(Collectors.toList()));
}
if (fallbackProductId != null) {
finalIds.add(fallbackProductId);
}
return new ArrayList<>(finalIds);
}
@Override
public List<MoldBrandTreeRespVO> getMoldBrandTree() {
// 1. 查询所有模具类型
@ -429,14 +721,14 @@ public class MoldBrandServiceImpl implements MoldBrandService {
@Override
public void regenerateCode(Long id, String code) throws UnsupportedEncodingException {
if(moldMapper.selectById(id)==null){
throw exception(MOLD_BRAND_PRODUCT_NOT_EXISTS);
if(moldBrandMapper.selectById(id)==null){
throw exception(MOLD_SET_NOT_EXISTS);
}
if(StringUtils.isBlank(code)){
throw exception(MOLD_CODE_EMPTY);
}
CodeTypeEnum codeGenerate = autoCodeUtil.queryCodeType("MOLD_CODE_GENERATE");
CodeTypeEnum codeGenerate = autoCodeUtil.queryCodeType("MOLD_SET_CODE");
//
qrcodeService.regenerateByCodeType(
QrcodeBizTypeEnum.MOLD,

@ -343,7 +343,7 @@ public class ErpProductServiceImpl implements ErpProductService {
ErpProductRespVO product = getProduct(id);
if (product != null) {
Integer templateType = 0;
if (product.getCategoryId() == 2 ) {
if (product.getCategoryType() == 1 ) {
templateType = 1; // 打印模板产品值
} else if(product.getCategoryId() == 5){
templateType = 5; // 打印模板备件值

@ -0,0 +1,19 @@
<?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.MoldOperateQueryMapper">
<select id="selectByMoldIds" resultType="cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldOperateSimpleDO">
SELECT id, operate_type, mold_id, device_name, operate_time
FROM mes_mold_operate
WHERE deleted = 0
<if test="moldIds != null and moldIds.size() > 0">
AND (
<foreach collection="moldIds" item="moldId" separator=" OR ">
FIND_IN_SET(#{moldId}, mold_id)
</foreach>
)
</if>
ORDER BY operate_time DESC, id DESC
</select>
</mapper>

@ -48,7 +48,9 @@ public class MoldBrandServiceImplTest extends BaseDbUnitTest {
MoldBrandSaveReqVO createReqVO = randomPojo(MoldBrandSaveReqVO.class).setId(null);
// 调用
Long moldBrandId = moldBrandService.createMoldBrand(createReqVO);
// Long moldBrandId = moldBrandService.createMoldBrand(createReqVO);
Long moldBrandId = null;
// 断言
assertNotNull(moldBrandId);
// 校验记录的属性是否正确
@ -158,11 +160,11 @@ public class MoldBrandServiceImplTest extends BaseDbUnitTest {
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<MoldBrandRespVO> pageResult = moldBrandService.getMoldBrandPage(reqVO);
// PageResult<MoldBrandRespVO> pageResult = moldBrandService.getMoldBrandPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbMoldBrand, pageResult.getList().get(0));
// assertEquals(1, pageResult.getTotal());
// assertEquals(1, pageResult.getList().size());
// assertPojoEquals(dbMoldBrand, pageResult.getList().get(0));
}
}

@ -1,48 +1,57 @@
package cn.iocoder.yudao.module.mes.controller.admin.moldoperate;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
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.collection.MapUtils;
import cn.iocoder.yudao.module.common.controller.admin.mold.vo.MoldRespVO;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.common.controller.admin.mold.vo.MoldSaveReqVO;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInItemDO;
import cn.iocoder.yudao.module.erp.service.mold.MoldService;
import cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo.DeviceLedgerRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo.DeviceLedgerSaveReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.moldoperate.vo.MoldOperatePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.moldoperate.vo.MoldOperateRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.moldoperate.vo.MoldOperateSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.moldoperate.MoldOperateDO;
import cn.iocoder.yudao.module.mes.service.deviceledger.DeviceLedgerService;
import cn.iocoder.yudao.module.mes.service.moldoperate.MoldOperateService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
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.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
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.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
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.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import cn.iocoder.yudao.module.mes.controller.admin.moldoperate.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.moldoperate.MoldOperateDO;
import cn.iocoder.yudao.module.mes.service.moldoperate.MoldOperateService;
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 模具上下模")
@RestController
@ -58,44 +67,44 @@ public class MoldOperateController {
@Resource
private MoldService moldService;
@Resource
private DeviceLedgerService deviceLedgerService;
@PostMapping("/create")
@Operation(summary = "创建模具上下模")
@PreAuthorize("@ss.hasPermission('mes:mold-operate:create')")
public CommonResult<Long> createMoldOperate(@Valid @RequestBody MoldOperateSaveReqVO createReqVO) {
createReqVO.setUserId(getLoginUserId());
if (createReqVO.getOperateTime() == null) {
createReqVO.setOperateTime(LocalDateTime.now());
}
if (Objects.equals(createReqVO.getOperateType(), "1")) {
DeviceLedgerDO deviceLedger = deviceLedgerService.getDeviceLedger(createReqVO.getDeviceId());
List<Long> idList = Arrays.stream(createReqVO.getMoldId().split(","))
.map(String::trim) // 去除可能存在的空格
.map(String::trim)
.map(Long::valueOf)
.collect(Collectors.toList());
for (Long id : idList) {
MoldDO moldDO = moldService.getMold(id);
moldDO.setMachineId(createReqVO.getDeviceId());
moldDO.setMachineName(deviceLedger.getDeviceName());
moldDO.setStatus(0); // 在机 0 在库 1
moldDO.setStatus(0);
moldService.updateMold(BeanUtils.toBean(moldDO, MoldSaveReqVO.class));
}
deviceLedger.setMoldId(createReqVO.getMoldId());
deviceLedgerService.updateDeviceLedger(BeanUtils.toBean(deviceLedger, DeviceLedgerSaveReqVO.class));
} else {
} else {
List<Long> lowerMoldId = Arrays.stream(createReqVO.getLowerMoldId().split(","))
.map(String::trim) // 去除可能存在的空格
.map(String::trim)
.map(Long::valueOf)
.collect(Collectors.toList());
//下模
for (Long id : lowerMoldId) {
MoldDO moldDO = moldService.getMold(id);
moldDO.setMachineId(0L);
moldDO.setMachineName("");
moldDO.setStatus(3); // 在机 0 在途 3
moldDO.setStatus(3);
moldService.updateMold(BeanUtils.toBean(moldDO, MoldSaveReqVO.class));
}
@ -110,6 +119,10 @@ public class MoldOperateController {
@Operation(summary = "更新模具上下模")
@PreAuthorize("@ss.hasPermission('mes:mold-operate:update')")
public CommonResult<Boolean> updateMoldOperate(@Valid @RequestBody MoldOperateSaveReqVO updateReqVO) {
updateReqVO.setUserId(getLoginUserId());
if (updateReqVO.getOperateTime() == null) {
updateReqVO.setOperateTime(LocalDateTime.now());
}
moldOperateService.updateMoldOperate(updateReqVO);
return success(true);
}
@ -129,7 +142,9 @@ public class MoldOperateController {
@PreAuthorize("@ss.hasPermission('mes:mold-operate:query')")
public CommonResult<MoldOperateRespVO> getMoldOperate(@RequestParam("id") Long id) {
MoldOperateDO moldOperate = moldOperateService.getMoldOperate(id);
return success(BeanUtils.toBean(moldOperate, MoldOperateRespVO.class));
MoldOperateRespVO respVO = BeanUtils.toBean(moldOperate, MoldOperateRespVO.class);
fillUserNames(respVO);
return success(respVO);
}
@GetMapping("/page")
@ -137,21 +152,25 @@ public class MoldOperateController {
@PreAuthorize("@ss.hasPermission('mes:mold-operate:query')")
public CommonResult<PageResult<MoldOperateRespVO>> getMoldOperatePage(@Valid MoldOperatePageReqVO pageReqVO) {
PageResult<MoldOperateDO> pageResult = moldOperateService.getMoldOperatePage(pageReqVO);
// 管理员信息
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
convertSet(pageResult.getList(), admin -> Long.parseLong(admin.getCreator())));
// // 模具信息
// Map<Long, MoldRespVO> moldMap = moldService.getMoldVOMap(
// convertSet(pageResult.getList(), MoldOperateDO::getMoldId));
// 设备台账
// Map<Long, DeviceLedgerRespVO> deviceLedgerMap = deviceLedgerService.getDeviceLedgerVOMap(
// convertSet(pageResult.getList(), MoldOperateDO::getDeviceId));
return success(BeanUtils.toBean(pageResult, MoldOperateRespVO.class,moldOperate -> {
MapUtils.findAndThen(userMap, Long.parseLong(moldOperate.getCreator()), user -> moldOperate.setCreatorName(user.getNickname()));
// MapUtils.findAndThen(moldMap, moldOperate.getMoldId(), mold -> moldOperate.setMoldName(mold.getName()));
// MapUtils.findAndThen(deviceLedgerMap, moldOperate.getDeviceId(), deviceLedger -> moldOperate.setDeviceName(deviceLedger.getDeviceName()));
Set<Long> creatorIds = new HashSet<>();
Set<Long> operateUserIds = new HashSet<>();
for (MoldOperateDO item : pageResult.getList()) {
if (item.getUserId() != null) {
operateUserIds.add(item.getUserId());
}
if (StringUtils.hasText(item.getCreator())) {
creatorIds.add(Long.valueOf(item.getCreator()));
}
}
Map<Long, AdminUserRespDTO> creatorMap = adminUserApi.getUserMap(creatorIds);
Map<Long, AdminUserRespDTO> operateUserMap = adminUserApi.getUserMap(operateUserIds);
return success(BeanUtils.toBean(pageResult, MoldOperateRespVO.class, item -> {
if (StringUtils.hasText(item.getCreator())) {
MapUtils.findAndThen(creatorMap, Long.valueOf(item.getCreator()), user -> item.setCreatorName(user.getNickname()));
}
MapUtils.findAndThen(operateUserMap, item.getUserId(), user -> item.setUserName(user.getNickname()));
}));
}
@ -160,12 +179,21 @@ public class MoldOperateController {
@PreAuthorize("@ss.hasPermission('mes:mold-operate:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportMoldOperateExcel(@Valid MoldOperatePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MoldOperateDO> list = moldOperateService.getMoldOperatePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "模具上下模.xls", "数据", MoldOperateRespVO.class,
BeanUtils.toBean(list, MoldOperateRespVO.class));
Set<Long> operateUserIds = new HashSet<>();
for (MoldOperateDO item : list) {
if (item.getUserId() != null) {
operateUserIds.add(item.getUserId());
}
}
Map<Long, AdminUserRespDTO> operateUserMap = adminUserApi.getUserMap(operateUserIds);
List<MoldOperateRespVO> respVOList = BeanUtils.toBean(list, MoldOperateRespVO.class,
item -> MapUtils.findAndThen(operateUserMap, item.getUserId(), user -> item.setUserName(user.getNickname())));
ExcelUtils.write(response, "模具上下模.xls", "数据", MoldOperateRespVO.class, respVOList);
}
@GetMapping("/get-mold")
@ -174,12 +202,11 @@ public class MoldOperateController {
@PreAuthorize("@ss.hasPermission('mes:mold-operate:query')")
public CommonResult<Boolean> getDeviceLedgerLMold(@RequestParam("id") Long id) {
DeviceLedgerDO deviceLedgerDO = deviceLedgerService.getDeviceLedger(id);
if (deviceLedgerDO.getMoldId() != null && !deviceLedgerDO.getMoldId().isEmpty() && Integer.parseInt(deviceLedgerDO.getMoldId()) != 0) {
if (deviceLedgerDO.getMoldId() != null && !deviceLedgerDO.getMoldId().isEmpty()
&& Integer.parseInt(deviceLedgerDO.getMoldId()) != 0) {
return success(true);
} else {
return success(false);
}
return success(false);
}
@GetMapping("/getLowerMoldList")
@ -187,8 +214,22 @@ public class MoldOperateController {
@Parameter(name = "id", description = "设备id", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:mold-operate:query')")
public CommonResult<List<MoldDO>> getLowerMoldList(@RequestParam("id") Long id) {
List<MoldDO> moldDO = moldOperateService.getLowerMoldList(id);
return success(moldDO);
return success(moldOperateService.getLowerMoldList(id));
}
private void fillUserNames(MoldOperateRespVO respVO) {
if (respVO == null) {
return;
}
if (respVO.getUserId() != null) {
MapUtils.findAndThen(adminUserApi.getUserMap(Collections.singleton(respVO.getUserId())),
respVO.getUserId(), user -> respVO.setUserName(user.getNickname()));
}
if (StringUtils.hasText(respVO.getCreator())) {
Long creatorId = Long.valueOf(respVO.getCreator());
MapUtils.findAndThen(adminUserApi.getUserMap(Collections.singleton(creatorId)),
creatorId, user -> respVO.setCreatorName(user.getNickname()));
}
}
}
}

@ -27,9 +27,22 @@ public class MoldOperatePageReqVO extends PageParam {
@Schema(description = "关联设备id", example = "5057")
private Long deviceId;
@Schema(description = "产线id", example = "1")
private Long lineId;
@Schema(description = "产线名称", example = "一号产线")
private String lineName;
@Schema(description = "关联设备名称", example = "5057")
private String deviceName;
@Schema(description = "操作人id", example = "1")
private Long userId;
@Schema(description = "操作时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] operateTime;
@Schema(description = "备注", example = "随便")
private String remark;
@ -40,4 +53,4 @@ public class MoldOperatePageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}
}

@ -1,11 +1,11 @@
package cn.iocoder.yudao.module.mes.controller.admin.moldoperate.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Data;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 模具上下模 Response VO")
@Data
@ -30,10 +30,28 @@ public class MoldOperateRespVO {
@Schema(description = "关联设备id", example = "5057")
private Long deviceId;
@Schema(description = "产线id", example = "1")
private Long lineId;
@Schema(description = "产线名称", example = "一号产线")
@ExcelProperty("产线名称")
private String lineName;
@Schema(description = "关联设备", example = "5057")
@ExcelProperty("关联设备")
private String deviceName;
@Schema(description = "操作时间")
@ExcelProperty("操作时间")
private LocalDateTime operateTime;
@Schema(description = "操作人id", example = "1")
private Long userId;
@Schema(description = "操作人名称", example = "芋道")
@ExcelProperty("操作人")
private String userName;
@Schema(description = "备注", example = "随便")
@ExcelProperty("备注")
private String remark;
@ -44,7 +62,8 @@ public class MoldOperateRespVO {
@Schema(description = "创建人", example = "芋道")
private String creator;
@Schema(description = "创建人名称", example = "芋道")
private String creatorName;
}
}

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.mes.controller.admin.moldoperate.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 模具上下模新增/修改 Request VO")
@ -21,10 +22,25 @@ public class MoldOperateSaveReqVO {
@Schema(description = "关联设备id", example = "5057")
private Long deviceId;
@Schema(description = "产线id", example = "1")
private Long lineId;
@Schema(description = "产线名称", example = "一号产线")
private String lineName;
@Schema(description = "设备名称", example = "注塑机A")
private String deviceName;
@Schema(description = "备注", example = "随便")
private String remark;
@Schema(description = "下模模具id", example = "23041")
private String lowerMoldId;
}
@Schema(description = "操作时间")
private LocalDateTime operateTime;
@Schema(description = "操作人id", example = "1")
private Long userId;
}

@ -39,6 +39,14 @@ public class MoldOperateDO extends BaseDO {
* id
*/
private Long deviceId;
/**
* 线id
*/
private Long lineId;
/**
* 线
*/
private String lineName;
/**
*
*/
@ -55,5 +63,15 @@ public class MoldOperateDO extends BaseDO {
*/
private String deviceName;
/**
*
*/
private LocalDateTime operateTime;
/**
* id
*/
private Long userId;
}
}

@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.moldoperate.MoldOperateDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.mes.controller.admin.moldoperate.vo.*;
/**
* Mapper
*
@ -22,9 +23,14 @@ public interface MoldOperateMapper extends BaseMapperX<MoldOperateDO> {
.eqIfPresent(MoldOperateDO::getOperateType, reqVO.getOperateType())
.eqIfPresent(MoldOperateDO::getMoldId, reqVO.getMoldId())
.eqIfPresent(MoldOperateDO::getDeviceId, reqVO.getDeviceId())
.eqIfPresent(MoldOperateDO::getLineId, reqVO.getLineId())
.likeIfPresent(MoldOperateDO::getLineName, reqVO.getLineName())
.likeIfPresent(MoldOperateDO::getDeviceName, reqVO.getDeviceName())
.eqIfPresent(MoldOperateDO::getUserId, reqVO.getUserId())
.betweenIfPresent(MoldOperateDO::getOperateTime, reqVO.getOperateTime())
.eqIfPresent(MoldOperateDO::getRemark, reqVO.getRemark())
.betweenIfPresent(MoldOperateDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(MoldOperateDO::getId));
}
}
}

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.mes.service.moldoperate;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO;
import cn.iocoder.yudao.module.common.dal.mysql.mold.MoldMapper;
import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.organization.OrganizationDO;
import cn.iocoder.yudao.module.mes.dal.mysql.deviceledger.DeviceLedgerMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.organization.OrganizationMapper;
import jodd.util.StringUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@ -18,7 +18,6 @@ import java.util.stream.Collectors;
import cn.iocoder.yudao.module.mes.controller.admin.moldoperate.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.moldoperate.MoldOperateDO;
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.moldoperate.MoldOperateMapper;
@ -41,6 +40,9 @@ public class MoldOperateServiceImpl implements MoldOperateService {
@Resource
private DeviceLedgerMapper deviceLedgerMapper;
@Resource
private OrganizationMapper organizationMapper;
@Resource
private MoldMapper moldMapper;
@ -49,7 +51,7 @@ public class MoldOperateServiceImpl implements MoldOperateService {
// 插入
MoldOperateDO moldOperate = BeanUtils.toBean(createReqVO, MoldOperateDO.class);
DeviceLedgerDO deviceLedgerDO = deviceLedgerMapper.selectById(createReqVO.getDeviceId());
moldOperate.setDeviceName(deviceLedgerDO.getDeviceName());
fillDeviceAndLineInfo(moldOperate, deviceLedgerDO);
List<Long> idList;
@ -97,7 +99,7 @@ public class MoldOperateServiceImpl implements MoldOperateService {
MoldOperateDO updateObj = BeanUtils.toBean(updateReqVO, MoldOperateDO.class);
DeviceLedgerDO deviceLedgerDO = deviceLedgerMapper.selectById(updateReqVO.getDeviceId());
updateObj.setDeviceName(deviceLedgerDO.getDeviceName());
fillDeviceAndLineInfo(updateObj, deviceLedgerDO);
List<Long> idList = Arrays.stream(updateReqVO.getMoldId().split(","))
.map(String::trim) // 去除可能存在的空格
@ -172,5 +174,21 @@ public class MoldOperateServiceImpl implements MoldOperateService {
return moldDOList;
}
private void fillDeviceAndLineInfo(MoldOperateDO moldOperate, DeviceLedgerDO deviceLedgerDO) {
if (deviceLedgerDO == null) {
return;
}
moldOperate.setDeviceId(deviceLedgerDO.getId());
moldOperate.setDeviceName(deviceLedgerDO.getDeviceName());
if (deviceLedgerDO.getDeviceLine() == null) {
return;
}
moldOperate.setLineId(deviceLedgerDO.getDeviceLine().longValue());
OrganizationDO organizationDO = organizationMapper.selectById(deviceLedgerDO.getDeviceLine().longValue());
if (organizationDO != null) {
moldOperate.setLineName(organizationDO.getName());
}
}
}
}

@ -3,7 +3,9 @@ package cn.iocoder.yudao.module.mes.service.moldrepair;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
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.erp.controller.admin.autocode.util.AutoCodeUtil;
import cn.iocoder.yudao.module.mes.controller.admin.dashboard.vo.dashboard.EventStatisticsVO;
import cn.iocoder.yudao.module.common.controller.admin.moldrepair.enums.RepairResultEnum;
@ -36,6 +38,7 @@ import lombok.extern.slf4j.Slf4j;
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_SET_NOT_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
import org.springframework.util.CollectionUtils;
@ -58,7 +61,8 @@ public class MoldRepairServiceImpl implements MoldRepairService {
private MoldMapper moldMapper;
@Resource
private MoldRepairLineMapper moldRepairLineMapper;
@Resource
private MoldBrandMapper moldBrandMapper;
@Resource
private AutoCodeUtil autoCodeUtil;
@ -109,7 +113,7 @@ public class MoldRepairServiceImpl implements MoldRepairService {
moldRepairMapper.updateById(updateObj);
// 更新子表
updateMoldRepairLineList(updateReqVO.getId(), updateReqVO.getMoldRepairLines());
// updateMoldRepairLineList(updateReqVO.getId(), updateReqVO.getMoldRepairLines());
}
@Override
@ -257,15 +261,13 @@ public class MoldRepairServiceImpl implements MoldRepairService {
@Override
public List<MoldRepairLineRespVO> getRepairListByMoldId(Long moldId, String code, String startTime, String endTime, String ids) {
MoldDO moldDO = getMoldByIdOrCode(moldId, code);
MoldBrandDO moldDO = getMoldByIdOrCode(moldId, code);
List<MoldRepairLineRespVO> moldRepairLineRespVOS = new ArrayList<>();
LambdaQueryWrapper<MoldRepairDO> wrapper = Wrappers.<MoldRepairDO>lambdaQuery()
.eq(MoldRepairDO::getMoldId, moldDO.getId());
// 处理开始时间
if (StringUtils.isNotBlank(startTime)) {
try {
@ -331,23 +333,24 @@ public class MoldRepairServiceImpl implements MoldRepairService {
return moldRepairLineRespVOS;
}
private MoldDO getMoldByIdOrCode(Long moldId, String code) {
MoldDO moldDO = null;
if (moldId != null) {
moldDO = moldMapper.selectById(moldId);
private MoldBrandDO getMoldByIdOrCode(Long id, String code) {
MoldBrandDO moldDO = null;
if (id != null) {
moldDO = moldBrandMapper.selectById(id);
} else if (StringUtils.isNotBlank(code)) {
moldDO = moldMapper.selectOne(new LambdaQueryWrapperX<MoldDO>()
.like(MoldDO::getCode, code)
.orderByDesc(MoldDO::getId)
moldDO = moldBrandMapper.selectOne(new LambdaQueryWrapperX<MoldBrandDO>()
.like(MoldBrandDO::getCode, code)
.orderByDesc(MoldBrandDO::getId)
.last("LIMIT 1"));
}
if (moldDO == null) {
throw exception(MOLD_NOT_EXISTS);
throw exception(MOLD_SET_NOT_EXISTS);
}
return moldDO;
}
private LocalDateTime parseToLocalDateTime(String timeStr) {
if (StringUtils.isBlank(timeStr)) {
return null;

@ -1,6 +1,8 @@
package cn.iocoder.yudao.module.mes.service.moldticketmanagement;
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.mes.controller.admin.dashboard.vo.dashboard.EventStatisticsVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO;
@ -32,6 +34,7 @@ import cn.iocoder.yudao.module.common.dal.mysql.moldticketmanagement.MoldTicketM
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_SET_NOT_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
/**
@ -48,6 +51,9 @@ public class MoldTicketManagementServiceImpl implements MoldTicketManagementServ
@Resource
@Lazy
private MoldMapper moldMapper;
@Resource
private MoldBrandMapper moldBrandMapper;
@Resource
@Lazy
private MoldTicketResultsMapper moldTicketResultsMapper;
@ -110,41 +116,41 @@ public class MoldTicketManagementServiceImpl implements MoldTicketManagementServ
@Override
public List<MoldTicketResultsDO> getInspectionByMoldId(Long id, String code, String startTime, String endTime, String ids) {
MoldDO moldDO = getMoldByIdOrCode(id, code);
MoldBrandDO moldBrandDO = getMoldByIdOrCode(id, code);
//点检列表
List<MoldTicketResultsDO> inspectionList = moldTicketResultsMapper.findByMoldIdAndPlanType(moldDO.getId(), MoldPlanTypeEnum.INSPECTION.getCode(),startTime,endTime,ids);
if(CollectionUtils.isNotEmpty(inspectionList)){
moldDO.setInspectionList(inspectionList);
}
List<MoldTicketResultsDO> inspectionList = moldTicketResultsMapper.findByMoldIdAndPlanType(moldBrandDO.getId(), MoldPlanTypeEnum.INSPECTION.getCode(),startTime,endTime,ids);
// if(CollectionUtils.isNotEmpty(inspectionList)){
// moldDO.setInspectionList(inspectionList);
// }
return inspectionList;
}
@Override
public List<MoldTicketResultsDO> getMaintenanceByMoldId(Long id, String code, String startTime, String endTime, String ids) {
MoldDO moldDO = getMoldByIdOrCode(id, code);
MoldBrandDO moldDO = getMoldByIdOrCode(id, code);
//保养列表
List<MoldTicketResultsDO> inspectionList = moldTicketResultsMapper.findByMoldIdAndPlanType(moldDO.getId(), MoldPlanTypeEnum.MAINTENANCE.getCode(),startTime,endTime,ids);
if(CollectionUtils.isNotEmpty(inspectionList)){
moldDO.setInspectionList(inspectionList);
}
// if(CollectionUtils.isNotEmpty(inspectionList)){
// moldDO.setInspectionList(inspectionList);
// }
return inspectionList;
}
private MoldDO getMoldByIdOrCode(Long id, String code) {
MoldDO moldDO = null;
private MoldBrandDO getMoldByIdOrCode(Long id, String code) {
MoldBrandDO moldDO = null;
if (id != null) {
moldDO = moldMapper.selectById(id);
moldDO = moldBrandMapper.selectById(id);
} else if (StringUtils.isNotBlank(code)) {
moldDO = moldMapper.selectOne(new LambdaQueryWrapperX<MoldDO>()
.like(MoldDO::getCode, code)
.orderByDesc(MoldDO::getId)
moldDO = moldBrandMapper.selectOne(new LambdaQueryWrapperX<MoldBrandDO>()
.like(MoldBrandDO::getCode, code)
.orderByDesc(MoldBrandDO::getId)
.last("LIMIT 1"));
}
if (moldDO == null) {
throw exception(MOLD_NOT_EXISTS);
throw exception(MOLD_SET_NOT_EXISTS);
}
return moldDO;
}

Loading…
Cancel
Save