diff --git a/klp-wms/src/main/java/com/klp/controller/WmsCoilAbnormalController.java b/klp-wms/src/main/java/com/klp/controller/WmsCoilAbnormalController.java new file mode 100644 index 00000000..7cebce26 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/controller/WmsCoilAbnormalController.java @@ -0,0 +1,113 @@ +package com.klp.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import com.klp.common.enums.BusinessType; +import com.klp.common.utils.poi.ExcelUtil; +import com.klp.domain.vo.WmsCoilAbnormalVo; +import com.klp.domain.bo.WmsCoilAbnormalBo; +import com.klp.service.IWmsCoilAbnormalService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 钢卷异常信息 + * + * @author klp + * @date 2025-12-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/wms/coilAbnormal") +public class WmsCoilAbnormalController extends BaseController { + + private final IWmsCoilAbnormalService iWmsCoilAbnormalService; + + /** + * 查询钢卷异常信息列表 + */ + @GetMapping("/list") + public TableDataInfo list(WmsCoilAbnormalBo bo, PageQuery pageQuery) { + return iWmsCoilAbnormalService.queryPageList(bo, pageQuery); + } + + /** + * 导出钢卷异常信息列表 + */ + @Log(title = "钢卷异常信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WmsCoilAbnormalBo bo, HttpServletResponse response) { + List list = iWmsCoilAbnormalService.queryList(bo); + ExcelUtil.exportExcel(list, "钢卷异常信息", WmsCoilAbnormalVo.class, response); + } + + /** + * 获取钢卷异常信息详细信息 + * + * @param abnormalId 主键 + */ + @GetMapping("/{abnormalId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long abnormalId) { + return R.ok(iWmsCoilAbnormalService.queryById(abnormalId)); + } + + /** + * 新增钢卷异常信息 + */ + @Log(title = "钢卷异常信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WmsCoilAbnormalBo bo) { + return toAjax(iWmsCoilAbnormalService.insertByBo(bo)); + } + + /** + * 修改钢卷异常信息 + */ + @Log(title = "钢卷异常信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WmsCoilAbnormalBo bo) { + return toAjax(iWmsCoilAbnormalService.updateByBo(bo)); + } + + /** + * 删除钢卷异常信息 + * + * @param abnormalIds 主键串 + */ + @Log(title = "钢卷异常信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{abnormalIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] abnormalIds) { + return toAjax(iWmsCoilAbnormalService.deleteWithValidByIds(Arrays.asList(abnormalIds), true)); + } + + /** + * 判级 + * + * @param abnormalId 异常ID + * @param judgeLevel 判级 + */ + @Log(title = "钢卷异常信息判级", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/judge") + public R judge(@RequestParam @NotNull(message = "异常ID不能为空") Long abnormalId, + @RequestParam @NotBlank(message = "判级不能为空") String judgeLevel) { + return toAjax(iWmsCoilAbnormalService.judge(abnormalId, judgeLevel)); + } +} diff --git a/klp-wms/src/main/java/com/klp/domain/WmsCoilAbnormal.java b/klp-wms/src/main/java/com/klp/domain/WmsCoilAbnormal.java new file mode 100644 index 00000000..c354d46f --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/WmsCoilAbnormal.java @@ -0,0 +1,71 @@ +package com.klp.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 钢卷异常信息对象 wms_coil_abnormal + * + * @author klp + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wms_coil_abnormal") +public class WmsCoilAbnormal extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键ID + */ + @TableId(value = "abnormal_id") + private Long abnormalId; + /** + * 钢卷ID + */ + private Long coilId; + /** + * 位置(上下,操作侧,中间,驱动侧) + */ + private String position; + /** + * 长度坐标 + */ + private String lengthCoord; + /** + * 缺陷代码(S=表面缺陷、E=边部问题、M=尺寸问题、G=收卷问题) + */ + private String defectCode; + /** + * 程度(轻微、重度、严重) + */ + private String degree; + /** + * 判级 + */ + private String judgeLevel; + /** + * 判级人 + */ + private String judgeBy; + /** + * 判级时间 + */ + private Date judgeTime; + /** + * 备注 + */ + private String remark; + /** + * 删除标志(0=正常,1=已删除) + */ + @TableLogic + private Integer delFlag; + +} diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsCoilAbnormalBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsCoilAbnormalBo.java new file mode 100644 index 00000000..89626be6 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsCoilAbnormalBo.java @@ -0,0 +1,73 @@ +package com.klp.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 钢卷异常信息业务对象 wms_coil_abnormal + * + * @author klp + * @date 2025-12-04 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class WmsCoilAbnormalBo extends BaseEntity { + + /** + * 主键ID + */ + private Long abnormalId; + + /** + * 钢卷ID + */ + private Long coilId; + + /** + * 位置(上下,操作侧,中间,驱动侧) + */ + private String position; + + /** + * 长度坐标 + */ + private String lengthCoord; + + /** + * 缺陷代码(S=表面缺陷、E=边部问题、M=尺寸问题、G=收卷问题) + */ + private String defectCode; + + /** + * 程度(轻微、重度、严重) + */ + private String degree; + + /** + * 判级 + */ + private String judgeLevel; + + /** + * 判级人 + */ + private String judgeBy; + + /** + * 判级时间 + */ + private Date judgeTime; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilAbnormalVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilAbnormalVo.java new file mode 100644 index 00000000..c0f9fcfb --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilAbnormalVo.java @@ -0,0 +1,88 @@ +package com.klp.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.klp.common.annotation.ExcelDictFormat; +import com.klp.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 钢卷异常信息视图对象 wms_coil_abnormal + * + * @author klp + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +public class WmsCoilAbnormalVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long abnormalId; + + /** + * 钢卷ID + */ + @ExcelProperty(value = "钢卷ID") + private Long coilId; + + /** + * 位置(上下,操作侧,中间,驱动侧) + */ + @ExcelProperty(value = "位置", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "上=下,操作侧,中间,驱动侧") + private String position; + + /** + * 长度坐标 + */ + @ExcelProperty(value = "长度坐标") + private String lengthCoord; + + /** + * 缺陷代码(S=表面缺陷、E=边部问题、M=尺寸问题、G=收卷问题) + */ + @ExcelProperty(value = "缺陷代码", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "S==表面缺陷、E=边部问题、M=尺寸问题、G=收卷问题") + private String defectCode; + + /** + * 程度(轻微、重度、严重) + */ + @ExcelProperty(value = "程度", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "轻=微、重度、严重") + private String degree; + + /** + * 判级 + */ + @ExcelProperty(value = "判级") + private String judgeLevel; + + /** + * 判级人 + */ + @ExcelProperty(value = "判级人") + private String judgeBy; + + /** + * 判级时间 + */ + @ExcelProperty(value = "判级时间") + private Date judgeTime; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java index 5c8bbf1a..74f288aa 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java @@ -301,5 +301,10 @@ public class WmsMaterialCoilVo extends BaseEntity { private String zincLayer; // 锌层 private String manufacturer; // 厂家 + /** + * 异常数量(钢卷异常信息表统计) + */ + private Integer abnormalCount; + } diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsCoilAbnormalMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsCoilAbnormalMapper.java new file mode 100644 index 00000000..340c922d --- /dev/null +++ b/klp-wms/src/main/java/com/klp/mapper/WmsCoilAbnormalMapper.java @@ -0,0 +1,15 @@ +package com.klp.mapper; + +import com.klp.domain.WmsCoilAbnormal; +import com.klp.domain.vo.WmsCoilAbnormalVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 钢卷异常信息Mapper接口 + * + * @author klp + * @date 2025-12-04 + */ +public interface WmsCoilAbnormalMapper extends BaseMapperPlus { + +} diff --git a/klp-wms/src/main/java/com/klp/service/IWmsCoilAbnormalService.java b/klp-wms/src/main/java/com/klp/service/IWmsCoilAbnormalService.java new file mode 100644 index 00000000..20be51ac --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/IWmsCoilAbnormalService.java @@ -0,0 +1,58 @@ +package com.klp.service; + +import com.klp.domain.WmsCoilAbnormal; +import com.klp.domain.vo.WmsCoilAbnormalVo; +import com.klp.domain.bo.WmsCoilAbnormalBo; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 钢卷异常信息Service接口 + * + * @author klp + * @date 2025-12-04 + */ +public interface IWmsCoilAbnormalService { + + /** + * 查询钢卷异常信息 + */ + WmsCoilAbnormalVo queryById(Long abnormalId); + + /** + * 查询钢卷异常信息列表 + */ + TableDataInfo queryPageList(WmsCoilAbnormalBo bo, PageQuery pageQuery); + + /** + * 查询钢卷异常信息列表 + */ + List queryList(WmsCoilAbnormalBo bo); + + /** + * 新增钢卷异常信息 + */ + Boolean insertByBo(WmsCoilAbnormalBo bo); + + /** + * 修改钢卷异常信息 + */ + Boolean updateByBo(WmsCoilAbnormalBo bo); + + /** + * 校验并批量删除钢卷异常信息信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 判级 + * + * @param abnormalId 异常ID + * @param judgeLevel 判级 + * @return 是否成功 + */ + Boolean judge(Long abnormalId, String judgeLevel); +} diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilAbnormalServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilAbnormalServiceImpl.java new file mode 100644 index 00000000..9ed71f36 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilAbnormalServiceImpl.java @@ -0,0 +1,136 @@ +package com.klp.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.utils.StringUtils; +import com.klp.common.helper.LoginHelper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.domain.bo.WmsCoilAbnormalBo; +import com.klp.domain.vo.WmsCoilAbnormalVo; +import com.klp.domain.WmsCoilAbnormal; +import com.klp.mapper.WmsCoilAbnormalMapper; +import com.klp.service.IWmsCoilAbnormalService; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 钢卷异常信息Service业务层处理 + * + * @author klp + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +public class WmsCoilAbnormalServiceImpl implements IWmsCoilAbnormalService { + + private final WmsCoilAbnormalMapper baseMapper; + + /** + * 查询钢卷异常信息 + */ + @Override + public WmsCoilAbnormalVo queryById(Long abnormalId){ + return baseMapper.selectVoById(abnormalId); + } + + /** + * 查询钢卷异常信息列表 + */ + @Override + public TableDataInfo queryPageList(WmsCoilAbnormalBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询钢卷异常信息列表 + */ + @Override + public List queryList(WmsCoilAbnormalBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(WmsCoilAbnormalBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getCoilId() != null, WmsCoilAbnormal::getCoilId, bo.getCoilId()); + lqw.eq(StringUtils.isNotBlank(bo.getPosition()), WmsCoilAbnormal::getPosition, bo.getPosition()); + lqw.eq(StringUtils.isNotBlank(bo.getLengthCoord()), WmsCoilAbnormal::getLengthCoord, bo.getLengthCoord()); + lqw.eq(StringUtils.isNotBlank(bo.getDefectCode()), WmsCoilAbnormal::getDefectCode, bo.getDefectCode()); + lqw.eq(StringUtils.isNotBlank(bo.getDegree()), WmsCoilAbnormal::getDegree, bo.getDegree()); + lqw.eq(StringUtils.isNotBlank(bo.getJudgeLevel()), WmsCoilAbnormal::getJudgeLevel, bo.getJudgeLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getJudgeBy()), WmsCoilAbnormal::getJudgeBy, bo.getJudgeBy()); + lqw.eq(bo.getJudgeTime() != null, WmsCoilAbnormal::getJudgeTime, bo.getJudgeTime()); + return lqw; + } + + /** + * 新增钢卷异常信息 + */ + @Override + public Boolean insertByBo(WmsCoilAbnormalBo bo) { + WmsCoilAbnormal add = BeanUtil.toBean(bo, WmsCoilAbnormal.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setAbnormalId(add.getAbnormalId()); + } + return flag; + } + + /** + * 修改钢卷异常信息 + */ + @Override + public Boolean updateByBo(WmsCoilAbnormalBo bo) { + WmsCoilAbnormal update = BeanUtil.toBean(bo, WmsCoilAbnormal.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WmsCoilAbnormal entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除钢卷异常信息 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * 判级 + */ + @Override + public Boolean judge(Long abnormalId, String judgeLevel) { + WmsCoilAbnormal abnormal = baseMapper.selectById(abnormalId); + if (abnormal == null) { + return false; + } + + // 设置判级、判级人、判级时间 + abnormal.setJudgeLevel(judgeLevel); + abnormal.setJudgeBy(LoginHelper.getNickName()); + abnormal.setJudgeTime(new Date()); + + return baseMapper.updateById(abnormal) > 0; + } +} diff --git a/klp-wms/src/main/resources/mapper/klp/WmsCoilAbnormalMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsCoilAbnormalMapper.xml new file mode 100644 index 00000000..cd153668 --- /dev/null +++ b/klp-wms/src/main/resources/mapper/klp/WmsCoilAbnormalMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml index c33baae5..76f88577 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml @@ -222,12 +222,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHEN mc.item_type = 'raw_material' THEN rm.raw_material_code WHEN mc.item_type = 'product' THEN p.product_code ELSE NULL - END as itemCode + END as itemCode, + -- 异常数量统计 + COALESCE(ca.abnormal_count, 0) AS abnormalCount FROM wms_material_coil mc LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id + LEFT JOIN ( + SELECT coil_id, COUNT(*) AS abnormal_count + FROM wms_coil_abnormal + WHERE del_flag = 0 + GROUP BY coil_id + ) ca ON mc.coil_id = ca.coil_id ${ew.customSqlSegment}