Browse Source

modifyQtyFlag

java8
han\hanst 6 months ago
parent
commit
33abf07895
  1. 2
      src/main/java/com/xujie/sys/modules/ecss/data/EcssCoDelNotifyData.java
  2. 1
      src/main/java/com/xujie/sys/modules/ecss/data/EcssCoDelNotifyDetailData.java
  3. 29
      src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java
  4. 63
      src/main/resources/mapper/ecss/CoDelMapper.xml
  5. 6
      src/main/resources/mapper/ecss/EcssCommonMapper.xml
  6. BIN
      src/main/resources/templates/packing-template.xlsx

2
src/main/java/com/xujie/sys/modules/ecss/data/EcssCoDelNotifyData.java

@ -25,4 +25,6 @@ public class EcssCoDelNotifyData extends EcssCoDelNotify {
private String buDesc;
private Boolean modifyFlag;
private Boolean modifyQtyFlag;
}

1
src/main/java/com/xujie/sys/modules/ecss/data/EcssCoDelNotifyDetailData.java

@ -19,6 +19,7 @@ public class EcssCoDelNotifyDetailData extends EcssCoDelNotifyDetail {
private String nocartons;
private Integer addFlag;
private Boolean modifyFlag;
private Boolean modifyQtyFlag; // 只有数量变化时才为true
private String hsCodeDesc;
private BigDecimal rolls;
private BigDecimal useQty;

29
src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java

@ -622,9 +622,19 @@ public class CoDelServiceImpl implements CoDelService {
if (ecssCoDelNotifyDetail.isEmpty()){
throw new RuntimeException("该发货通知单明细不存在");
} else {
if ((ecssCoDelNotifyDetail.get(0).getQty().compareTo(data.getQty())!=0) ||
!ecssCoDelNotifyDetail.get(0).getPn().equals(data.getPn())) {
// 判断数量是否变化
boolean qtyChanged = ecssCoDelNotifyDetail.get(0).getQty().compareTo(data.getQty()) != 0;
// 判断PN是否变化
boolean pnChanged = !ecssCoDelNotifyDetail.get(0).getPn().equals(data.getPn());
if (qtyChanged || pnChanged) {
data.setModifyFlag(true);
// 只有数量变化时才设置 modifyQtyFlag=true
if (qtyChanged) {
data.setModifyQtyFlag(true);
}
// 取消订单 通知仓库和单证人员
//设置邮件内容
String text = "<!DOCTYPE>" + "<div>发货通知单" +data.getDelNo()+"【发票:"+ data.getCmcInvoice()+"】改单" + "</div>"+
@ -647,6 +657,7 @@ public class CoDelServiceImpl implements CoDelService {
int itemNo = coDelMapper.getEcssDelDetailItemNo(data);
data.setItemNo(itemNo);
data.setModifyFlag(true);
data.setModifyQtyFlag(true); // 新增发货也算数量变化
coDelMapper.insertEcssDelDetail(data);
// 取消订单 通知仓库和单证人员
//设置邮件内容
@ -677,6 +688,7 @@ public class CoDelServiceImpl implements CoDelService {
}
data.setQty(BigDecimal.ZERO);
data.setModifyFlag(true);
data.setModifyQtyFlag(true); // 删除发货也算数量变化
data.setStatus("取消发货");
coDelMapper.updateEcssDelDetail(data);
EcssCoDelNotifyHeaderData header = new EcssCoDelNotifyHeaderData();
@ -769,10 +781,23 @@ public class CoDelServiceImpl implements CoDelService {
// 先删除全部明细再新建明细
coDelMapper.deleteAllEcssDelDetail(headerData);
// 构建原数据Map用于比较数量是否变化
Map<String, BigDecimal> originalQtyMap = dbData.stream()
.collect(Collectors.toMap(EcssCoDelNotifyDetail::getPn, EcssCoDelNotifyDetail::getQty));
for (int i = 0; i < excelList.size(); i++) {
excelList.get(i).setDelNo(headerData.getDelNo());
excelList.get(i).setItemNo(i + 1);
excelList.get(i).setModifyFlag(true);
// 判断数量是否变化新增物料或数量不同时设置 modifyQtyFlag=true
String pn = excelList.get(i).getPn();
BigDecimal newQty = excelList.get(i).getQty();
if (!originalQtyMap.containsKey(pn) ||
!originalQtyMap.get(pn).equals(newQty)) {
excelList.get(i).setModifyQtyFlag(true);
}
}
coDelMapper.batchSaveEcssCoDelNotifyDetail(excelList);
headerData.setModifyFlag(true);

63
src/main/resources/mapper/ecss/CoDelMapper.xml

@ -118,7 +118,7 @@
select a.site,a.bu_no,a.delNo,a.item_no,a.salesOrder,a.salesOrder_item_no,a.customerPO,a.line,a.version,a.status,a.family,
a.part_no,a.part_description,a.qty,a.lt,a.cmc_comment,a.saleType,a.awb_bl,a.shipping_number,a.forwarder_info,isnull(a.surplus_qty,0) surplusQty,
a.currency,a.tp,a.ttl_amount,a.sum_price,a.so,a.upc,a.remark,a.erp_delItemNo,a.pn,CONVERT(DECIMAL(20, 0),a.nocartons) as nocartons,
c.num_value as boxrolls,d.num_value as rollqty,w.num_value as boxweight,#{cmcInvoice} as cmcInvoice,a.modifyFlag,
c.num_value as boxrolls,d.num_value as rollqty,w.num_value as boxweight,#{cmcInvoice} as cmcInvoice,a.modifyFlag,a.modifyQtyFlag,
b.hsCodeDesc,a.vat,a.roll,a.carton,b.packageNo
from ecss_CoDelNotifydetail a
left join part b on a.site=b.site and a.part_no=b.part_no
@ -139,7 +139,7 @@
select a.site,a.bu_no,a.delNo,a.item_no,a.salesOrder,a.salesOrder_item_no,a.customerPO,a.line,a.version,a.status,a.family,
a.part_no,a.part_description,a.qty,a.lt,a.cmc_comment,a.saleType,a.awb_bl,a.shipping_number,a.forwarder_info,
a.currency,a.tp,a.ttl_amount,a.sum_price,a.so,a.upc,a.remark,a.erp_delItemNo,a.pn,CONVERT(DECIMAL(20, 0),a.nocartons) as nocartons,
a.modifyFlag
a.modifyFlag,a.modifyQtyFlag
from ecss_CoDelNotifydetail a
<where>
And a.site = #{site}
@ -176,13 +176,13 @@
insert into ecss_CoDelNotifyDetail (site,bu_no,delNo,item_no,salesOrder,salesOrder_item_no,customerPO,line,version,
status,family,part_no,part_description,qty,lt,cmc_comment,saleType,
awb_bl,shipping_number,forwarder_info,currency,tp,ttl_amount,sum_price,
so,upc,remark,pn,surplus_qty,vat,roll,carton,saleslt,manufacturer_name,modifyFlag)
so,upc,remark,pn,surplus_qty,vat,roll,carton,saleslt,manufacturer_name,modifyFlag,modifyQtyFlag)
values
<foreach collection="list" separator="," item="item">
(#{item.site},#{item.buNo},#{item.delNo},#{item.itemNo,jdbcType=INTEGER},#{item.salesOrder,jdbcType=NVARCHAR},#{item.salesOrderItemNo},#{item.customerPO,jdbcType=NVARCHAR},#{item.line,jdbcType=NVARCHAR},#{item.version,jdbcType=NVARCHAR},
#{item.status,jdbcType=NVARCHAR},#{item.family,jdbcType=NVARCHAR},#{item.partNo},#{item.partDescription,jdbcType=NVARCHAR},#{item.qty,jdbcType=DECIMAL},#{item.lt,jdbcType=DECIMAL},#{item.cmcComment,jdbcType=NVARCHAR},#{item.saleType,jdbcType=NVARCHAR},
#{item.awbBl,jdbcType=NVARCHAR},#{item.shippingNumber,jdbcType=NVARCHAR},#{item.forwarderInfo,jdbcType=NVARCHAR},#{item.currency,jdbcType=NVARCHAR},#{item.tp,jdbcType=DECIMAL},#{item.ttlAmount,jdbcType=DECIMAL},#{item.sumPrice,jdbcType=DECIMAL},
#{item.so,jdbcType=NVARCHAR},#{item.upc,jdbcType=NVARCHAR},#{item.remark,jdbcType=NVARCHAR},#{item.pn,jdbcType=NVARCHAR},#{item.qty},#{item.vat},#{item.roll},#{item.carton},#{item.saleslt,jdbcType=NVARCHAR},#{item.manufacturerName,jdbcType=NVARCHAR},#{item.modifyFlag})
#{item.so,jdbcType=NVARCHAR},#{item.upc,jdbcType=NVARCHAR},#{item.remark,jdbcType=NVARCHAR},#{item.pn,jdbcType=NVARCHAR},#{item.qty},#{item.vat},#{item.roll},#{item.carton},#{item.saleslt,jdbcType=NVARCHAR},#{item.manufacturerName,jdbcType=NVARCHAR},#{item.modifyFlag},#{item.modifyQtyFlag})
</foreach>
</insert>
@ -220,7 +220,7 @@
</update>
<update id="updateEcssDelDetailForModify" >
update ecss_CoDelNotifyDetail set modifyFlag=#{modifyFlag},surplus_qty=0 where site=#{site} and delNo=#{delNo}
update ecss_CoDelNotifyDetail set modifyFlag=#{modifyFlag},modifyQtyFlag=#{modifyFlag},surplus_qty=0 where site=#{site} and delNo=#{delNo}
</update>
<update id="changeEcssDelStatus">
@ -249,11 +249,11 @@
insert into ecss_CoDelNotifyDetail(site,bu_no,delNo,item_no,salesOrder,salesOrder_item_no,customerPO,line,version,
status,family,part_no,part_description,qty,lt,cmc_comment,saleType,
awb_bl,shipping_number,forwarder_info,currency,tp,ttl_amount,sum_price,
so,upc,remark,pn,modifyFlag,surplus_qty,vat,roll,carton)
so,upc,remark,pn,modifyFlag,modifyQtyFlag,surplus_qty,vat,roll,carton)
values(#{site},#{buNo},#{delNo},#{itemNo,jdbcType=INTEGER},#{salesOrder},#{salesOrderItemNo},#{customerPO},#{line},#{version},
#{status},#{family},#{partNo},#{partDescription},#{qty,jdbcType=DECIMAL},#{lt,jdbcType=DECIMAL},#{cmcComment},#{saleType},
#{awbBl},#{shippingNumber},#{forwarderInfo},#{currency},#{tp,jdbcType=DECIMAL},#{ttlAmount,jdbcType=DECIMAL},#{sumPrice,jdbcType=DECIMAL},
#{so},#{upc},#{remark},#{pn},#{modifyFlag},#{qty},#{vat},#{roll},#{carton})
#{so},#{upc},#{remark},#{pn},#{modifyFlag},#{modifyQtyFlag},#{qty},#{vat},#{roll},#{carton})
</insert>
<update id="updateEcssDelDetail">
@ -263,7 +263,7 @@
lt=#{lt,jdbcType=DECIMAL},cmc_comment=#{cmcComment},saleType=#{saleType},pn=#{pn},
awb_bl=#{awbBl},shipping_number=#{shippingNumber},forwarder_info=#{forwarderInfo},currency=#{currency},
tp=#{tp,jdbcType=DECIMAL},ttl_amount=#{ttlAmount,jdbcType=DECIMAL},sum_price=#{sumPrice,jdbcType=DECIMAL},
so=#{so},upc=#{upc},remark=#{remark},modifyFlag=#{modifyFlag},surplus_qty=#{qty},vat=#{vat},roll=#{roll},carton=#{carton}
so=#{so},upc=#{upc},remark=#{remark},modifyFlag=#{modifyFlag},modifyQtyFlag=#{modifyQtyFlag},surplus_qty=#{qty},vat=#{vat},roll=#{roll},carton=#{carton}
where
site=#{site} and delNo=#{delNo} and item_no=#{itemNo}
</update>
@ -547,12 +547,45 @@ create_by,create_date,update_by,update_date
</select>
<select id="getDefaultEcssDeclarationDetailData" resultType="EcssDeclarationDetailData">
select #{site} as site, b.hsCode,b.hsCodeDesc as hsCodeDesc,sum(a.qty) as qty,sum( c.Net_Weight) as NetWeight
,'CNY' as currency,'中国' as madeArea,#{destination} as destination,'南通其他' as sourceArea ,'照章征免' as levy
from ecss_CoDelPalletDetail a left join part b on a.site=b.site and a.part_no=b.part_no
left join ecss_CoDelBoxList c on a.site=c.site and a.delNo=c.delNo and a.seq_no=c.item_no
where a.site =#{site} and a.delNo=#{delNo} and a.bu_no=#{buNo}
GROUP BY b.hsCodeDesc,b.hsCode
-- 修复重复计算净重的问题:使用子查询先计算每个hsCode的数量和总净重,然后按比例分配
WITH HsCodeQty AS (
-- 先计算每个hsCode的总数量
SELECT b.hsCode, b.hsCodeDesc, SUM(a.qty) as totalQty
FROM ecss_CoDelPalletDetail a
LEFT JOIN part b ON a.site=b.site AND a.part_no=b.part_no
WHERE a.site=#{site} AND a.delNo=#{delNo} AND a.bu_no=#{buNo}
GROUP BY b.hsCode, b.hsCodeDesc
),
TotalWeight AS (
-- 计算总净重(不重复)
SELECT SUM(net_weight) as totalNetWeight
FROM ecss_CoDelBoxList
WHERE site=#{site} AND delNo=#{delNo} AND bu_no=#{buNo}
),
TotalQty AS (
-- 计算总数量
SELECT SUM(qty) as allQty
FROM ecss_CoDelPalletDetail
WHERE site=#{site} AND delNo=#{delNo} AND bu_no=#{buNo}
)
SELECT
#{site} as site,
h.hsCode,
h.hsCodeDesc,
h.totalQty as qty,
-- 按数量比例分配净重:(该hsCode的数量 / 总数量) * 总净重
CASE
WHEN tq.allQty > 0 THEN CONVERT(DECIMAL(20,2), (h.totalQty * tw.totalNetWeight) / tq.allQty)
ELSE 0
END as NetWeight,
'CNY' as currency,
'中国' as madeArea,
#{destination} as destination,
'南通其他' as sourceArea,
'照章征免' as levy
FROM HsCodeQty h
CROSS JOIN TotalWeight tw
CROSS JOIN TotalQty tq
</select>
<select id="getDefaultEcssDeclarationDetailData2" resultType="EcssDeclarationDetailData">
@ -887,7 +920,7 @@ left join ecss_CoDelNotifyHeader noHeader on a.site=noHeader.site and a.delNo=no
select a.site,a.bu_no,a.delNo,a.item_no,a.salesOrder,a.salesOrder_item_no,a.customerPO,a.line,a.version,a.status,a.family,
a.part_no,a.part_description,a.qty,a.lt,a.cmc_comment,a.saleType,a.awb_bl,a.shipping_number,a.forwarder_info,isnull(a.surplus_qty,0) surplusQty,
a.currency,a.tp,a.ttl_amount,a.sum_price,a.so,a.upc,a.remark,a.erp_delItemNo,a.pn,CONVERT(DECIMAL(20, 0),a.nocartons) as nocartons,
a.modifyFlag
a.modifyFlag,a.modifyQtyFlag
from ecss_CoDelNotifydetail a
where a.site = #{site}
and a.bu_no = #{buNo}

6
src/main/resources/mapper/ecss/EcssCommonMapper.xml

@ -46,7 +46,8 @@
select b.po_no as customerPO,b.part_no,b.qty,
a.box_qty as boxQty,b.rolls,b.pn,a.gross_weight as grossWeight,a.net_weight as netWeight,
#{cmcInvoice} as cmcInvoice,#{shippingMode} as shippingMode,#{destination} as destination,
c.cmc_comment,CONVERT(varchar(10), #{readyDate}, 120) AS readyDate
c.cmc_comment,CONVERT(varchar(10), #{readyDate}, 120) AS readyDate,
CASE WHEN c.modifyFlag = 1 THEN '是' ELSE '否' END AS modifyFlag
from ecss_CoDelBoxList a
left join ecss_CoDelPalletDetail b on a.site=b.site and a.bu_no=b.bu_no and a.delNo=b.delNo and a.item_no=b.seq_no
left join ecss_CoDelNotifydetail c on b.site=c.site and b.bu_no=c.bu_no and b.delNo=c.delNo and b.notify_detail_item_no=c.item_no
@ -56,7 +57,8 @@
<select id="searchEcssCoDelNotifyDetailList" resultType="java.util.Map">
select a.customerPO,a.part_no,a.part_description,a.currency,
CONVERT(DECIMAL(20, 0), a.qty) as qty,CONVERT(DECIMAL(20, 5), a.tp) as unitPrice,b.hsCode,
a.upc,a.so,a.ttl_amount,a.pn,h.hsCodeDesc,h.hsCodeDescEn
a.upc,a.so,a.ttl_amount,a.pn,h.hsCodeDesc,h.hsCodeDescEn,a.cmc_comment,
CASE WHEN a.modifyFlag = 1 THEN '是' ELSE '否' END AS modifyFlag
from ecss_CoDelNotifydetail a
left join part b on a.site=b.site and a.part_no=b.part_no
left join ecss_hsCode h on b.hsCode=h.HsCode and a.site=h.site and b.hsCodeDesc=h.hsCodeDesc

BIN
src/main/resources/templates/packing-template.xlsx

Loading…
Cancel
Save