diff --git a/klp-ui/src/api/wms/coil.js b/klp-ui/src/api/wms/coil.js index 38ce3500..4168a1e7 100644 --- a/klp-ui/src/api/wms/coil.js +++ b/klp-ui/src/api/wms/coil.js @@ -14,7 +14,7 @@ export function exportMaterialCoil(query) { url: '/wms/materialCoil/export', method: 'get', params: query - }) + }) } export function getMaterialCoil(CoilMaterialId) { @@ -83,3 +83,21 @@ export function getMaterialCoilDistributionByType(query) { params: query }) } + +// 钢卷分卷 +export function splitMaterialCoil(data) { + return request({ + url: '/wms/materialCoil', + method: 'put', + data: data + }) +} + +// 钢卷合卷 +export function mergeMaterialCoil(data) { + return request({ + url: '/wms/materialCoil', + method: 'put', + data: data + }) +} diff --git a/klp-ui/src/api/wms/pendingAction.js b/klp-ui/src/api/wms/pendingAction.js new file mode 100644 index 00000000..8b2d4eaf --- /dev/null +++ b/klp-ui/src/api/wms/pendingAction.js @@ -0,0 +1,86 @@ +import request from '@/utils/request' + +// 查询钢卷待操作列表 +export function listPendingAction(query) { + return request({ + url: '/wms/coilPendingAction/list', + method: 'get', + params: query + }) +} + +// 查询钢卷待操作详细 +export function getPendingAction(actionId) { + return request({ + url: '/wms/coilPendingAction/' + actionId, + method: 'get' + }) +} + +// 新增钢卷待操作 +export function addPendingAction(data) { + return request({ + url: '/wms/coilPendingAction', + method: 'post', + data: data + }) +} + +// 修改钢卷待操作 +export function updatePendingAction(data) { + return request({ + url: '/wms/coilPendingAction', + method: 'put', + data: data + }) +} + +// 删除钢卷待操作 +export function delPendingAction(actionId) { + return request({ + url: '/wms/coilPendingAction/' + actionId, + method: 'delete' + }) +} + +// 更新操作状态 +export function updateStatus(actionId, status) { + return request({ + url: `/wms/coilPendingAction/status/${actionId}/${status}`, + method: 'put' + }) +} + +// 开始处理操作 +export function startProcess(actionId) { + return request({ + url: `/wms/coilPendingAction/start/${actionId}`, + method: 'put' + }) +} + +// 完成操作 +export function completeAction(actionId) { + return request({ + url: `/wms/coilPendingAction/complete/${actionId}`, + method: 'put' + }) +} + +// 取消操作 +export function cancelAction(actionId) { + return request({ + url: `/wms/coilPendingAction/cancel/${actionId}`, + method: 'put' + }) +} + +// 导出钢卷待操作 +export function exportPendingAction(query) { + return request({ + url: '/wms/coilPendingAction/export', + method: 'post', + params: query + }) +} + diff --git a/klp-ui/src/views/wms/coil/actflow.vue b/klp-ui/src/views/wms/coil/actflow.vue index e69de29b..4dbc0c58 100644 --- a/klp-ui/src/views/wms/coil/actflow.vue +++ b/klp-ui/src/views/wms/coil/actflow.vue @@ -0,0 +1,538 @@ + + + + + + diff --git a/klp-ui/src/views/wms/coil/merge.vue b/klp-ui/src/views/wms/coil/merge.vue index cd7bcc9b..dc30c54e 100644 --- a/klp-ui/src/views/wms/coil/merge.vue +++ b/klp-ui/src/views/wms/coil/merge.vue @@ -7,8 +7,8 @@ 钢卷合卷
- 保存合卷 - 取消 + 保存合卷 + {{ readonly ? '返回' : '取消' }}
@@ -18,29 +18,69 @@
源卷列表 - 添加钢卷 + 添加钢卷
- +
{{ index + 1 }}
{{ item.currentCoilNo || '待选择' }}
-
{{ item.weight || '—' }} t
-
- + + + + + + + 选择钢卷 +
未选择钢卷
@@ -51,14 +91,14 @@
- @@ -83,31 +123,68 @@
- + - - + + - - + + + + + + + + clearable + :disabled="readonly" + > + + - - + + + + - - + + + + + + + + +
@@ -120,10 +197,9 @@ 合卷规则
@@ -139,6 +215,10 @@ + + diff --git a/klp-wms/src/main/java/com/klp/controller/WmsCoilPendingActionController.java b/klp-wms/src/main/java/com/klp/controller/WmsCoilPendingActionController.java new file mode 100644 index 00000000..b066c20b --- /dev/null +++ b/klp-wms/src/main/java/com/klp/controller/WmsCoilPendingActionController.java @@ -0,0 +1,137 @@ +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.WmsCoilPendingActionVo; +import com.klp.domain.bo.WmsCoilPendingActionBo; +import com.klp.service.IWmsCoilPendingActionService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 钢卷待操作 + * + * @author Joshi + * @date 2025-11-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/wms/coilPendingAction") +public class WmsCoilPendingActionController extends BaseController { + + private final IWmsCoilPendingActionService iWmsCoilPendingActionService; + + /** + * 查询钢卷待操作列表 + */ + @GetMapping("/list") + public TableDataInfo list(WmsCoilPendingActionBo bo, PageQuery pageQuery) { + return iWmsCoilPendingActionService.queryPageList(bo, pageQuery); + } + + /** + * 导出钢卷待操作列表 + */ + @Log(title = "钢卷待操作", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WmsCoilPendingActionBo bo, HttpServletResponse response) { + List list = iWmsCoilPendingActionService.queryList(bo); + ExcelUtil.exportExcel(list, "钢卷待操作", WmsCoilPendingActionVo.class, response); + } + + /** + * 获取钢卷待操作详细信息 + * + * @param actionId 主键 + */ + @GetMapping("/{actionId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long actionId) { + return R.ok(iWmsCoilPendingActionService.queryById(actionId)); + } + + /** + * 新增钢卷待操作 + */ + @Log(title = "钢卷待操作", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WmsCoilPendingActionBo bo) { + return toAjax(iWmsCoilPendingActionService.insertByBo(bo)); + } + + /** + * 修改钢卷待操作 + */ + @Log(title = "钢卷待操作", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WmsCoilPendingActionBo bo) { + return toAjax(iWmsCoilPendingActionService.updateByBo(bo)); + } + + /** + * 删除钢卷待操作 + * + * @param actionIds 主键串 + */ + @Log(title = "钢卷待操作", businessType = BusinessType.DELETE) + @DeleteMapping("/{actionIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("actionIds") Long[] actionIds) { + return toAjax(iWmsCoilPendingActionService.deleteWithValidByIds(Arrays.asList(actionIds), true)); + } + + /** + * 更新操作状态 + */ + @Log(title = "钢卷待操作", businessType = BusinessType.UPDATE) + @PutMapping("/status/{actionId}/{status}") + public R updateStatus(@PathVariable("actionId") Long actionId, + @PathVariable("status") Integer status) { + return toAjax(iWmsCoilPendingActionService.updateStatus(actionId, status)); + } + + /** + * 开始处理操作 + */ + @Log(title = "钢卷待操作", businessType = BusinessType.UPDATE) + @PutMapping("/start/{actionId}") + public R startProcess(@PathVariable("actionId") Long actionId) { + return toAjax(iWmsCoilPendingActionService.startProcess(actionId)); + } + + /** + * 完成操作 + */ + @Log(title = "钢卷待操作", businessType = BusinessType.UPDATE) + @PutMapping("/complete/{actionId}") + public R completeAction(@PathVariable("actionId") Long actionId) { + return toAjax(iWmsCoilPendingActionService.completeAction(actionId)); + } + + /** + * 取消操作 + */ + @Log(title = "钢卷待操作", businessType = BusinessType.UPDATE) + @PutMapping("/cancel/{actionId}") + public R cancelAction(@PathVariable("actionId") Long actionId) { + return toAjax(iWmsCoilPendingActionService.cancelAction(actionId)); + } +} + diff --git a/klp-wms/src/main/java/com/klp/domain/WmsCoilPendingAction.java b/klp-wms/src/main/java/com/klp/domain/WmsCoilPendingAction.java new file mode 100644 index 00000000..e0a10af0 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/WmsCoilPendingAction.java @@ -0,0 +1,100 @@ +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; + +/** + * 钢卷待操作对象 wms_coil_pending_action + * + * @author Joshi + * @date 2025-11-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wms_coil_pending_action") +public class WmsCoilPendingAction extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "action_id", type = IdType.AUTO) + private Long actionId; + + /** + * 关联的钢卷ID + */ + private Long coilId; + + /** + * 当前钢卷号 + */ + private String currentCoilNo; + + /** + * 操作类型(1=分卷,2=合卷,3=更新) + */ + private Integer actionType; + + /** + * 操作状态(0=待处理,1=处理中,2=已完成,3=已取消) + */ + private Integer actionStatus; + + /** + * 扫码时间 + */ + private Date scanTime; + + /** + * 扫码设备(移动端设备信息) + */ + private String scanDevice; + + /** + * 优先级(0=普通,1=重要,2=紧急) + */ + private Integer priority; + + /** + * 来源类型(scan=扫码,manual=手动创建) + */ + private String sourceType; + + /** + * 所在库区ID + */ + private Long warehouseId; + + /** + * 操作人ID + */ + private Long operatorId; + + /** + * 操作人姓名 + */ + private String operatorName; + + /** + * 处理时间 + */ + private Date processTime; + + /** + * 完成时间 + */ + private Date completeTime; + + /** + * 删除标志(0=正常,1=已删除) + */ + @TableLogic + private Integer delFlag; +} + diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsCoilPendingActionBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsCoilPendingActionBo.java new file mode 100644 index 00000000..f6f1cbf6 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsCoilPendingActionBo.java @@ -0,0 +1,99 @@ +package com.klp.domain.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; +import java.util.Date; +import com.klp.common.core.domain.BaseEntity; + +/** + * 钢卷待操作业务对象 wms_coil_pending_action + * + * @author Joshi + * @date 2025-11-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class WmsCoilPendingActionBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long actionId; + + /** + * 关联的钢卷ID + */ + @NotNull(message = "关联的钢卷ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long coilId; + + /** + * 当前钢卷号 + */ + @NotBlank(message = "当前钢卷号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String currentCoilNo; + + /** + * 操作类型(1=分卷,2=合卷,3=更新) + */ + @NotNull(message = "操作类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer actionType; + + /** + * 操作状态(0=待处理,1=处理中,2=已完成,3=已取消) + */ + private Integer actionStatus; + + /** + * 扫码时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8") + private Date scanTime; + + /** + * 扫码设备(移动端设备信息) + */ + private String scanDevice; + + /** + * 优先级(0=普通,1=重要,2=紧急) + */ + private Integer priority; + + /** + * 来源类型(scan=扫码,manual=手动创建) + */ + private String sourceType; + + /** + * 所在库区ID + */ + private Long warehouseId; + + /** + * 操作人ID + */ + private Long operatorId; + + /** + * 操作人姓名 + */ + private String operatorName; + + /** + * 处理时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8") + private Date processTime; + + /** + * 完成时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8") + private Date completeTime; +} + diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilPendingActionVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilPendingActionVo.java new file mode 100644 index 00000000..17562a5a --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilPendingActionVo.java @@ -0,0 +1,148 @@ +package com.klp.domain.vo; + +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; + +import java.io.Serializable; +import java.util.Date; + +/** + * 钢卷待操作视图对象 wms_coil_pending_action + * + * @author Joshi + * @date 2025-11-03 + */ +@Data +@ExcelIgnoreUnannotated +public class WmsCoilPendingActionVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long actionId; + + /** + * 关联的钢卷ID + */ + @ExcelProperty(value = "钢卷ID") + private Long coilId; + + /** + * 当前钢卷号 + */ + @ExcelProperty(value = "钢卷号") + private String currentCoilNo; + + /** + * 操作类型(1=分卷,2=合卷,3=更新) + */ + @ExcelProperty(value = "操作类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "wms_coil_action_type") + private Integer actionType; + + /** + * 操作状态(0=待处理,1=处理中,2=已完成,3=已取消) + */ + @ExcelProperty(value = "操作状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "wms_action_status") + private Integer actionStatus; + + /** + * 扫码时间 + */ + @ExcelProperty(value = "扫码时间") + private Date scanTime; + + /** + * 扫码设备 + */ + @ExcelProperty(value = "扫码设备") + private String scanDevice; + + /** + * 优先级(0=普通,1=重要,2=紧急) + */ + @ExcelProperty(value = "优先级", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "wms_action_priority") + private Integer priority; + + /** + * 来源类型 + */ + @ExcelProperty(value = "来源类型") + private String sourceType; + + /** + * 所在库区ID + */ + private Long warehouseId; + + /** + * 库区名称 + */ + @ExcelProperty(value = "库区") + private String warehouseName; + + /** + * 操作人ID + */ + private Long operatorId; + + /** + * 操作人姓名 + */ + @ExcelProperty(value = "操作人") + private String operatorName; + + /** + * 处理时间 + */ + @ExcelProperty(value = "处理时间") + private Date processTime; + + /** + * 完成时间 + */ + @ExcelProperty(value = "完成时间") + private Date completeTime; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createTime; + + // 钢卷相关信息(关联查询) + /** + * 钢种 + */ + private String grade; + + /** + * 厚度 + */ + private Double thickness; + + /** + * 宽度 + */ + private Double width; + + /** + * 重量 + */ + private Double weight; +} + diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsCoilPendingActionMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsCoilPendingActionMapper.java new file mode 100644 index 00000000..effe8507 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/mapper/WmsCoilPendingActionMapper.java @@ -0,0 +1,16 @@ +package com.klp.mapper; + +import com.klp.common.core.mapper.BaseMapperPlus; +import com.klp.domain.WmsCoilPendingAction; +import com.klp.domain.vo.WmsCoilPendingActionVo; + +/** + * 钢卷待操作Mapper接口 + * + * @author Joshi + * @date 2025-11-03 + */ +public interface WmsCoilPendingActionMapper extends BaseMapperPlus { + +} + diff --git a/klp-wms/src/main/java/com/klp/service/IWmsCoilPendingActionService.java b/klp-wms/src/main/java/com/klp/service/IWmsCoilPendingActionService.java new file mode 100644 index 00000000..528ef962 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/IWmsCoilPendingActionService.java @@ -0,0 +1,69 @@ +package com.klp.service; + +import com.klp.domain.vo.WmsCoilPendingActionVo; +import com.klp.domain.bo.WmsCoilPendingActionBo; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.page.TableDataInfo; + +import java.util.Collection; +import java.util.List; + +/** + * 钢卷待操作Service接口 + * + * @author Joshi + * @date 2025-11-03 + */ +public interface IWmsCoilPendingActionService { + + /** + * 查询钢卷待操作 + */ + WmsCoilPendingActionVo queryById(Long actionId); + + /** + * 查询钢卷待操作列表 + */ + TableDataInfo queryPageList(WmsCoilPendingActionBo bo, PageQuery pageQuery); + + /** + * 查询钢卷待操作列表 + */ + List queryList(WmsCoilPendingActionBo bo); + + /** + * 新增钢卷待操作 + */ + Boolean insertByBo(WmsCoilPendingActionBo bo); + + /** + * 修改钢卷待操作 + */ + Boolean updateByBo(WmsCoilPendingActionBo bo); + + /** + * 校验并批量删除钢卷待操作信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 更新操作状态 + */ + Boolean updateStatus(Long actionId, Integer status); + + /** + * 开始处理操作 + */ + Boolean startProcess(Long actionId); + + /** + * 完成操作 + */ + Boolean completeAction(Long actionId); + + /** + * 取消操作 + */ + Boolean cancelAction(Long actionId); +} + diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java new file mode 100644 index 00000000..46f01194 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java @@ -0,0 +1,180 @@ +package com.klp.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.utils.StringUtils; +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.helper.LoginHelper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.domain.bo.WmsCoilPendingActionBo; +import com.klp.domain.vo.WmsCoilPendingActionVo; +import com.klp.domain.WmsCoilPendingAction; +import com.klp.mapper.WmsCoilPendingActionMapper; +import com.klp.service.IWmsCoilPendingActionService; + +import java.util.List; +import java.util.Collection; +import java.util.Date; + +/** + * 钢卷待操作Service业务层处理 + * + * @author Joshi + * @date 2025-11-03 + */ +@RequiredArgsConstructor +@Service +public class WmsCoilPendingActionServiceImpl implements IWmsCoilPendingActionService { + + private final WmsCoilPendingActionMapper baseMapper; + + /** + * 查询钢卷待操作 + */ + @Override + public WmsCoilPendingActionVo queryById(Long actionId){ + return baseMapper.selectVoById(actionId); + } + + /** + * 查询钢卷待操作列表 + */ + @Override + public TableDataInfo queryPageList(WmsCoilPendingActionBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询钢卷待操作列表 + */ + @Override + public List queryList(WmsCoilPendingActionBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(WmsCoilPendingActionBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getCoilId() != null, WmsCoilPendingAction::getCoilId, bo.getCoilId()); + lqw.like(StringUtils.isNotBlank(bo.getCurrentCoilNo()), WmsCoilPendingAction::getCurrentCoilNo, bo.getCurrentCoilNo()); + lqw.eq(bo.getActionType() != null, WmsCoilPendingAction::getActionType, bo.getActionType()); + lqw.eq(bo.getActionStatus() != null, WmsCoilPendingAction::getActionStatus, bo.getActionStatus()); + lqw.eq(bo.getWarehouseId() != null, WmsCoilPendingAction::getWarehouseId, bo.getWarehouseId()); + lqw.eq(bo.getPriority() != null, WmsCoilPendingAction::getPriority, bo.getPriority()); + lqw.like(StringUtils.isNotBlank(bo.getSourceType()), WmsCoilPendingAction::getSourceType, bo.getSourceType()); + lqw.orderByDesc(WmsCoilPendingAction::getPriority); + lqw.orderByDesc(WmsCoilPendingAction::getScanTime); + return lqw; + } + + /** + * 新增钢卷待操作 + */ + @Override + public Boolean insertByBo(WmsCoilPendingActionBo bo) { + WmsCoilPendingAction add = BeanUtil.toBean(bo, WmsCoilPendingAction.class); + validEntityBeforeSave(add); + // 设置默认值 + if (add.getActionStatus() == null) { + add.setActionStatus(0); // 默认待处理 + } + if (StringUtils.isBlank(add.getSourceType())) { + add.setSourceType("manual"); // 默认手动创建 + } + if (add.getScanTime() == null && "scan".equals(add.getSourceType())) { + add.setScanTime(new Date()); + } + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setActionId(add.getActionId()); + } + return flag; + } + + /** + * 修改钢卷待操作 + */ + @Override + public Boolean updateByBo(WmsCoilPendingActionBo bo) { + WmsCoilPendingAction update = BeanUtil.toBean(bo, WmsCoilPendingAction.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WmsCoilPendingAction entity){ + // TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除钢卷待操作 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + // TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * 更新操作状态 + */ + @Override + public Boolean updateStatus(Long actionId, Integer status) { + WmsCoilPendingAction action = new WmsCoilPendingAction(); + action.setActionId(actionId); + action.setActionStatus(status); + return baseMapper.updateById(action) > 0; + } + + /** + * 开始处理操作 + */ + @Override + public Boolean startProcess(Long actionId) { + WmsCoilPendingAction action = new WmsCoilPendingAction(); + action.setActionId(actionId); + action.setActionStatus(1); // 处理中 + action.setProcessTime(new Date()); + try { + action.setOperatorId(LoginHelper.getUserId()); + action.setOperatorName(LoginHelper.getUsername()); + } catch (Exception e) { + // 如果获取登录用户失败,不影响主流程 + } + return baseMapper.updateById(action) > 0; + } + + /** + * 完成操作 + */ + @Override + public Boolean completeAction(Long actionId) { + WmsCoilPendingAction action = new WmsCoilPendingAction(); + action.setActionId(actionId); + action.setActionStatus(2); // 已完成 + action.setCompleteTime(new Date()); + return baseMapper.updateById(action) > 0; + } + + /** + * 取消操作 + */ + @Override + public Boolean cancelAction(Long actionId) { + WmsCoilPendingAction action = new WmsCoilPendingAction(); + action.setActionId(actionId); + action.setActionStatus(3); // 已取消 + return baseMapper.updateById(action) > 0; + } +} + diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 36b5de5e..0b77e9b6 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -230,7 +230,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { contentMap.put("enter_coil_no", bo.getEnterCoilNo()); // 入场钢卷号(唯一不变) contentMap.put("current_coil_no", currentCoilNo); // 当前钢卷号(可变) - contentMap.put("coil_id", "null"); // 钢卷ID(新增时暂时为null,插入后更新) + contentMap.put("coil_id", "null"); // 初始钢卷ID(新增时暂时为null,插入后更新) + contentMap.put("current_coil_id", "null"); // 当前有效的钢卷ID(新增时暂时为null,插入后更新) // 创建steps数组 List> steps = new ArrayList<>(); @@ -399,15 +400,17 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if (newCoil.getItemId() == null) { newCoil.setItemId(oldCoil.getItemId()); } + // 确保warehouseId有值(如果前端没传,使用原值) + if (newCoil.getWarehouseId() == null) { + newCoil.setWarehouseId(oldCoil.getWarehouseId()); + } validEntityBeforeSave(newCoil); boolean flag = baseMapper.insert(newCoil) > 0; if (flag) { bo.setCoilId(newCoil.getCoilId()); - // 如果生成了新二维码,更新二维码中的coilId - if (warehouseChanged) { - updateQrcodeCoilId(qrcodeRecordId, newCoil.getCoilId()); - } + // 无论库区是否变化,都需要更新二维码中的current_coil_id + updateQrcodeCoilId(qrcodeRecordId, newCoil.getCoilId()); } return flag; } @@ -430,7 +433,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { contentMap.put("enter_coil_no", oldCoil.getEnterCoilNo()); // 入场钢卷号(始终不变) contentMap.put("current_coil_no", currentCoilNo); // 当前钢卷号 - contentMap.put("coil_id", "null"); // 钢卷ID(更新时暂时为null,插入后更新) + contentMap.put("coil_id", String.valueOf(oldCoil.getCoilId())); // 初始钢卷ID(记录最初的ID) + contentMap.put("current_coil_id", "null"); // 当前钢卷ID(更新时暂时为null,插入后更新) // 复制原钢卷的历史steps List> steps = new ArrayList<>(); @@ -630,7 +634,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { Map contentMap = new HashMap<>(); contentMap.put("enter_coil_no", oldCoil.getEnterCoilNo()); contentMap.put("current_coil_no", newCoilBo.getCurrentCoilNo()); - contentMap.put("coil_id", "null"); // 钢卷ID(分卷时暂时为null,插入后更新) + contentMap.put("coil_id", String.valueOf(oldCoil.getCoilId())); // 初始钢卷ID(记录原钢卷的ID) + contentMap.put("current_coil_id", "null"); // 当前钢卷ID(分卷时暂时为null,插入后更新) // 复制原钢卷的历史steps List> steps = new ArrayList<>(); @@ -700,7 +705,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } contentMap.put("enter_coil_no", enterCoilNo); contentMap.put("current_coil_no", mergedCoilBo.getCurrentCoilNo()); - contentMap.put("coil_id", "null"); // 钢卷ID(合卷时暂时为null,插入后更新) + contentMap.put("coil_id", "null"); // 初始钢卷ID(合卷时为null) + contentMap.put("current_coil_id", "null"); // 当前钢卷ID(合卷时暂时为null,插入后更新) // 合并所有参与合卷的原始钢卷的历史steps List> steps = new ArrayList<>(); @@ -790,8 +796,13 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { ObjectMapper objectMapper = new ObjectMapper(); Map contentMap = objectMapper.readValue(record.getContent(), Map.class); - // 更新coilId - contentMap.put("coil_id", String.valueOf(coilId)); + // 如果是第一次设置coilId(从"null"变为实际ID),则同时设置coil_id和current_coil_id + if ("null".equals(contentMap.get("coil_id"))) { + contentMap.put("coil_id", String.valueOf(coilId)); // 初始ID,不再改变 + } + + // 始终更新current_coil_id为最新的钢卷ID + contentMap.put("current_coil_id", String.valueOf(coilId)); // 更新二维码记录 String newContentJson = objectMapper.writeValueAsString(contentMap); @@ -854,6 +865,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 更新当前钢卷号到最外层(方便快速查看) contentMap.put("current_coil_no", bo.getCurrentCoilNo()); + // 更新当前钢卷ID(注意:这里需要获取新插入的钢卷ID,但在这个方法中还没有新ID) + // 所以这个方法只在库区不变化时调用,此时钢卷ID不变 + // contentMap.put("current_coil_id", String.valueOf(bo.getCoilId())); // 保持当前ID不变 + // 更新二维码记录 String newContentJson = objectMapper.writeValueAsString(contentMap); WmsGenerateRecordBo updateBo = new WmsGenerateRecordBo(); diff --git a/klp-wms/src/main/resources/mapper/wms/WmsCoilPendingActionMapper.xml b/klp-wms/src/main/resources/mapper/wms/WmsCoilPendingActionMapper.xml new file mode 100644 index 00000000..e1fc1c34 --- /dev/null +++ b/klp-wms/src/main/resources/mapper/wms/WmsCoilPendingActionMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +