diff --git a/klp-crm/src/main/java/com/klp/crm/domain/CrmOrder.java b/klp-crm/src/main/java/com/klp/crm/domain/CrmOrder.java index e138d56d..230acebf 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/CrmOrder.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/CrmOrder.java @@ -79,6 +79,12 @@ public class CrmOrder extends BaseEntity { * 备注 */ private String remark; + + /** + * 合同号 + */ + private String contractCode; + /** * 删除标识 0正常 2删除 */ diff --git a/klp-crm/src/main/java/com/klp/crm/domain/CrmOrderItem.java b/klp-crm/src/main/java/com/klp/crm/domain/CrmOrderItem.java index b6e8bd44..3911e740 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/CrmOrderItem.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/CrmOrderItem.java @@ -34,9 +34,9 @@ public class CrmOrderItem extends BaseEntity { */ private String productType; /** - * 规格要求 + * 原料规格 */ - private String specRequire; + private String rawMaterialSpec; /** * 产品数量 */ @@ -53,10 +53,42 @@ public class CrmOrderItem extends BaseEntity { * 备注 */ private String remark; + /** + * 成品规格 + */ + private String finishedProductSpec; + /** + * 材质 + */ + private String material; + /** + * 等级 + */ + private String grade; + /** + * 重量 + */ + private BigDecimal weight; + /** + * 合同定价 + */ + private BigDecimal contractPrice; + /** + * 定制人 + */ + private String customizer; + /** + * 发货人 + */ + private String shipper; + /** + * 排产批次 + */ + private String productionBatch; /** * 删除标识 0正常 2删除 */ @TableLogic private Long delFlag; -} +} \ No newline at end of file diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java index 42e58d91..4a92bf88 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java @@ -90,5 +90,10 @@ public class CrmOrderBo extends BaseEntity { */ private String remark; + /** + * 合同号 + */ + private String contractCode; + } diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderItemBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderItemBo.java index b7e5fd91..ee08d021 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderItemBo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderItemBo.java @@ -34,9 +34,9 @@ public class CrmOrderItemBo extends BaseEntity { private String productType; /** - * 规格要求 + * 原料规格 */ - private String specRequire; + private String rawMaterialSpec; /** * 产品数量 @@ -57,6 +57,46 @@ public class CrmOrderItemBo extends BaseEntity { * 备注 */ private String remark; + + /** + * 成品规格 + */ + private String finishedProductSpec; + + /** + * 材质 + */ + private String material; + + /** + * 等级 + */ + private String grade; + + /** + * 重量 + */ + private BigDecimal weight; + + /** + * 合同定价 + */ + private BigDecimal contractPrice; + + /** + * 定制人 + */ + private String customizer; + + /** + * 发货人 + */ + private String shipper; + + /** + * 排产批次 + */ + private String productionBatch; -} +} \ No newline at end of file diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java index 51b6870d..4efd8b12 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java @@ -41,10 +41,10 @@ public class CrmOrderItemVo { private String productType; /** - * 规格要求 + * 原料规格 */ - @ExcelProperty(value = "规格要求") - private String specRequire; + @ExcelProperty(value = "原料规格") + private String rawMaterialSpec; /** * 产品数量 @@ -71,5 +71,53 @@ public class CrmOrderItemVo { @ExcelProperty(value = "备注") private String remark; + /** + * 成品规格 + */ + @ExcelProperty(value = "成品规格") + private String finishedProductSpec; -} + /** + * 材质 + */ + @ExcelProperty(value = "材质") + private String material; + + /** + * 等级 + */ + @ExcelProperty(value = "等级") + private String grade; + + /** + * 重量 + */ + @ExcelProperty(value = "重量") + private BigDecimal weight; + + /** + * 合同定价 + */ + @ExcelProperty(value = "合同定价") + private BigDecimal contractPrice; + + /** + * 定制人 + */ + @ExcelProperty(value = "定制人") + private String customizer; + + /** + * 发货人 + */ + @ExcelProperty(value = "发货人") + private String shipper; + + /** + * 排产批次 + */ + @ExcelProperty(value = "排产批次") + private String productionBatch; + + +} \ No newline at end of file diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderVo.java index 13463f31..86e22111 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderVo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderVo.java @@ -108,6 +108,12 @@ public class CrmOrderVo extends BaseEntity { @ExcelProperty(value = "备注") private String remark; + /** + * 合同号 + */ + @ExcelProperty(value = "合同号") + private String contractCode; + // @ExcelProperty(value = "客户编号") private String customerCode; @@ -116,6 +122,10 @@ public class CrmOrderVo extends BaseEntity { // @ExcelProperty(value = "地址") private String address; + private String contactWay; + + private String companyName; + //创建人 private String createByName; //更新人 diff --git a/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderMapper.java b/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderMapper.java index e6a60d44..55c54d89 100644 --- a/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderMapper.java +++ b/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderMapper.java @@ -16,4 +16,6 @@ import org.apache.ibatis.annotations.Param; public interface CrmOrderMapper extends BaseMapperPlus { Page selectVoPagePlus(Page build,@Param("ew") QueryWrapper lqw); + + CrmOrderVo selectVoById(@Param("orderId") String orderId); } diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java index 3705995b..cee3853a 100644 --- a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java @@ -63,10 +63,18 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(StringUtils.isNotBlank(bo.getOrderId()), CrmOrderItem::getOrderId, bo.getOrderId()); lqw.eq(StringUtils.isNotBlank(bo.getProductType()), CrmOrderItem::getProductType, bo.getProductType()); - lqw.eq(StringUtils.isNotBlank(bo.getSpecRequire()), CrmOrderItem::getSpecRequire, bo.getSpecRequire()); + lqw.eq(StringUtils.isNotBlank(bo.getRawMaterialSpec()), CrmOrderItem::getRawMaterialSpec, bo.getRawMaterialSpec()); lqw.eq(bo.getProductNum() != null, CrmOrderItem::getProductNum, bo.getProductNum()); lqw.eq(StringUtils.isNotBlank(bo.getSpecialRequire()), CrmOrderItem::getSpecialRequire, bo.getSpecialRequire()); lqw.eq(bo.getItemAmount() != null, CrmOrderItem::getItemAmount, bo.getItemAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getFinishedProductSpec()), CrmOrderItem::getFinishedProductSpec, bo.getFinishedProductSpec()); + lqw.eq(StringUtils.isNotBlank(bo.getMaterial()), CrmOrderItem::getMaterial, bo.getMaterial()); + lqw.eq(StringUtils.isNotBlank(bo.getGrade()), CrmOrderItem::getGrade, bo.getGrade()); + lqw.eq(bo.getWeight() != null, CrmOrderItem::getWeight, bo.getWeight()); + lqw.eq(bo.getContractPrice() != null, CrmOrderItem::getContractPrice, bo.getContractPrice()); + lqw.eq(StringUtils.isNotBlank(bo.getCustomizer()), CrmOrderItem::getCustomizer, bo.getCustomizer()); + lqw.eq(StringUtils.isNotBlank(bo.getShipper()), CrmOrderItem::getShipper, bo.getShipper()); + lqw.eq(StringUtils.isNotBlank(bo.getProductionBatch()), CrmOrderItem::getProductionBatch, bo.getProductionBatch()); return lqw; } @@ -112,4 +120,4 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { } return baseMapper.deleteBatchIds(ids) > 0; } -} +} \ No newline at end of file diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java index bb394e28..c092ce81 100644 --- a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java @@ -94,6 +94,7 @@ public class CrmOrderServiceImpl implements ICrmOrderService { qw.eq(bo.getOrderStatus() != null, "co.order_status", bo.getOrderStatus()); qw.eq(bo.getFinanceStatus() != null, "co.finance_status", bo.getFinanceStatus()); qw.eq(bo.getUnpaidAmount() != null, "co.unpaid_amount", bo.getUnpaidAmount()); + qw.like(StringUtils.isNotBlank(bo.getContractCode()), "co.contract_code", bo.getContractCode()); //逻辑删除 qw.eq("co.del_flag", 0); //根据orderType排序预订单是0 正是订单是1 0排在前面 1排在后面 升序 @@ -126,6 +127,7 @@ public class CrmOrderServiceImpl implements ICrmOrderService { lqw.eq(bo.getOrderStatus() != null, CrmOrder::getOrderStatus, bo.getOrderStatus()); lqw.eq(bo.getFinanceStatus() != null, CrmOrder::getFinanceStatus, bo.getFinanceStatus()); lqw.eq(bo.getUnpaidAmount() != null, CrmOrder::getUnpaidAmount, bo.getUnpaidAmount()); + lqw.like(StringUtils.isNotBlank(bo.getContractCode()), CrmOrder::getContractCode, bo.getContractCode()); return lqw; } diff --git a/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml b/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml index 8cceba99..cab90b42 100644 --- a/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml +++ b/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml @@ -8,11 +8,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + + + + + + + + + @@ -25,11 +33,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" item_id, order_id, product_type, - spec_require, + raw_material_spec, product_num, special_require, item_amount, remark, + finished_product_spec, + material, + grade, + weight, + contract_price, + customizer, + shipper, + production_batch, create_by, create_time, update_by, @@ -45,4 +61,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + \ No newline at end of file diff --git a/klp-crm/src/main/resources/mapper/CrmOrderMapper.xml b/klp-crm/src/main/resources/mapper/CrmOrderMapper.xml index 88dea3e1..3d89ce6d 100644 --- a/klp-crm/src/main/resources/mapper/CrmOrderMapper.xml +++ b/klp-crm/src/main/resources/mapper/CrmOrderMapper.xml @@ -19,6 +19,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -41,12 +42,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" co.finance_status AS financeStatus, co.unpaid_amount AS unpaidAmount, co.remark, + co.contract_code AS contractCode, co.create_by AS createBy, co.create_time AS createTime, co.update_by AS updateBy, co.update_time AS updateTime, cu.customer_code AS customerCode, cu.contact_person AS contactPerson, + cu.contact_way AS contactWay, + cu.company_name AS companyName, cu.address AS address FROM crm_order co LEFT JOIN crm_customer cu ON co.customer_id = cu.customer_id @@ -54,4 +58,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/klp-mes/pom.xml b/klp-mes/pom.xml index dd8f28ac..490fa5b0 100644 --- a/klp-mes/pom.xml +++ b/klp-mes/pom.xml @@ -24,5 +24,9 @@ klp-system 0.8.3 + + com.klp + klp-wms + diff --git a/klp-mes/src/main/java/com/klp/mes/qc/controller/WmsCheckTaskCoilRelationController.java b/klp-mes/src/main/java/com/klp/mes/qc/controller/WmsCheckTaskCoilRelationController.java new file mode 100644 index 00000000..1b5e6641 --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/qc/controller/WmsCheckTaskCoilRelationController.java @@ -0,0 +1,99 @@ +package com.klp.mes.qc.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.mes.qc.domain.vo.WmsCheckTaskCoilRelationVo; +import com.klp.mes.qc.domain.bo.WmsCheckTaskCoilRelationBo; +import com.klp.mes.qc.service.IWmsCheckTaskCoilRelationService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 检查任务与钢卷关联 + * + * @author klp + * @date 2026-02-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/wms/checkTaskCoilRelation") +public class WmsCheckTaskCoilRelationController extends BaseController { + + private final IWmsCheckTaskCoilRelationService iWmsCheckTaskCoilRelationService; + + /** + * 查询检查任务与钢卷关联列表 + */ + @GetMapping("/list") + public TableDataInfo list(WmsCheckTaskCoilRelationBo bo, PageQuery pageQuery) { + return iWmsCheckTaskCoilRelationService.queryPageList(bo, pageQuery); + } + + /** + * 导出检查任务与钢卷关联列表 + */ + @Log(title = "检查任务与钢卷关联", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WmsCheckTaskCoilRelationBo bo, HttpServletResponse response) { + List list = iWmsCheckTaskCoilRelationService.queryList(bo); + ExcelUtil.exportExcel(list, "检查任务与钢卷关联", WmsCheckTaskCoilRelationVo.class, response); + } + + /** + * 获取检查任务与钢卷关联详细信息 + * + * @param relationId 主键 + */ + @GetMapping("/{relationId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long relationId) { + return R.ok(iWmsCheckTaskCoilRelationService.queryById(relationId)); + } + + /** + * 新增检查任务与钢卷关联 + */ + @Log(title = "检查任务与钢卷关联", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WmsCheckTaskCoilRelationBo bo) { + return toAjax(iWmsCheckTaskCoilRelationService.insertByBo(bo)); + } + + /** + * 修改检查任务与钢卷关联 + */ + @Log(title = "检查任务与钢卷关联", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WmsCheckTaskCoilRelationBo bo) { + return toAjax(iWmsCheckTaskCoilRelationService.updateByBo(bo)); + } + + /** + * 删除检查任务与钢卷关联 + * + * @param relationIds 主键串 + */ + @Log(title = "检查任务与钢卷关联", businessType = BusinessType.DELETE) + @DeleteMapping("/{relationIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] relationIds) { + return toAjax(iWmsCheckTaskCoilRelationService.deleteWithValidByIds(Arrays.asList(relationIds), true)); + } +} diff --git a/klp-mes/src/main/java/com/klp/mes/qc/domain/WmsCheckTaskCoilRelation.java b/klp-mes/src/main/java/com/klp/mes/qc/domain/WmsCheckTaskCoilRelation.java new file mode 100644 index 00000000..8db594a8 --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/qc/domain/WmsCheckTaskCoilRelation.java @@ -0,0 +1,41 @@ +package com.klp.mes.qc.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 检查任务与钢卷关联对象 wms_check_task_coil_relation + * + * @author klp + * @date 2026-02-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wms_check_task_coil_relation") +public class WmsCheckTaskCoilRelation extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 关联表主键 + */ + @TableId(value = "relation_id") + private Long relationId; + /** + * 检查任务ID,关联wms_check_task.task_id + */ + private Long taskId; + /** + * 钢卷ID + */ + private String coilId; + /** + * 逻辑删除标识:0=正常,1=已删 + */ + @TableLogic + private Integer delFlag; + +} diff --git a/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/WmsCheckTaskBo.java b/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/WmsCheckTaskBo.java index dc0acd3b..e27bf617 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/WmsCheckTaskBo.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/WmsCheckTaskBo.java @@ -52,5 +52,7 @@ public class WmsCheckTaskBo extends BaseEntity { // 检验类型 private String inspectionType; + // 绑定的钢卷ID(逗号分隔) + private String coilIds; } diff --git a/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/WmsCheckTaskCoilRelationBo.java b/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/WmsCheckTaskCoilRelationBo.java new file mode 100644 index 00000000..5e6fd41c --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/WmsCheckTaskCoilRelationBo.java @@ -0,0 +1,35 @@ +package com.klp.mes.qc.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 检查任务与钢卷关联业务对象 wms_check_task_coil_relation + * + * @author klp + * @date 2026-02-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class WmsCheckTaskCoilRelationBo extends BaseEntity { + + /** + * 关联表主键 + */ + private Long relationId; + + /** + * 检查任务ID,关联wms_check_task.task_id + */ + private Long taskId; + + /** + * 钢卷ID + */ + private String coilId; + + +} diff --git a/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/WmsCheckTaskCoilRelationVo.java b/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/WmsCheckTaskCoilRelationVo.java new file mode 100644 index 00000000..fb6557bc --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/WmsCheckTaskCoilRelationVo.java @@ -0,0 +1,39 @@ +package com.klp.mes.qc.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + + +/** + * 检查任务与钢卷关联视图对象 wms_check_task_coil_relation + * + * @author klp + * @date 2026-02-03 + */ +@Data +@ExcelIgnoreUnannotated +public class WmsCheckTaskCoilRelationVo { + + private static final long serialVersionUID = 1L; + + /** + * 关联表主键 + */ + @ExcelProperty(value = "关联表主键") + private Long relationId; + + /** + * 检查任务ID,关联wms_check_task.task_id + */ + @ExcelProperty(value = "检查任务ID,关联wms_check_task.task_id") + private Long taskId; + + /** + * 钢卷ID + */ + @ExcelProperty(value = "钢卷ID") + private String coilId; + + +} diff --git a/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/WmsCheckTaskVo.java b/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/WmsCheckTaskVo.java index e2e85d09..a53a1519 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/WmsCheckTaskVo.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/WmsCheckTaskVo.java @@ -2,8 +2,7 @@ package com.klp.mes.qc.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 com.klp.domain.vo.WmsMaterialCoilVo; import lombok.Data; import java.util.List; @@ -90,4 +89,7 @@ public class WmsCheckTaskVo { private String actualMeasures; private String checkTaskItemIds; + + // 绑定的钢卷ID列表 + private List coilList; } diff --git a/klp-mes/src/main/java/com/klp/mes/qc/mapper/WmsCheckTaskCoilRelationMapper.java b/klp-mes/src/main/java/com/klp/mes/qc/mapper/WmsCheckTaskCoilRelationMapper.java new file mode 100644 index 00000000..35dfb879 --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/qc/mapper/WmsCheckTaskCoilRelationMapper.java @@ -0,0 +1,17 @@ +package com.klp.mes.qc.mapper; + +import com.klp.mes.qc.domain.WmsCheckTaskCoilRelation; +import com.klp.mes.qc.domain.vo.WmsCheckTaskCoilRelationVo; +import com.klp.common.core.mapper.BaseMapperPlus; +import java.util.Collection; + +/** + * 检查任务与钢卷关联Mapper接口 + * + * @author klp + * @date 2026-02-03 + */ +public interface WmsCheckTaskCoilRelationMapper extends BaseMapperPlus { + + void deleteByTaskIds(Collection taskIds); +} diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/IWmsCheckTaskCoilRelationService.java b/klp-mes/src/main/java/com/klp/mes/qc/service/IWmsCheckTaskCoilRelationService.java new file mode 100644 index 00000000..5395171e --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/IWmsCheckTaskCoilRelationService.java @@ -0,0 +1,48 @@ +package com.klp.mes.qc.service; + +import com.klp.mes.qc.domain.vo.WmsCheckTaskCoilRelationVo; +import com.klp.mes.qc.domain.bo.WmsCheckTaskCoilRelationBo; +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 2026-02-03 + */ +public interface IWmsCheckTaskCoilRelationService { + + /** + * 查询检查任务与钢卷关联 + */ + WmsCheckTaskCoilRelationVo queryById(Long relationId); + + /** + * 查询检查任务与钢卷关联列表 + */ + TableDataInfo queryPageList(WmsCheckTaskCoilRelationBo bo, PageQuery pageQuery); + + /** + * 查询检查任务与钢卷关联列表 + */ + List queryList(WmsCheckTaskCoilRelationBo bo); + + /** + * 新增检查任务与钢卷关联 + */ + Boolean insertByBo(WmsCheckTaskCoilRelationBo bo); + + /** + * 修改检查任务与钢卷关联 + */ + Boolean updateByBo(WmsCheckTaskCoilRelationBo bo); + + /** + * 校验并批量删除检查任务与钢卷关联信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/WmsCheckTaskCoilRelationServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/WmsCheckTaskCoilRelationServiceImpl.java new file mode 100644 index 00000000..ac794e92 --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/WmsCheckTaskCoilRelationServiceImpl.java @@ -0,0 +1,111 @@ +package com.klp.mes.qc.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.mes.qc.domain.vo.WmsCheckTaskCoilRelationVo; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.mes.qc.domain.bo.WmsCheckTaskCoilRelationBo; +import com.klp.mes.qc.domain.vo.WmsCheckTaskCoilRelationVo; +import com.klp.mes.qc.domain.WmsCheckTaskCoilRelation; +import com.klp.mes.qc.mapper.WmsCheckTaskCoilRelationMapper; +import com.klp.mes.qc.service.IWmsCheckTaskCoilRelationService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 检查任务与钢卷关联Service业务层处理 + * + * @author klp + * @date 2026-02-03 + */ +@RequiredArgsConstructor +@Service +public class WmsCheckTaskCoilRelationServiceImpl implements IWmsCheckTaskCoilRelationService { + + private final WmsCheckTaskCoilRelationMapper baseMapper; + + /** + * 查询检查任务与钢卷关联 + */ + @Override + public WmsCheckTaskCoilRelationVo queryById(Long relationId){ + return baseMapper.selectVoById(relationId); + } + + /** + * 查询检查任务与钢卷关联列表 + */ + @Override + public TableDataInfo queryPageList(WmsCheckTaskCoilRelationBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询检查任务与钢卷关联列表 + */ + @Override + public List queryList(WmsCheckTaskCoilRelationBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(WmsCheckTaskCoilRelationBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getTaskId() != null, WmsCheckTaskCoilRelation::getTaskId, bo.getTaskId()); + lqw.eq(StringUtils.isNotBlank(bo.getCoilId()), WmsCheckTaskCoilRelation::getCoilId, bo.getCoilId()); + return lqw; + } + + /** + * 新增检查任务与钢卷关联 + */ + @Override + public Boolean insertByBo(WmsCheckTaskCoilRelationBo bo) { + WmsCheckTaskCoilRelation add = BeanUtil.toBean(bo, WmsCheckTaskCoilRelation.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setRelationId(add.getRelationId()); + } + return flag; + } + + /** + * 修改检查任务与钢卷关联 + */ + @Override + public Boolean updateByBo(WmsCheckTaskCoilRelationBo bo) { + WmsCheckTaskCoilRelation update = BeanUtil.toBean(bo, WmsCheckTaskCoilRelation.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WmsCheckTaskCoilRelation entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除检查任务与钢卷关联 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/WmsCheckTaskServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/WmsCheckTaskServiceImpl.java index 779842c2..35701c2e 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/WmsCheckTaskServiceImpl.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/WmsCheckTaskServiceImpl.java @@ -8,11 +8,16 @@ 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.domain.WmsMaterialCoil; +import com.klp.domain.vo.WmsMaterialCoilVo; +import com.klp.mapper.WmsMaterialCoilMapper; import com.klp.mes.qc.domain.WmsCheckItem; import com.klp.mes.qc.domain.WmsCheckTaskItem; +import com.klp.mes.qc.domain.WmsCheckTaskCoilRelation; import com.klp.mes.qc.domain.vo.WmsCheckItemVo; import com.klp.mes.qc.mapper.WmsCheckItemMapper; import com.klp.mes.qc.mapper.WmsCheckTaskItemMapper; +import com.klp.mes.qc.mapper.WmsCheckTaskCoilRelationMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.mes.qc.domain.bo.WmsCheckTaskBo; @@ -38,62 +43,98 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { private final WmsCheckTaskMapper baseMapper; private final WmsCheckItemMapper wmsCheckItemMapper; private final WmsCheckTaskItemMapper wmsCheckTaskItemMapper; + private final WmsCheckTaskCoilRelationMapper wmsCheckTaskCoilRelationMapper; + private final WmsMaterialCoilMapper wmsMaterialCoilMapper; /** * 查询检查任务 */ @Override public WmsCheckTaskVo queryById(Long taskId) { - WmsCheckTaskVo vo = baseMapper.selectVoByIdPlus(taskId); - if (vo != null && vo.getItemIds() != null) { - // 1. 拆分所有聚合字段(新增 checkTaskItemIds 的处理) - String[] ids = vo.getItemIds().split(","); // 检查项表的 item_id - String[] checkTaskItemIds = vo.getCheckTaskItemIds() != null ? vo.getCheckTaskItemIds().split(",") : new String[ids.length]; // 关联表的 item_id(新增) - String[] names = vo.getItemNames() != null ? vo.getItemNames().split(",") : new String[ids.length]; - String[] statusArr = vo.getItemStatus() != null ? vo.getItemStatus().split(",") : new String[ids.length]; - String[] targetUppers = vo.getTargetUppers() != null ? vo.getTargetUppers().split(",") : new String[ids.length]; - String[] targetLowers = vo.getTargetLowers() != null ? vo.getTargetLowers().split(",") : new String[ids.length]; - String[] standardTargets = vo.getStandardTargets() != null ? vo.getStandardTargets().split(",") : new String[ids.length]; - String[] units = vo.getUnits() != null ? vo.getUnits().split(",") : new String[ids.length]; - String[] qualitativeQuantitatives = vo.getQualitativeQuantitatives() != null ? vo.getQualitativeQuantitatives().split(",") : new String[ids.length]; - String[] actualMeasures = vo.getActualMeasures() != null ? vo.getActualMeasures().split(",") : new String[ids.length]; + WmsCheckTaskVo vo = baseMapper.selectVoById(taskId); + if (vo == null) { + return null; + } + // 查询检查任务与检查项关联关系 + List taskItems = wmsCheckTaskItemMapper.selectList( + Wrappers.lambdaQuery() + .eq(WmsCheckTaskItem::getCheckTaskId, taskId) + .eq(WmsCheckTaskItem::getDelFlag, 0) + ); + + if (!taskItems.isEmpty()) { + Set itemIds = new HashSet<>(); + for (WmsCheckTaskItem taskItem : taskItems) { + itemIds.add(taskItem.getCheckItemId()); + } + + // 查询检查项基础信息 + List checkItems = wmsCheckItemMapper.selectBatchIds(itemIds); + Map itemMap = new HashMap<>(); + for (WmsCheckItem item : checkItems) { + itemMap.put(item.getItemId(), item); + } + + // 组装检查项列表 List itemList = new ArrayList<>(); - for (int i = 0; i < ids.length; i++) { - if (!ids[i].isEmpty()) { // 跳过空字符串(避免拆分后出现空元素) - WmsCheckItemVo item = new WmsCheckItemVo(); - // 2. 赋值检查项 ID(原逻辑保留) - item.setItemId(Long.valueOf(ids[i])); - // 3. 新增:赋值关联表的 item_id - if (checkTaskItemIds.length > i && !checkTaskItemIds[i].isEmpty()) { - item.setCheckTaskItemId(Long.valueOf(checkTaskItemIds[i])); // 假设 WmsCheckItemVo 有这个字段 - } - // 4. 其他字段赋值(保持原逻辑,补充判空) - if (names.length > i) item.setItemName(names[i]); - if (statusArr.length > i) item.setStatus(statusArr[i]); - // 处理数值类型时,先判空再转换,避免 NumberFormatException - if (targetUppers.length > i && StringUtils.isNotBlank(targetUppers[i])) { - item.setTargetUpper(new BigDecimal(targetUppers[i])); // 推荐用 new BigDecimal,避免 Double 精度问题 - } - if (targetLowers.length > i && StringUtils.isNotBlank(targetLowers[i])) { - item.setTargetLower(new BigDecimal(targetLowers[i])); - } - if (standardTargets.length > i && StringUtils.isNotBlank(standardTargets[i])) { - item.setStandardTarget(new BigDecimal(standardTargets[i])); - } - if (units.length > i) item.setUnit(units[i]); - if (qualitativeQuantitatives.length > i && StringUtils.isNotBlank(qualitativeQuantitatives[i])) { - item.setQualitativeQuantitative(Integer.parseInt(qualitativeQuantitatives[i])); - } - if (actualMeasures.length > i) item.setActualMeasure(actualMeasures[i]); - itemList.add(item); + for (WmsCheckTaskItem taskItem : taskItems) { + WmsCheckItemVo itemVo = new WmsCheckItemVo(); + WmsCheckItem checkItem = itemMap.get(taskItem.getCheckItemId()); + + if (checkItem != null) { + itemVo.setItemId(checkItem.getItemId()); + itemVo.setItemName(checkItem.getItemName()); } + + itemVo.setCheckTaskItemId(taskItem.getItemId()); + itemVo.setStatus(taskItem.getStatus().toString()); + itemVo.setTargetUpper(taskItem.getTargetUpper()); + itemVo.setTargetLower(taskItem.getTargetLower()); + itemVo.setStandardTarget(taskItem.getStandardTarget()); + itemVo.setUnit(taskItem.getUnit()); + itemVo.setQualitativeQuantitative(taskItem.getQualitativeQuantitative()); + itemVo.setActualMeasure(taskItem.getActualMeasure() != null ? taskItem.getActualMeasure().toString() : null); + + itemList.add(itemVo); } vo.setItemList(itemList); } + + // 查询关联的钢卷信息 + List coilRelations = wmsCheckTaskCoilRelationMapper.selectList( + Wrappers.lambdaQuery() + .eq(WmsCheckTaskCoilRelation::getTaskId, taskId) + .eq(WmsCheckTaskCoilRelation::getDelFlag, 0) + ); + + if (!coilRelations.isEmpty()) { + Set coilIdSet = new HashSet<>(); + for (WmsCheckTaskCoilRelation relation : coilRelations) { + coilIdSet.add(relation.getCoilId()); + } + + List coilList = queryCoilsByIds(coilIdSet); + vo.setCoilList(coilList); + } + return vo; } + private List queryCoilsByIds(Set coilIds) { + if (coilIds == null || coilIds.isEmpty()) { + return Collections.emptyList(); + } + + QueryWrapper qw = new QueryWrapper<>(); + qw.in("mc.coil_id", coilIds); + qw.eq("mc.del_flag", 0); + // 根据创建时间倒序 + qw.orderByDesc("mc.create_time"); + + return wmsMaterialCoilMapper.selectVoListWithDynamicJoin(qw); + } + /** * 查询检查任务列表 @@ -102,8 +143,34 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { public TableDataInfo queryPageList(WmsCheckTaskBo bo, PageQuery pageQuery) { QueryWrapper qw = buildQueryWrapperPlus(bo); Page result = baseMapper.selectVoPagePlus(pageQuery.build(), qw); + additionalInformation(result); return TableDataInfo.build(result); } + + private void additionalInformation(Page result) { + // 处理结果中的钢卷信息 + List records = result.getRecords(); + for (WmsCheckTaskVo vo : records) { + // 查询关联的钢卷信息 + List coilRelations = wmsCheckTaskCoilRelationMapper.selectList( + Wrappers.lambdaQuery() + .eq(WmsCheckTaskCoilRelation::getTaskId, vo.getTaskId()) + .eq(WmsCheckTaskCoilRelation::getDelFlag, 0) + ); + + if (!coilRelations.isEmpty()) { + Set coilIdSet = new HashSet<>(); + for (WmsCheckTaskCoilRelation relation : coilRelations) { + coilIdSet.add(relation.getCoilId()); + } + + // 查询钢卷基础信息 + List coilList = queryCoilsByIds(coilIdSet); + vo.setCoilList(coilList); + } + } + } + private QueryWrapper buildQueryWrapperPlus(WmsCheckTaskBo bo) { Map params = bo.getParams(); com.baomidou.mybatisplus.core.conditions.query.QueryWrapper qw = Wrappers.query(); @@ -126,6 +193,7 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { public TableDataInfo queryPageListHistory(WmsCheckTaskBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + additionalInformation(result); return TableDataInfo.build(result); } @@ -137,7 +205,30 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { @Override public List queryList(WmsCheckTaskBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + List result = baseMapper.selectVoList(lqw); + + // 处理结果中的钢卷信息 + for (WmsCheckTaskVo vo : result) { + // 查询关联的钢卷信息 + List coilRelations = wmsCheckTaskCoilRelationMapper.selectList( + Wrappers.lambdaQuery() + .eq(WmsCheckTaskCoilRelation::getTaskId, vo.getTaskId()) + .eq(WmsCheckTaskCoilRelation::getDelFlag, 0) + ); + + if (!coilRelations.isEmpty()) { + Set coilIdSet = new HashSet<>(); + for (WmsCheckTaskCoilRelation relation : coilRelations) { + coilIdSet.add(relation.getCoilId()); + } + + // 查询钢卷基础信息 + List coilList = queryCoilsByIds(coilIdSet); + vo.setCoilList(coilList); + } + } + + return result; } private LambdaQueryWrapper buildQueryWrapper(WmsCheckTaskBo bo) { @@ -151,6 +242,8 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { lqw.like(StringUtils.isNotBlank(bo.getUnitGroup()), WmsCheckTask::getUnitGroup, bo.getUnitGroup()); lqw.eq(bo.getInspectionResult() != null, WmsCheckTask::getInspectionResult, bo.getInspectionResult()); lqw.like(StringUtils.isNotBlank(bo.getInspectionType()), WmsCheckTask::getInspectionType, bo.getInspectionType()); + // 倒叙 + lqw.orderByDesc(WmsCheckTask::getCreateTime); return lqw; } @@ -201,6 +294,22 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { } } + // 处理钢卷关联关系 + if (StringUtils.isNotBlank(bo.getCoilIds())) { + String[] coilIds = bo.getCoilIds().split(","); + for (String coilId : coilIds) { + if (StringUtils.isNotBlank(coilId)) { + WmsCheckTaskCoilRelation relation = new WmsCheckTaskCoilRelation(); + relation.setTaskId(add.getTaskId()); + relation.setCoilId(coilId.trim()); + int insertCount = wmsCheckTaskCoilRelationMapper.insert(relation); + if (insertCount <= 0) { + throw new RuntimeException("新增检查任务钢卷关联失败,钢卷ID:" + coilId); + } + } + } + } + if (mainFlag) { bo.setTaskId(add.getTaskId()); } @@ -228,10 +337,15 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { * 批量删除检查任务 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } + + // 删除检查任务前,先删除相关的钢卷关联记录 + wmsCheckTaskCoilRelationMapper.deleteByTaskIds(ids); + return baseMapper.deleteBatchIds(ids) > 0; } } diff --git a/klp-mes/src/main/resources/mapper/qc/WmsCheckTaskCoilRelationMapper.xml b/klp-mes/src/main/resources/mapper/qc/WmsCheckTaskCoilRelationMapper.xml new file mode 100644 index 00000000..11119f70 --- /dev/null +++ b/klp-mes/src/main/resources/mapper/qc/WmsCheckTaskCoilRelationMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + UPDATE wms_check_task_coil_relation SET del_flag = 2 + WHERE task_id IN + + #{taskId} + + + + diff --git a/klp-ui/src/components/CoilSelector/data.js b/klp-ui/src/components/CoilSelector/data.js index 85762b0e..4fa2cbcf 100644 --- a/klp-ui/src/components/CoilSelector/data.js +++ b/klp-ui/src/components/CoilSelector/data.js @@ -49,4 +49,10 @@ export const defaultColumns = [ width: '120', showOverflowTooltip: true }, + { + label: '备注', + align: 'center', + prop: 'remark', + showOverflowTooltip: true + } ] \ No newline at end of file diff --git a/klp-ui/src/views/crm/bind/index.vue b/klp-ui/src/views/crm/bind/index.vue new file mode 100644 index 00000000..8e8b95eb --- /dev/null +++ b/klp-ui/src/views/crm/bind/index.vue @@ -0,0 +1,157 @@ + + + \ No newline at end of file diff --git a/klp-ui/src/views/crm/components/OrderDetail.vue b/klp-ui/src/views/crm/components/OrderDetail.vue index de8d674a..47e0a398 100644 --- a/klp-ui/src/views/crm/components/OrderDetail.vue +++ b/klp-ui/src/views/crm/components/OrderDetail.vue @@ -2,22 +2,35 @@
- -
- 新增 + 新增 + 打印 刷新 - - - - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/klp-ui/src/views/crm/components/OrderTable.vue b/klp-ui/src/views/crm/components/OrderTable.vue new file mode 100644 index 00000000..6db9f556 --- /dev/null +++ b/klp-ui/src/views/crm/components/OrderTable.vue @@ -0,0 +1,64 @@ + + + \ No newline at end of file diff --git a/klp-ui/src/views/crm/components/ReceiveTable.vue b/klp-ui/src/views/crm/components/ReceiveTable.vue index 68f793f9..9a60ec38 100644 --- a/klp-ui/src/views/crm/components/ReceiveTable.vue +++ b/klp-ui/src/views/crm/components/ReceiveTable.vue @@ -70,14 +70,14 @@ - + - + @@ -122,7 +122,7 @@ v-model="form.dueDate" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" - placeholder="请选择到期日"> + placeholder="请选择收款日期"> @@ -247,7 +247,8 @@ export default { // 收款表单参数 receiveForm: {}, // 是否显示收款弹出层 - receiveOpen: false + receiveOpen: false, + isFirst: true, }; }, methods: { @@ -258,6 +259,10 @@ export default { this.receivableList = response.rows; this.total = response.total; this.loading = false; + if (this.isFirst) { + this.isFirst = false; + return; + } updateOrder({ orderId: this.orderId, unpaidAmount: this.unreceivedAmount, diff --git a/klp-ui/src/views/crm/customer/index.vue b/klp-ui/src/views/crm/customer/index.vue index 1f00e3fc..bccf8c7b 100644 --- a/klp-ui/src/views/crm/customer/index.vue +++ b/klp-ui/src/views/crm/customer/index.vue @@ -2,7 +2,7 @@
- +
客户列表
@@ -55,7 +55,9 @@ listKey="customerId" :loading="customerLoading" field1="customerCode" - field4="companyName" + field2="companyName" + field4="contactPerson" + field5="contactWay" @item-click="handleItemClick" >