Browse Source

feat(order): 添加PO明细管理功能

- 新增PODetailMapper.xml映射文件,包含基础查询、分页查询和批量更新功能
- 实现PODetailServiceImpl业务逻辑层,提供保存、查询等核心服务方法
- 集成供应商和订单头信息关联查询功能
- 添加Excel导入导出支持
- 实现基于用户权限的站点数据隔离机制
- 提供完整的CRUD操作接口支持
master
qiankanghui 2 months ago
parent
commit
e600b7c39d
  1. 3
      src/main/java/com/xujie/modules/order/entity/POHeader.java
  2. 261
      src/main/java/com/xujie/modules/order/service/Impl/PODetailServiceImpl.java
  3. 28
      src/main/java/com/xujie/modules/order/service/Impl/POHeaderServiceImpl.java
  4. 2
      src/main/java/com/xujie/modules/order/vo/PODetailVo.java
  5. 160
      src/main/resources/mapper/order/PODetailMapper.xml

3
src/main/java/com/xujie/modules/order/entity/POHeader.java

@ -1,6 +1,8 @@
package com.xujie.modules.order.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xujie.common.utils.QueryPage;
@ -31,6 +33,7 @@ public class POHeader extends QueryPage {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "采购订单号")
@TableId(value = "order_no", type = IdType.INPUT)
private String orderNo;
@ApiModelProperty(value = "工厂编码")

261
src/main/java/com/xujie/modules/order/service/Impl/PODetailServiceImpl.java

@ -161,145 +161,164 @@ public class PODetailServiceImpl extends ServiceImpl<PODetailMapper, PODetail> i
// 用于收集重复数据的信息
List<String> duplicateItems = new ArrayList<>();
// 用于收集错误信息
List<String> errorMessages = new ArrayList<>();
// 转换并保存每条数据
int rowNum = 1; // Excel行号从1开始第1行是标题
for (PODetailExcelDTO excelDTO : excelList) {
rowNum++;
try {
// ========== 1. 保存 POHeader ==========
POHeader poHeader = new POHeader();
poHeader.setSite(site);
poHeader.setCustomer(excelDTO.getCustomer());
poHeader.setPoNo(excelDTO.getPoNo());
poHeader.setDeparture(excelDTO.getDeparture());
poHeader.setDestination(excelDTO.getDestination());
poHeader.setShipVia(excelDTO.getShipVia());
poHeader.setBuyer(excelDTO.getBuyer());
// 设置默认值
poHeader.setCurrency("USA");
poHeader.setCurrencyRate(1.0);
// 供应商
if (excelDTO.getSupplierName() != null && !excelDTO.getSupplierName().isEmpty()) {
SrmSupplierEntity supplier = srmSupplierMapper.selectBySupplierName(excelDTO.getSupplierName());
if (supplier != null) {
poHeader.setSupplierNo(supplier.getSupplierNo());
} else {
throw new RuntimeException("未找到供应商: " + excelDTO.getSupplierName());
// ========== 1. 保存 POHeader ==========
POHeader poHeader = new POHeader();
poHeader.setSite(site);
poHeader.setCustomer(excelDTO.getCustomer());
poHeader.setPoNo(excelDTO.getPoNo());
poHeader.setDeparture(excelDTO.getDeparture());
poHeader.setDestination(excelDTO.getDestination());
poHeader.setShipVia(excelDTO.getShipVia());
poHeader.setBuyer(excelDTO.getBuyer());
// 设置默认值
poHeader.setCurrency("USA");
poHeader.setCurrencyRate(1.0);
// 供应商
if (excelDTO.getSupplierName() != null && !excelDTO.getSupplierName().isEmpty()) {
SrmSupplierEntity supplier = srmSupplierMapper.selectBySupplierName(excelDTO.getSupplierName());
if (supplier != null) {
poHeader.setSupplierNo(supplier.getSupplierNo());
} else {
throw new RuntimeException("未找到供应商: " + excelDTO.getSupplierName());
}
}
}
try {
if (excelDTO.getOrderDate() != null && !excelDTO.getOrderDate().isEmpty()) {
poHeader.setOrderDate(sdf.parse(excelDTO.getOrderDate()));
}
if (excelDTO.getEnquiry() != null && !excelDTO.getEnquiry().isEmpty()) {
poHeader.setEnquiry(sdf.parse(excelDTO.getEnquiry()));
try {
if (excelDTO.getOrderDate() != null && !excelDTO.getOrderDate().isEmpty()) {
poHeader.setOrderDate(sdf.parse(excelDTO.getOrderDate()));
}
if (excelDTO.getEnquiry() != null && !excelDTO.getEnquiry().isEmpty()) {
poHeader.setEnquiry(sdf.parse(excelDTO.getEnquiry()));
}
if (excelDTO.getConfirmed() != null && !excelDTO.getConfirmed().isEmpty()) {
poHeader.setConfirmed(sdf.parse(excelDTO.getConfirmed()));
}
} catch (Exception e) {
throw new RuntimeException("日期格式错误,请使用 yyyy-MM-dd 格式: " + e.getMessage());
}
if (excelDTO.getConfirmed() != null && !excelDTO.getConfirmed().isEmpty()) {
poHeader.setConfirmed(sdf.parse(excelDTO.getConfirmed()));
}
} catch (Exception e) {
throw new RuntimeException("日期格式错误,请使用 yyyy-MM-dd 格式: " + e.getMessage());
}
// 保存 POHeader先检查是否已存在
POHeader existingHeader = poHeaderMapper.selectByPoNo(excelDTO.getPoNo());
POHeader savedHeader;
if (existingHeader != null) {
// 如果已存在使用现有的
savedHeader = existingHeader;
} else {
// 不存在则新增
poHeaderService.saveModel(poHeader);
savedHeader = poHeaderMapper.selectByPoNo(excelDTO.getPoNo());
if (savedHeader == null) {
throw new RuntimeException("保存 POHeader 失败,订单号: " + excelDTO.getPoNo());
}
}
// 保存 POHeader先检查是否已存在
POHeader existingHeader = poHeaderMapper.selectByPoNo(excelDTO.getPoNo());
POHeader savedHeader;
// ========== 2. 检查是否重复 ==========
String poNo = excelDTO.getPoNo();
String item = excelDTO.getItem();
// 检查数据库中是否已存在相同的订单号+款号
Integer existCount = baseMapper.countByOrderAndItem(poNo, site, item);
if (existCount != null && existCount > 0) {
duplicateItems.add("订单号: " + poNo + ", 款号: " + item);
continue; // 跳过重复数据继续处理下一条
}
// ========== 3. 生成 item_no(核心) ==========
Integer maxItemNo = baseMapper.getMaxItemNo(poNo, site);
int lineNo = (maxItemNo == null ? 0 : maxItemNo) + 1;
orderLineMap.put(poNo, lineNo);
// ========== 4. 保存 PODetail ==========
PODetailVo poDetailVo = new PODetailVo();
// 主键字段必须
poDetailVo.setOrderNo(poNo);
poDetailVo.setSite(site);
poDetailVo.setItemNo(lineNo);
// 关联
poDetailVo.setPoHeaderId(savedHeader.getId());
// 业务字段
poDetailVo.setItem(excelDTO.getItem());
poDetailVo.setPrice(excelDTO.getPrice());
poDetailVo.setQty(excelDTO.getQty());
poDetailVo.setShipQty(excelDTO.getShipQty());
poDetailVo.setPlanner(excelDTO.getPlanner());
poDetailVo.setRemark(excelDTO.getRemark());
// char(1) 字段转换支持多种输入格式/Y/NYes/No
String advancePaymentInput = excelDTO.getAdvancePayment();
boolean needAdvance = false;
if (advancePaymentInput != null && !advancePaymentInput.trim().isEmpty()) {
String trimmed = advancePaymentInput.trim();
// 支持中文"是"英文"Y""Yes"不区分大小写
needAdvance = "是".equals(trimmed)
|| "Y".equalsIgnoreCase(trimmed)
|| "YES".equalsIgnoreCase(trimmed);
}
poDetailVo.setAdvancePayment(needAdvance ? "Y" : "N");
if (existingHeader != null) {
// 如果已存在使用现有的
savedHeader = existingHeader;
} else {
// 不存在则新增
poHeaderService.saveModel(poHeader);
savedHeader = poHeaderMapper.selectByPoNo(excelDTO.getPoNo());
if (savedHeader == null) {
throw new RuntimeException("保存 POHeader 失败,订单号: " + excelDTO.getPoNo());
}
}
try {
if (excelDTO.getWantReceiveDate() != null && !excelDTO.getWantReceiveDate().isEmpty()) {
poDetailVo.setWantReceiveDate(sdf.parse(excelDTO.getWantReceiveDate()));
// ========== 2. 检查是否重复 ==========
String poNo = excelDTO.getPoNo();
String item = excelDTO.getItem();
// 检查数据库中是否已存在相同的订单号+款号使用part_no字段
Integer existCount = baseMapper.countByOrderAndItem(poNo, site, item);
if (existCount != null && existCount > 0) {
duplicateItems.add("第" + rowNum + "行 - 订单号: " + poNo + ", 款号: " + item);
continue; // 跳过重复数据继续处理下一条
}
if (excelDTO.getCrd() != null && !excelDTO.getCrd().isEmpty()) {
poDetailVo.setCrd(sdf.parse(excelDTO.getCrd()));
// ========== 3. 生成 item_no(核心) ==========
Integer maxItemNo = baseMapper.getMaxItemNo(poNo, site);
int lineNo = (maxItemNo == null ? 0 : maxItemNo) + 1;
orderLineMap.put(poNo, lineNo);
// ========== 4. 保存 PODetail ==========
PODetailVo poDetailVo = new PODetailVo();
// 主键字段必须
poDetailVo.setOrderNo(poNo);
poDetailVo.setSite(site);
poDetailVo.setItemNo(lineNo);
// 关联
poDetailVo.setPoHeaderId(savedHeader.getId());
// 业务字段 - 款号保存到 part_no 字段
poDetailVo.setPartNo(excelDTO.getItem());
poDetailVo.setPrice(excelDTO.getPrice());
poDetailVo.setQty(excelDTO.getQty());
poDetailVo.setShipQty(excelDTO.getShipQty());
poDetailVo.setPlanner(excelDTO.getPlanner());
poDetailVo.setRemark(excelDTO.getRemark());
// char(1) 字段转换支持多种输入格式/Y/NYes/No
String advancePaymentInput = excelDTO.getAdvancePayment();
boolean needAdvance = false;
if (advancePaymentInput != null && !advancePaymentInput.trim().isEmpty()) {
String trimmed = advancePaymentInput.trim();
// 支持中文"是"英文"Y""Yes"不区分大小写
needAdvance = "是".equals(trimmed)
|| "Y".equalsIgnoreCase(trimmed)
|| "YES".equalsIgnoreCase(trimmed);
}
poDetailVo.setAdvancePayment(needAdvance ? "Y" : "N");
try {
if (excelDTO.getWantReceiveDate() != null && !excelDTO.getWantReceiveDate().isEmpty()) {
poDetailVo.setWantReceiveDate(sdf.parse(excelDTO.getWantReceiveDate()));
}
if (excelDTO.getCrd() != null && !excelDTO.getCrd().isEmpty()) {
poDetailVo.setCrd(sdf.parse(excelDTO.getCrd()));
}
} catch (Exception e) {
throw new RuntimeException("日期格式错误,请使用 yyyy-MM-dd 格式: " + e.getMessage());
}
} catch (Exception e) {
throw new RuntimeException("日期格式错误,请使用 yyyy-MM-dd 格式: " + e.getMessage());
}
System.out.println("[DEBUG] 准备保存PODetail:");
System.out.println(" orderNo: " + poDetailVo.getOrderNo());
System.out.println(" site: " + poDetailVo.getSite());
System.out.println(" itemNo: " + poDetailVo.getItemNo());
System.out.println(" poHeaderId: " + poDetailVo.getPoHeaderId());
System.out.println(" item: " + poDetailVo.getItem());
try {
saveModel(poDetailVo);
System.out.println("[DEBUG] PODetail保存成功!");
System.out.println("[DEBUG] 准备保存PODetail:");
System.out.println(" orderNo: " + poDetailVo.getOrderNo());
System.out.println(" site: " + poDetailVo.getSite());
System.out.println(" itemNo: " + poDetailVo.getItemNo());
System.out.println(" poHeaderId: " + poDetailVo.getPoHeaderId());
System.out.println(" partNo: " + poDetailVo.getPartNo());
try {
saveModel(poDetailVo);
System.out.println("[DEBUG] PODetail保存成功!");
} catch (Exception e) {
System.err.println("[ERROR] PODetail保存失败!");
System.err.println("[ERROR] 异常类型: " + e.getClass().getName());
System.err.println("[ERROR] 异常信息: " + e.getMessage());
e.printStackTrace();
throw new RuntimeException("保存PODetail失败: " + e.getMessage());
}
} catch (Exception e) {
System.err.println("[ERROR] PODetail保存失败!");
System.err.println("[ERROR] 异常类型: " + e.getClass().getName());
System.err.println("[ERROR] 异常信息: " + e.getMessage());
e.printStackTrace();
throw new RuntimeException("保存PODetail失败: " + e.getMessage());
// 捕获每一行的异常记录错误信息
String errorMsg = "第" + rowNum + "行数据处理失败: " + e.getMessage();
System.err.println("[ERROR] " + errorMsg);
errorMessages.add(errorMsg);
// 继续处理下一行不中断整个导入流程
}
}
// 如果有错误数据抛出异常并提示
if (!errorMessages.isEmpty()) {
String errorMsg = "导入过程中发现 " + errorMessages.size() + " 个错误:\n" + String.join("\n", errorMessages);
throw new RuntimeException(errorMsg);
}
// 如果有重复数据抛出异常并提示
if (!duplicateItems.isEmpty()) {
String duplicateMsg = String.join("; ", duplicateItems);
throw new RuntimeException("以下数据已存在,跳过保存: " + duplicateMsg);
String duplicateMsg = "以下数据已存在,跳过保存:\n" + String.join("\n", duplicateItems);
throw new RuntimeException(duplicateMsg);
}
} catch (IOException e) {

28
src/main/java/com/xujie/modules/order/service/Impl/POHeaderServiceImpl.java

@ -9,7 +9,11 @@ import com.xujie.common.utils.PageUtils;
import com.xujie.modules.order.dao.POHeaderMapper;
import com.xujie.modules.order.entity.POHeader;
import com.xujie.modules.order.service.Iface.IPOHeaderService;
import com.xujie.modules.srm.mapper.SrmSupplierMapper;
import com.xujie.modules.sys.entity.SysUserEntity;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -27,21 +31,37 @@ import java.util.List;
@Service
public class POHeaderServiceImpl extends ServiceImpl<POHeaderMapper, POHeader> implements IPOHeaderService {
@Autowired
private SrmSupplierMapper srmSupplierMapper;
@Override
@Transactional
public void saveModel(POHeader model){
if(model.getId() != null){
baseMapper.updateById(model);
return;
}
//PONO生成规则PO2026-0001
String orderNo = "PO" + LocalDate.now().getYear() + "-" + baseMapper.getMaxPO();
model.setOrderNo(orderNo+1);
// 如果 site 为空默认使用当前用户的 site
if(model.getSite() == null || model.getSite().isEmpty()){
SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
if(currentUser == null || currentUser.getSite() == null){
throw new RuntimeException("无法获取当前用户站点信息");
}
model.setSite(currentUser.getSite());
}
String orderNo = generatePoNo(model.getSite());
model.setOrderNo(orderNo);
baseMapper.insert(model);
}
private String generatePoNo(String site) {
srmSupplierMapper.updateTransNo(site, "PO");
return srmSupplierMapper.getTransNo(site, "PO");
}
@Override
public List<POHeader> getListByModel(POHeader query){
return baseMapper.getListByModel(query);

2
src/main/java/com/xujie/modules/order/vo/PODetailVo.java

@ -1,6 +1,7 @@
package com.xujie.modules.order.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xujie.common.utils.QueryPage;
import io.swagger.annotations.ApiModel;
@ -259,6 +260,7 @@ public class PODetailVo extends QueryPage {
private Double invNotifyQty;
@TableField(value = "po_header_id", jdbcType = org.apache.ibatis.type.JdbcType.INTEGER)
private Integer poHeaderId;

160
src/main/resources/mapper/order/PODetailMapper.xml

@ -394,85 +394,85 @@
INNER JOIN (
<foreach collection="list" item="item" separator="UNION ALL">
SELECT
#{item.id} AS id,
#{item.orderNo} AS order_no,
#{item.site} AS site,
#{item.itemNo} AS item_no,
#{item.partNo} AS part_no,
#{item.status} AS status,
#{item.qty} AS qty,
#{item.umid} AS umid,
#{item.convertFactor} AS convert_factor,
#{item.price} AS price,
#{item.basePrice} AS base_price,
#{item.wantReceiveDate} AS want_receive_date,
#{item.taxRate} AS tax_rate,
#{item.tax} AS tax,
#{item.additionalCost} AS additional_cost,
#{item.freight} AS freight,
#{item.duty} AS duty,
#{item.arriveQty} AS arrive_qty,
#{item.receiveQty} AS receive_qty,
#{item.qtyReturned} AS qty_returned,
#{item.qtyReplace} AS qty_replace,
#{item.qtyScrapt} AS qty_scrapt,
#{item.invoiceQty} AS invoice_qty,
#{item.approveResult} AS approve_result,
#{item.needInspectFlag} AS need_inspect_flag,
#{item.remark} AS remark,
#{item.iqcQty} AS iqc_qty,
#{item.lastUpdateBy} AS last_update_by,
#{item.prConvertNote} AS pr_convert_note,
#{item.inspectTypeDb} AS inspect_type_db,
#{item.inspectType} AS inspect_type,
#{item.inspectQty} AS inspect_qty,
#{item.inspectPercent} AS inspect_percent,
#{item.inspectionLevelNo} AS inspection_level_no,
#{item.closeTolerance} AS close_tolerance,
#{item.overReceiveTolerance} AS over_receive_tolerance,
#{item.item} AS item,
#{item.value} AS c_value,
#{item.shipQty} AS c_ship_qty,
#{item.sumPrice} AS c_sum_price,
#{item.narrival} AS c_narrival,
#{item.crd} AS c_crd,
#{item.inspection} AS c_inspection,
#{item.realCrd} AS c_real_crd,
#{item.eta} AS c_eta,
#{item.flexid} AS c_flexid,
#{item.obd} AS c_obd,
#{item.docSent} AS c_doc_sent,
#{item.telexRelease} AS c_telex_release,
#{item.advancePayment} AS c_advance_payment,
#{item.advancePaid} AS c_advance_paid,
#{item.createTime} AS create_time,
#{item.planner} AS c_planner,
#{item.edit} AS c_edit,
#{item.endPlanner} AS c_end_planner,
#{item.remarkDelay} AS c_remark_delay,
#{item.qtyCancelled} AS qty_cancelled,
#{item.inspectMethodDb} AS inspect_method_db,
#{item.toInvNofityQty} AS to_inv_nofity_qty,
#{item.uploadDate} AS upload_date,
#{item.orderRef1} AS order_ref1,
#{item.orderRef5} AS order_ref5,
#{item.batchNo} AS batch_no,
#{item.orderRef4} AS order_ref4,
#{item.prePayAmount} AS pre_pay_amount,
#{item.uploadBy} AS upload_by,
#{item.purLeadTime} AS pur_lead_time,
#{item.orderRefType} AS order_ref_type,
#{item.orderRef3} AS order_ref3,
#{item.needReceiveFlag} AS need_receive_flag,
#{item.uploadFlag} AS upload_flag,
#{item.prePayReverseAmount} AS pre_pay_reverse_amount,
#{item.outWorkOrderFlag} AS out_work_order_flag,
#{item.orderRef2} AS order_ref2,
#{item.qtyRbjs} AS qty_rbjs,
#{item.prePayPayAmount} AS pre_pay_pay_amount,
#{item.needDate} AS need_date,
#{item.inspectMethod} AS inspect_method,
#{item.invNotifyQty} AS inv_notify_qty
CAST(#{item.id} AS INT) AS id,
CAST(#{item.orderNo} AS VARCHAR(15)) AS order_no,
CAST(#{item.site} AS VARCHAR(4)) AS site,
CAST(#{item.itemNo} AS INT) AS item_no,
CAST(#{item.partNo} AS VARCHAR(30)) AS part_no,
CAST(#{item.status} AS VARCHAR(10)) AS status,
CAST(#{item.qty} AS DECIMAL(20,6)) AS qty,
CAST(#{item.umid} AS VARCHAR(8)) AS umid,
CAST(#{item.convertFactor} AS DECIMAL(20,6)) AS convert_factor,
CAST(#{item.price} AS DECIMAL(20,6)) AS price,
CAST(#{item.basePrice} AS DECIMAL(20,6)) AS base_price,
CAST(#{item.wantReceiveDate} AS DATETIME) AS want_receive_date,
CAST(#{item.taxRate} AS DECIMAL(20,6)) AS tax_rate,
CAST(#{item.tax} AS DECIMAL(20,6)) AS tax,
CAST(#{item.additionalCost} AS DECIMAL(20,6)) AS additional_cost,
CAST(#{item.freight} AS DECIMAL(20,6)) AS freight,
CAST(#{item.duty} AS DECIMAL(20,6)) AS duty,
CAST(#{item.arriveQty} AS DECIMAL(20,6)) AS arrive_qty,
CAST(#{item.receiveQty} AS DECIMAL(20,6)) AS receive_qty,
CAST(#{item.qtyReturned} AS DECIMAL(20,6)) AS qty_returned,
CAST(#{item.qtyReplace} AS DECIMAL(20,6)) AS qty_replace,
CAST(#{item.qtyScrapt} AS DECIMAL(20,6)) AS qty_scrapt,
CAST(#{item.invoiceQty} AS DECIMAL(20,6)) AS invoice_qty,
CAST(#{item.approveResult} AS CHAR(1)) AS approve_result,
CAST(#{item.needInspectFlag} AS CHAR(1)) AS need_inspect_flag,
CAST(#{item.remark} AS VARCHAR(400)) AS remark,
CAST(#{item.iqcQty} AS DECIMAL(20,6)) AS iqc_qty,
CAST(#{item.lastUpdateBy} AS VARCHAR(20)) AS last_update_by,
CAST(#{item.prConvertNote} AS VARCHAR(200)) AS pr_convert_note,
CAST(#{item.inspectTypeDb} AS CHAR(1)) AS inspect_type_db,
CAST(#{item.inspectType} AS VARCHAR(40)) AS inspect_type,
CAST(#{item.inspectQty} AS DECIMAL(20,6)) AS inspect_qty,
CAST(#{item.inspectPercent} AS DECIMAL(20,6)) AS inspect_percent,
CAST(#{item.inspectionLevelNo} AS VARCHAR(20)) AS inspection_level_no,
CAST(#{item.closeTolerance} AS DECIMAL(20,6)) AS close_tolerance,
CAST(#{item.overReceiveTolerance} AS DECIMAL(20,6)) AS over_receive_tolerance,
CAST(#{item.item} AS VARCHAR(64)) AS item,
CAST(#{item.value} AS VARCHAR(50)) AS c_value,
CAST(#{item.shipQty} AS INT) AS c_ship_qty,
CAST(#{item.sumPrice} AS DECIMAL(20,6)) AS c_sum_price,
CAST(#{item.narrival} AS DATETIME) AS c_narrival,
CAST(#{item.crd} AS DATETIME) AS c_crd,
CAST(#{item.inspection} AS DATETIME) AS c_inspection,
CAST(#{item.realCrd} AS DATETIME) AS c_real_crd,
CAST(#{item.eta} AS DATETIME) AS c_eta,
CAST(#{item.flexid} AS VARCHAR(50)) AS c_flexid,
CAST(#{item.obd} AS DATETIME) AS c_obd,
CAST(#{item.docSent} AS CHAR(1)) AS c_doc_sent,
CAST(#{item.telexRelease} AS CHAR(1)) AS c_telex_release,
CAST(#{item.advancePayment} AS CHAR(1)) AS c_advance_payment,
CAST(#{item.advancePaid} AS CHAR(1)) AS c_advance_paid,
CAST(#{item.createTime} AS DATETIME) AS create_time,
CAST(#{item.planner} AS VARCHAR(50)) AS c_planner,
CAST(#{item.edit} AS DATETIME) AS c_edit,
CAST(#{item.endPlanner} AS VARCHAR(50)) AS c_end_planner,
CAST(#{item.remarkDelay} AS VARCHAR(255)) AS c_remark_delay,
CAST(#{item.qtyCancelled} AS DECIMAL(20,6)) AS qty_cancelled,
CAST(#{item.inspectMethodDb} AS CHAR(1)) AS inspect_method_db,
CAST(#{item.toInvNofityQty} AS DECIMAL(20,6)) AS to_inv_nofity_qty,
CAST(#{item.uploadDate} AS DATETIME) AS upload_date,
CAST(#{item.orderRef1} AS VARCHAR(20)) AS order_ref1,
CAST(#{item.orderRef5} AS VARCHAR(20)) AS order_ref5,
CAST(#{item.batchNo} AS VARCHAR(18)) AS batch_no,
CAST(#{item.orderRef4} AS VARCHAR(20)) AS order_ref4,
CAST(#{item.prePayAmount} AS DECIMAL(20,6)) AS pre_pay_amount,
CAST(#{item.uploadBy} AS VARCHAR(50)) AS upload_by,
CAST(#{item.purLeadTime} AS DECIMAL(20,6)) AS pur_lead_time,
CAST(#{item.orderRefType} AS VARCHAR(20)) AS order_ref_type,
CAST(#{item.orderRef3} AS VARCHAR(20)) AS order_ref3,
CAST(#{item.needReceiveFlag} AS CHAR(1)) AS need_receive_flag,
CAST(#{item.uploadFlag} AS CHAR(1)) AS upload_flag,
CAST(#{item.prePayReverseAmount} AS DECIMAL(20,6)) AS pre_pay_reverse_amount,
CAST(#{item.outWorkOrderFlag} AS CHAR(1)) AS out_work_order_flag,
CAST(#{item.orderRef2} AS VARCHAR(20)) AS order_ref2,
CAST(#{item.qtyRbjs} AS DECIMAL(20,6)) AS qty_rbjs,
CAST(#{item.prePayPayAmount} AS DECIMAL(20,6)) AS pre_pay_pay_amount,
CAST(#{item.needDate} AS DATETIME) AS need_date,
CAST(#{item.inspectMethod} AS VARCHAR(20)) AS inspect_method,
CAST(#{item.invNotifyQty} AS DECIMAL(20,6)) AS inv_notify_qty
</foreach>
) t ON pd.id = t.id
</update>
@ -499,5 +499,5 @@
AND site = #{site}
AND item = #{item}
</select>
</mapper>
Loading…
Cancel
Save