Commit 828c878fd36537e06f4bbc98386433b8cdcc3e04

Authored by YunaiV
1 parent 37313f35

✨ feat(mes): 更新退货检验单相关字段,优化数据结构和逻辑

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnissue/vo/line/MesWmReturnIssueLineRespVO.java
@@ -43,8 +43,8 @@ public class MesWmReturnIssueLineRespVO { @@ -43,8 +43,8 @@ public class MesWmReturnIssueLineRespVO {
43 @Schema(description = "质量状态", example = "0") 43 @Schema(description = "质量状态", example = "0")
44 private Integer qualityStatus; 44 private Integer qualityStatus;
45 45
46 - @Schema(description = "过程检验单 ID", example = "1")  
47 - private Long ipqcId; 46 + @Schema(description = "退货检验单 ID", example = "21601")
  47 + private Long rqcId;
48 48
49 @Schema(description = "备注", example = "备注") 49 @Schema(description = "备注", example = "备注")
50 private String remark; 50 private String remark;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineRespVO.java
@@ -42,6 +42,12 @@ public class MesWmReturnSalesLineRespVO { @@ -42,6 +42,12 @@ public class MesWmReturnSalesLineRespVO {
42 @Schema(description = "批次ID", example = "1") 42 @Schema(description = "批次ID", example = "1")
43 private Long batchId; 43 private Long batchId;
44 44
  45 + @Schema(description = "退货检验单 ID", example = "400")
  46 + private Long rqcId;
  47 +
  48 + @Schema(description = "是否需要质检", example = "true")
  49 + private Boolean qcFlag;
  50 +
45 @Schema(description = "批次号", example = "B001") 51 @Schema(description = "批次号", example = "B001")
46 private String batchCode; 52 private String batchCode;
47 53
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineSaveReqVO.java
@@ -32,11 +32,11 @@ public class MesWmReturnSalesLineSaveReqVO { @@ -32,11 +32,11 @@ public class MesWmReturnSalesLineSaveReqVO {
32 @DecimalMin(value = "0", inclusive = false, message = "退货数量必须大于 0") 32 @DecimalMin(value = "0", inclusive = false, message = "退货数量必须大于 0")
33 private BigDecimal quantity; 33 private BigDecimal quantity;
34 34
35 - @Schema(description = "批次ID", example = "1") 35 + @Schema(description = "批次号", example = "B20250101")
36 private Long batchId; 36 private Long batchId;
37 37
38 - @Schema(description = "质量状态", example = "合格")  
39 - private Integer qualityStatus; 38 + @Schema(description = "是否需要质检", example = "true")
  39 + private Boolean qcFlag;
40 40
41 @Schema(description = "备注", example = "备注") 41 @Schema(description = "备注", example = "备注")
42 private String remark; 42 private String remark;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnissue/MesWmReturnIssueLineDO.java
@@ -52,9 +52,9 @@ public class MesWmReturnIssueLineDO extends BaseDO { @@ -52,9 +52,9 @@ public class MesWmReturnIssueLineDO extends BaseDO {
52 */ 52 */
53 private Long batchId; 53 private Long batchId;
54 /** 54 /**
55 - * 过程检验单 ID 55 + * 退货检验单 ID
56 */ 56 */
57 - private Long ipqcId; 57 + private Long rqcId;
58 /** 58 /**
59 * 是否需要质检 59 * 是否需要质检
60 */ 60 */
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnsales/MesWmReturnSalesLineDO.java
@@ -50,6 +50,14 @@ public class MesWmReturnSalesLineDO extends BaseDO { @@ -50,6 +50,14 @@ public class MesWmReturnSalesLineDO extends BaseDO {
50 */ 50 */
51 private Long batchId; 51 private Long batchId;
52 /** 52 /**
  53 + * 退货检验单 ID
  54 + */
  55 + private Long rqcId;
  56 + /**
  57 + * 是否需要质检
  58 + */
  59 + private Boolean qcFlag;
  60 + /**
53 * 质量状态 61 * 质量状态
54 * 62 *
55 * 枚举 {@link cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum} 63 * 枚举 {@link cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmReturnSalesStatusEnum.java
1 package cn.iocoder.yudao.module.mes.enums.wm; 1 package cn.iocoder.yudao.module.mes.enums.wm;
2 2
3 import cn.iocoder.yudao.framework.common.core.ArrayValuable; 3 import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.MesWmReturnSalesSaveReqVO;
4 import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; 5 import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants;
  6 +import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesService;
5 import lombok.AllArgsConstructor; 7 import lombok.AllArgsConstructor;
6 import lombok.Getter; 8 import lombok.Getter;
7 9
@@ -19,31 +21,37 @@ public enum MesWmReturnSalesStatusEnum implements ArrayValuable<Integer> { @@ -19,31 +21,37 @@ public enum MesWmReturnSalesStatusEnum implements ArrayValuable<Integer> {
19 /** 21 /**
20 * 草稿 22 * 草稿
21 * 23 *
22 - * 对应方法:{@link cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesService#createReturnSales} 24 + * 对应方法:{@link MesWmReturnSalesService#createReturnSales(MesWmReturnSalesSaveReqVO)}
23 */ 25 */
24 PREPARE(MesOrderStatusConstants.PREPARE, "草稿"), 26 PREPARE(MesOrderStatusConstants.PREPARE, "草稿"),
25 /** 27 /**
26 - * 待执行 28 + * 待检验(已确认,等待质检)
27 * 29 *
28 - * 对应方法:{@link cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesService#submitReturnSales} 30 + * 对应方法:{@link MesWmReturnSalesService#submitReturnSales(Long)}
29 */ 31 */
30 - APPROVING(MesOrderStatusConstants.APPROVING, "待执行"), 32 + CONFIRMED(MesOrderStatusConstants.CONFIRMED, "待检验"), // "UNCHECK"
31 /** 33 /**
32 - * 待上架 34 + * 待执行(检验完成或免检,等待执行退货)
33 * 35 *
34 - * 对应方法:{@link cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesService#finishReturnSales} 36 + * 对应方法:{@link MesWmReturnSalesService#submitReturnSales(Long)}
35 */ 37 */
36 - APPROVED(MesOrderStatusConstants.APPROVED, "待上架"), 38 + APPROVING(MesOrderStatusConstants.APPROVING, "待执行"), // "UNEXECUTE"
37 /** 39 /**
38 - * 已完成 40 + * 待上架(退货执行完成,等待仓库上架)
39 * 41 *
40 - * 对应方法:{@link cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesService#stockReturnSales} 42 + * 对应方法:{@link MesWmReturnSalesService#finishReturnSales(Long)}
  43 + */
  44 + APPROVED(MesOrderStatusConstants.APPROVED, "待上架"), // "UNSTOCK"
  45 + /**
  46 + * 已完成(上架完成,库存已更新)
  47 + *
  48 + * 对应方法:{@link MesWmReturnSalesService#stockReturnSales(Long)}
41 */ 49 */
42 FINISHED(MesOrderStatusConstants.FINISHED, "已完成"), 50 FINISHED(MesOrderStatusConstants.FINISHED, "已完成"),
43 /** 51 /**
44 * 已取消 52 * 已取消
45 * 53 *
46 - * 对应方法:{@link cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesService#cancelReturnSales} 54 + * 对应方法:{@link MesWmReturnSalesService#cancelReturnSales(Long)}
47 */ 55 */
48 CANCELED(MesOrderStatusConstants.CANCELLED, "已取消"); 56 CANCELED(MesOrderStatusConstants.CANCELLED, "已取消");
49 57
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueLineServiceImpl.java
@@ -163,7 +163,7 @@ public class MesWmReturnIssueLineServiceImpl implements MesWmReturnIssueLineServ @@ -163,7 +163,7 @@ public class MesWmReturnIssueLineServiceImpl implements MesWmReturnIssueLineServ
163 .setItemId(sourceLine.getItemId()) 163 .setItemId(sourceLine.getItemId())
164 .setQuantity(unqualifiedQuantity) 164 .setQuantity(unqualifiedQuantity)
165 .setBatchId(sourceLine.getBatchId()) 165 .setBatchId(sourceLine.getBatchId())
166 - .setIpqcId(sourceLine.getIpqcId()) 166 + .setRqcId(sourceLine.getRqcId())
167 .setQcFlag(sourceLine.getQcFlag()) 167 .setQcFlag(sourceLine.getQcFlag())
168 .setQualityStatus(MesWmQualityStatusEnum.FAIL.getStatus()) 168 .setQualityStatus(MesWmQualityStatusEnum.FAIL.getStatus())
169 .setRemark(sourceLine.getRemark()); 169 .setRemark(sourceLine.getRemark());
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java
@@ -133,21 +133,19 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { @@ -133,21 +133,19 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService {
133 @Override 133 @Override
134 @Transactional(rollbackFor = Exception.class) 134 @Transactional(rollbackFor = Exception.class)
135 public void submitReturnIssue(Long id) { 135 public void submitReturnIssue(Long id) {
136 - // 校验存在 + 草稿状态 136 + // 1.1 校验存在 + 草稿状态
137 validateReturnIssueExistsAndPrepare(id); 137 validateReturnIssueExistsAndPrepare(id);
138 - // 校验至少有一条行 138 + // 1.2 校验至少有一条行
139 List<MesWmReturnIssueLineDO> lines = issueLineService.getReturnIssueLineListByIssueId(id); 139 List<MesWmReturnIssueLineDO> lines = issueLineService.getReturnIssueLineListByIssueId(id);
140 if (CollUtil.isEmpty(lines)) { 140 if (CollUtil.isEmpty(lines)) {
141 throw exception(WM_RETURN_ISSUE_NO_LINE); 141 throw exception(WM_RETURN_ISSUE_NO_LINE);
142 } 142 }
143 143
144 - // 2.1.1 检查是否有待检验的物料 144 + // 2.1 确定目标状态:1)有待检验物料 → 待检验状态;2)无待检验物料 → 待上架状态
145 boolean hasPendingQc = CollUtil.contains(lines, 145 boolean hasPendingQc = CollUtil.contains(lines,
146 line -> MesWmQualityStatusEnum.PENDING.getStatus().equals(line.getQualityStatus())); 146 line -> MesWmQualityStatusEnum.PENDING.getStatus().equals(line.getQualityStatus()));
147 - // 2.1.2 确定目标状态:1)有待检验物料 → 待检验状态;2)无待检验物料 → 待上架状态  
148 Integer targetStatus = hasPendingQc ? MesWmReturnIssueStatusEnum.CONFIRMED.getStatus() 147 Integer targetStatus = hasPendingQc ? MesWmReturnIssueStatusEnum.CONFIRMED.getStatus()
149 : MesWmReturnIssueStatusEnum.APPROVING.getStatus(); 148 : MesWmReturnIssueStatusEnum.APPROVING.getStatus();
150 -  
151 // 2.2 提交(草稿 → 待检验/待上架) 149 // 2.2 提交(草稿 → 待检验/待上架)
152 issueMapper.updateById(new MesWmReturnIssueDO().setId(id).setStatus(targetStatus)); 150 issueMapper.updateById(new MesWmReturnIssueDO().setId(id).setStatus(targetStatus));
153 } 151 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
1 package cn.iocoder.yudao.module.mes.service.wm.returnsales; 1 package cn.iocoder.yudao.module.mes.service.wm.returnsales;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.ObjUtil;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLinePageReqVO; 7 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLinePageReqVO;
@@ -51,6 +52,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ @@ -51,6 +52,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ
51 52
52 // 插入 53 // 插入
53 MesWmReturnSalesLineDO line = BeanUtils.toBean(createReqVO, MesWmReturnSalesLineDO.class); 54 MesWmReturnSalesLineDO line = BeanUtils.toBean(createReqVO, MesWmReturnSalesLineDO.class);
  55 + line.setQualityStatus(calculateQualityStatus(line.getQcFlag()));
54 returnSalesLineMapper.insert(line); 56 returnSalesLineMapper.insert(line);
55 return line.getId(); 57 return line.getId();
56 } 58 }
@@ -66,6 +68,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ @@ -66,6 +68,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ
66 68
67 // 更新 69 // 更新
68 MesWmReturnSalesLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnSalesLineDO.class); 70 MesWmReturnSalesLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnSalesLineDO.class);
  71 + updateObj.setQualityStatus(calculateQualityStatus(updateObj.getQcFlag()));
69 returnSalesLineMapper.updateById(updateObj); 72 returnSalesLineMapper.updateById(updateObj);
70 } 73 }
71 74
@@ -110,10 +113,19 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ @@ -110,10 +113,19 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ
110 public void updateQualityStatusByReturnId(Long returnId, Integer qualityStatus) { 113 public void updateQualityStatusByReturnId(Long returnId, Integer qualityStatus) {
111 List<MesWmReturnSalesLineDO> lines = returnSalesLineMapper.selectListByReturnId(returnId); 114 List<MesWmReturnSalesLineDO> lines = returnSalesLineMapper.selectListByReturnId(returnId);
112 for (MesWmReturnSalesLineDO line : lines) { 115 for (MesWmReturnSalesLineDO line : lines) {
113 - returnSalesLineMapper.updateById(new MesWmReturnSalesLineDO()  
114 - .setId(line.getId())  
115 - .setQualityStatus(qualityStatus)); 116 + Integer newStatus = calculateQualityStatus(line.getQcFlag());
  117 + if (ObjUtil.notEqual(newStatus, line.getQualityStatus())) {
  118 + returnSalesLineMapper.updateById(new MesWmReturnSalesLineDO()
  119 + .setId(line.getId()).setQualityStatus(newStatus));
  120 + }
  121 + }
  122 + }
  123 +
  124 + private Integer calculateQualityStatus(Boolean qcFlag) {
  125 + if (Boolean.TRUE.equals(qcFlag)) {
  126 + return MesWmQualityStatusEnum.PENDING.getStatus(); // 待检
116 } 127 }
  128 + return MesWmQualityStatusEnum.PASS.getStatus(); // 不需检验,默认合格
117 } 129 }
118 130
119 /** 131 /**
@@ -154,6 +166,8 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ @@ -154,6 +166,8 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ
154 .setItemId(sourceLine.getItemId()) 166 .setItemId(sourceLine.getItemId())
155 .setQuantity(unqualifiedQuantity) 167 .setQuantity(unqualifiedQuantity)
156 .setBatchId(sourceLine.getBatchId()) 168 .setBatchId(sourceLine.getBatchId())
  169 + .setRqcId(sourceLine.getRqcId())
  170 + .setQcFlag(sourceLine.getQcFlag())
157 .setQualityStatus(MesWmQualityStatusEnum.FAIL.getStatus()) 171 .setQualityStatus(MesWmQualityStatusEnum.FAIL.getStatus())
158 .setRemark(sourceLine.getRemark()); 172 .setRemark(sourceLine.getRemark());
159 returnSalesLineMapper.insert(unqualifiedLine); 173 returnSalesLineMapper.insert(unqualifiedLine);
@@ -170,7 +184,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ @@ -170,7 +184,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ
170 boolean allInspected = !CollUtil.contains(allLines, 184 boolean allInspected = !CollUtil.contains(allLines,
171 line -> Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.PENDING.getStatus())); 185 line -> Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.PENDING.getStatus()));
172 if (allInspected) { 186 if (allInspected) {
173 - returnSalesService.updateReturnSalesStatus(sourceDocId, MesWmReturnSalesStatusEnum.APPROVED.getStatus()); 187 + returnSalesService.updateReturnSalesStatus(sourceDocId, MesWmReturnSalesStatusEnum.APPROVING.getStatus());
174 } 188 }
175 } 189 }
176 } 190 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesServiceImpl.java
@@ -110,21 +110,22 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { @@ -110,21 +110,22 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService {
110 @Override 110 @Override
111 @Transactional(rollbackFor = Exception.class) 111 @Transactional(rollbackFor = Exception.class)
112 public void submitReturnSales(Long id) { 112 public void submitReturnSales(Long id) {
113 - // 校验存在 + 草稿状态 113 + // 1.1 校验存在 + 草稿状态
114 validateReturnSalesExistsAndPrepare(id); 114 validateReturnSalesExistsAndPrepare(id);
115 - // 校验至少有一条行 115 + // 1.2 校验至少有一条行
116 List<MesWmReturnSalesLineDO> lines = returnSalesLineService.getReturnSalesLineListByReturnId(id); 116 List<MesWmReturnSalesLineDO> lines = returnSalesLineService.getReturnSalesLineListByReturnId(id);
117 if (CollUtil.isEmpty(lines)) { 117 if (CollUtil.isEmpty(lines)) {
118 throw exception(WM_RETURN_SALES_NO_LINE); 118 throw exception(WM_RETURN_SALES_NO_LINE);
119 } 119 }
120 120
121 - // 提交(草稿 -> 待执行) 121 + // 2.1 确定目标状态:1)有待检验物料 → 待检验状态;2)无待检验物料 → 待执行状态
  122 + boolean hasPendingQc = CollUtil.contains(lines,
  123 + line -> MesWmQualityStatusEnum.PENDING.getStatus().equals(line.getQualityStatus()));
  124 + Integer targetStatus = hasPendingQc ? MesWmReturnSalesStatusEnum.CONFIRMED.getStatus()
  125 + : MesWmReturnSalesStatusEnum.APPROVING.getStatus();
  126 + // 2.2 提交(草稿 -> 待检验/待执行)
122 returnSalesMapper.updateById(new MesWmReturnSalesDO() 127 returnSalesMapper.updateById(new MesWmReturnSalesDO()
123 - .setId(id).setStatus(MesWmReturnSalesStatusEnum.APPROVING.getStatus()));  
124 -  
125 - // DONE @AI:全部的行设置为待检验状态  
126 - returnSalesLineService.updateQualityStatusByReturnId(id,  
127 - MesWmQualityStatusEnum.PENDING.getStatus()); 128 + .setId(id).setStatus(targetStatus));
128 } 129 }
129 130
130 @Override 131 @Override
yudao-module-mes/src/main/resources/mapper/qc/pendinginspect/MesQcPendingInspectMapper.xml
@@ -133,7 +133,7 @@ @@ -133,7 +133,7 @@
133 133
134 UNION ALL 134 UNION ALL
135 135
136 - <!-- 6. RQC 来源:销售退货单(待执行(APPROVING),行的 quality_status=0) --> 136 + <!-- 6. RQC 来源:销售退货单(待检验(CONFIRMED),行的 quality_status=0) -->
137 SELECT 137 SELECT
138 r.id AS sourceDocId, 138 r.id AS sourceDocId,
139 ${@cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants@WM_RETURN_SALES} AS sourceDocType, 139 ${@cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants@WM_RETURN_SALES} AS sourceDocType,
@@ -150,7 +150,8 @@ @@ -150,7 +150,8 @@
150 r.client_id AS clientId 150 r.client_id AS clientId
151 FROM mes_wm_return_sales r 151 FROM mes_wm_return_sales r
152 JOIN mes_wm_return_sales_line rl ON r.id = rl.return_id 152 JOIN mes_wm_return_sales_line rl ON r.id = rl.return_id
153 - WHERE r.status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum@APPROVING.status} 153 + WHERE r.status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum@CONFIRMED.status}
  154 + AND rl.qc_flag = 1
154 AND rl.quality_status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum@PENDING.status} 155 AND rl.quality_status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum@PENDING.status}
155 AND r.deleted = 0 156 AND r.deleted = 0
156 AND rl.deleted = 0 157 AND rl.deleted = 0
yudao-module-mes/src/test/resources/sql/create_tables.sql
@@ -414,7 +414,7 @@ CREATE TABLE IF NOT EXISTS &quot;mes_wm_return_issue_line&quot; ( @@ -414,7 +414,7 @@ CREATE TABLE IF NOT EXISTS &quot;mes_wm_return_issue_line&quot; (
414 "item_id" bigint NOT NULL, 414 "item_id" bigint NOT NULL,
415 "quantity" decimal(12,2) NOT NULL DEFAULT 0.00, 415 "quantity" decimal(12,2) NOT NULL DEFAULT 0.00,
416 "batch_id" bigint DEFAULT NULL, 416 "batch_id" bigint DEFAULT NULL,
417 - "ipqc_id" bigint DEFAULT NULL, 417 + "rqc_id" bigint DEFAULT NULL,
418 "qc_flag" bit NOT NULL DEFAULT FALSE, 418 "qc_flag" bit NOT NULL DEFAULT FALSE,
419 "quality_status" int DEFAULT NULL, 419 "quality_status" int DEFAULT NULL,
420 "remark" varchar(500) DEFAULT '', 420 "remark" varchar(500) DEFAULT '',
@@ -436,6 +436,8 @@ CREATE TABLE IF NOT EXISTS &quot;mes_wm_return_sales_line&quot; ( @@ -436,6 +436,8 @@ CREATE TABLE IF NOT EXISTS &quot;mes_wm_return_sales_line&quot; (
436 "item_id" bigint NOT NULL, 436 "item_id" bigint NOT NULL,
437 "quantity" decimal(12,2) NOT NULL DEFAULT 0.00, 437 "quantity" decimal(12,2) NOT NULL DEFAULT 0.00,
438 "batch_id" bigint DEFAULT NULL, 438 "batch_id" bigint DEFAULT NULL,
  439 + "rqc_id" bigint DEFAULT NULL,
  440 + "qc_flag" bit NOT NULL DEFAULT FALSE,
439 "quality_status" int DEFAULT NULL, 441 "quality_status" int DEFAULT NULL,
440 "remark" varchar(500) DEFAULT '', 442 "remark" varchar(500) DEFAULT '',
441 "creator" varchar(64) DEFAULT '', 443 "creator" varchar(64) DEFAULT '',