2025-10-30 07:47:33 +00:00
package tqq9.lc123.cloud.app.plugin.operate.im ;
2025-11-11 04:28:43 +00:00
import com.alibaba.nacos.common.utils.StringUtils ;
2025-12-19 09:25:33 +00:00
import kd.bos.algo.DataSet ;
2025-10-30 07:47:33 +00:00
import kd.bos.dataentity.entity.DynamicObject ;
import kd.bos.dataentity.entity.DynamicObjectCollection ;
2025-12-19 09:25:33 +00:00
import kd.bos.db.DB ;
import kd.bos.db.DBRoute ;
2025-10-30 07:47:33 +00:00
import kd.bos.entity.ExtendedDataEntity ;
import kd.bos.entity.ExtendedDataEntitySet ;
import kd.bos.entity.botp.plugin.AbstractConvertPlugIn ;
import kd.bos.entity.botp.plugin.args.AfterConvertEventArgs ;
import kd.bos.logging.Log ;
import kd.bos.logging.LogFactory ;
2025-12-19 09:25:33 +00:00
import kd.bos.orm.ORM ;
2025-10-30 07:47:33 +00:00
import kd.bos.orm.query.QCP ;
import kd.bos.orm.query.QFilter ;
import kd.bos.servicehelper.BusinessDataServiceHelper ;
2025-12-19 09:25:33 +00:00
import kd.bos.servicehelper.QueryServiceHelper ;
2025-10-30 07:47:33 +00:00
import kd.sdk.plugin.Plugin ;
import java.math.BigDecimal ;
2025-11-17 10:15:54 +00:00
import java.util.* ;
2025-10-30 07:47:33 +00:00
/ * *
* 单据转换插件
* /
public class PurOrderPushPurRefundConverPlugin extends AbstractConvertPlugIn implements Plugin {
private final static Log logger = LogFactory . getLog ( PurOrderPushPurRefundConverPlugin . class ) ;
private static String PM_PURREFUNDAPPLYBILL = " pm_purrefundapplybill " ;
/ * *
* 采购订单下推采购退货申请
* /
@Override
public void afterConvert ( AfterConvertEventArgs e ) {
super . afterConvert ( e ) ;
ExtendedDataEntitySet targetExtDataEntitySet = e . getTargetExtDataEntitySet ( ) ;
ExtendedDataEntity [ ] extendedDataEntities = targetExtDataEntitySet . FindByEntityKey ( PM_PURREFUNDAPPLYBILL ) ;
for ( ExtendedDataEntity extendedDataEntity : extendedDataEntities ) {
//采购退货申请
DynamicObject dataEntity = extendedDataEntity . getDataEntity ( ) ;
DynamicObjectCollection dynamicObjectCollection = dataEntity . getDynamicObjectCollection ( " billentry " ) ;
DynamicObject [ ] im_purinblil = null ;
2025-11-11 09:28:36 +00:00
DynamicObject [ ] pm_purrefundapplybill = null ;
2025-12-19 09:25:33 +00:00
// String firstMainBillNumber = dynamicObjectCollection.get(0).getString("mainbillnumber");
// boolean allSame = true; // 标记是否所有 mainbillnumber 相同
// for (int i = 0; i < dynamicObjectCollection.size(); i++) {
// String currentMainBillNumber = dynamicObjectCollection.get(i).getString("mainbillnumber");
// // 检查当前的 mainbillnumber 是否与第一个相同
// if (!currentMainBillNumber.equals(firstMainBillNumber)) {
// throw new RuntimeException("不允许选择多张订单");
// }
// }
2025-10-30 07:47:33 +00:00
for ( DynamicObject entry : dynamicObjectCollection ) {
String mainbillnumber = entry . getString ( " mainbillnumber " ) ;
//采购订单
im_purinblil = BusinessDataServiceHelper . load ( " im_purinbill " , " id,name,billentry.material,billentry.entryreqorg, " +
" billentry.taxrateid,billentry.discounttype,billentry.mainbillentity,billentry.mainbillid,billentry.mainbillnumber,billentry.mainbillentryid, " +
" billentry.mainbillentryseq,billentry.entrycreator,billentry.entrycreatetime,billentry.entrymodifier, " +
" billentry.entrymodifytime,billentry.linetype,billentry.tqq9_registration,billentry.tqq9_licenseno, " +
" billentry.tqq9_brand,billentry.warehouse,billentry.qty,billentry.ispresent, " +
" billentry.ownertype,billentry.mversion,billentry.unit2nd,billentry.qtyunit2nd, " +
" billentry.auxpty,billentry.discountrate,billentry.price,billentry.priceandtax, " +
2025-12-04 06:26:18 +00:00
" billentry.amount,billentry.curamount,billentry.taxamount,billentry.curtaxamount,billentry.tqq9_cs, " +
2025-10-30 07:47:33 +00:00
" billentry.discountamount,billentry.amountandtax,billentry.curamountandtax,billentry.returnqty, " +
" billentry.returnbaseqty,billentry.tqq9_yyhyflje,billentry.tqq9_yyhwflje,billentry.lotnumber, " +
2025-12-17 10:02:38 +00:00
" billentry.tqq9_goods,billentry.tqq9_wmsdetailid,billentry.producedate,billentry.expirydate,creator,createtime,modifier,modifytime,billentry.owner,billentry.taxrate,billentry.srcbillnumber,billentry.tqq9_inwarebillentryid,billentry.invtype,billentry.tqq9_cksx " , new QFilter [ ] { new QFilter ( " billentry.mainbillnumber " , QCP . equals , mainbillnumber ) . and ( " billstatus " , QCP . equals , " C " ) } ) ;
2025-11-11 09:28:36 +00:00
//采购退货申请单
2025-12-17 10:02:38 +00:00
pm_purrefundapplybill = BusinessDataServiceHelper . load ( " pm_purrefundapplybill " , " id,name,billno,billentry.material,billentry.qty,billentry.returnqty,billentry.tqq9_inwarebillentryid,tqq9_sourcebillno " , new QFilter [ ] { new QFilter ( " billentry.mainbillnumber " , QCP . equals , mainbillnumber ) . and ( " tqq9_sourcebillno " , QCP . equals , " " ) } ) ;
2025-10-30 07:47:33 +00:00
}
BigDecimal zero = BigDecimal . ZERO ;
2025-12-17 10:02:38 +00:00
if ( im_purinblil ! = null ) {
2025-11-24 09:51:17 +00:00
dynamicObjectCollection . clear ( ) ;
}
2025-12-19 09:25:33 +00:00
StringBuilder inWaresId = new StringBuilder ( ) ;
2025-11-03 10:21:37 +00:00
if ( im_purinblil ! = null ) {
2025-11-17 10:15:54 +00:00
HashMap < String , ArrayList < BigDecimal > > map = new HashMap < > ( ) ;
2025-10-30 07:47:33 +00:00
for ( DynamicObject dynamicObject : im_purinblil ) {
DynamicObjectCollection billentry = dynamicObject . getDynamicObjectCollection ( " billentry " ) ;
String billid = dynamicObject . getString ( " id " ) ;
for ( DynamicObject object : billentry ) {
2025-12-17 10:02:38 +00:00
BigDecimal qty = object . getBigDecimal ( " qty " ) ; //数量
2025-12-19 09:25:33 +00:00
String tqq9_inwarebillentryid = object . getString ( " id " ) ;
2025-10-30 07:47:33 +00:00
DynamicObject material = object . getDynamicObject ( " material " ) ; //物料库存信息
DynamicObject masterid = material . getDynamicObject ( " masterid " ) ; //物料信息
//物料采购信息
DynamicObject bd_materialpurchaseinfo = BusinessDataServiceHelper . loadSingle ( " bd_materialpurchaseinfo " , new QFilter [ ] { new QFilter ( " masterid " , QCP . equals , masterid . getLong ( " id " ) ) } ) ;
2025-11-03 10:21:37 +00:00
masterid = BusinessDataServiceHelper . loadSingle ( " bd_material " , new QFilter [ ] { new QFilter ( " id " , QCP . equals , masterid . getLong ( " id " ) ) } ) ;
2025-10-30 07:47:33 +00:00
String materialname = bd_materialpurchaseinfo . getString ( " masterid.name " ) ; //物料名称
DynamicObject baseunit = masterid . getDynamicObject ( " baseunit " ) ; //计量单位
DynamicObject entryreqorg = object . getDynamicObject ( " entryreqorg " ) ; //需求组织
DynamicObject taxrateid = object . getDynamicObject ( " taxrateid " ) ; //税率
2025-11-04 07:45:38 +00:00
BigDecimal taxrate = object . getBigDecimal ( " taxrate " ) ; //税率%
2025-10-30 07:47:33 +00:00
String discounttype = object . getString ( " discounttype " ) ; //折扣方式
String mainbillentity = object . getString ( " mainbillentity " ) ; //核心单据实体
String mainbillid = object . getString ( " mainbillid " ) ; //核心单据ID
String mainbillnumber = object . getString ( " mainbillnumber " ) ; //核心单据编号
String mainbillentryid = object . getString ( " mainbillentryid " ) ; //核心单据行ID
String mainbillentryseq = object . getString ( " mainbillentryseq " ) ; //核心单据分录序号
DynamicObject creator = dynamicObject . getDynamicObject ( " creator " ) ; //创建人
Date createtime = dynamicObject . getDate ( " createtime " ) ; //创建时间
DynamicObject modifier = dynamicObject . getDynamicObject ( " modifier " ) ; //修改人
Date modifytime = dynamicObject . getDate ( " modifytime " ) ; //修改时间
DynamicObject linetype = object . getDynamicObject ( " linetype " ) ; //行类型
DynamicObject tqq9_registration = object . getDynamicObject ( " tqq9_registration " ) ; //注册证
2025-12-04 06:26:18 +00:00
String tqq9_cs = object . getString ( " tqq9_cs " ) ; //生产厂商
2025-10-30 07:47:33 +00:00
String tqq9_licenseno = object . getString ( " tqq9_licenseno " ) ; //许可证
DynamicObject tqq9_brand = masterid . getDynamicObject ( " tqq9_brand " ) ; //品牌
DynamicObject warehouse = object . getDynamicObject ( " warehouse " ) ; //入库仓库
Boolean ispresent = object . getBoolean ( " ispresent " ) ; //是否赠品
String ownertype = object . getString ( " ownertype " ) ; //货主类型
DynamicObject owner = object . getDynamicObject ( " owner " ) ; //货主
DynamicObject version = object . getDynamicObject ( " mversion " ) ; //物料版本
DynamicObject unit2nd = object . getDynamicObject ( " unit2nd " ) ; //辅助单位
BigDecimal qtyunit2nd = object . getBigDecimal ( " qtyunit2nd " ) ; //辅助数量
Object auxpty = object . get ( " auxpty " ) ; //辅助属性
BigDecimal discountrate = object . getBigDecimal ( " discountrate " ) ; //单位折扣(率)
BigDecimal price = object . getBigDecimal ( " price " ) ; //单价
BigDecimal priceandtax = object . getBigDecimal ( " priceandtax " ) ; //含税单价
BigDecimal amount = object . getBigDecimal ( " amount " ) ; //金额
BigDecimal curamount = object . getBigDecimal ( " curamount " ) ; //金额(本位币)
BigDecimal taxamount = object . getBigDecimal ( " taxamount " ) ; //税额
BigDecimal curtaxamount = object . getBigDecimal ( " curtaxamount " ) ; //税额(本位币)
BigDecimal discountamount = object . getBigDecimal ( " discountamount " ) ; //优惠(折扣)金额
BigDecimal amountandtax = object . getBigDecimal ( " amountandtax " ) ; //折扣后价税合计
BigDecimal curamountandtax = object . getBigDecimal ( " curamountandtax " ) ; //价税合计(本位币)
BigDecimal returnqty = object . getBigDecimal ( " returnqty " ) ; //退库数量
BigDecimal returnbaseqty = object . getBigDecimal ( " returnbaseqty " ) ; //退库数量
BigDecimal tqq9_yyhyflje = object . getBigDecimal ( " tqq9_yyhyflje " ) ; //有优惠有返利含税单价
BigDecimal tqq9_yyhwflje = object . getBigDecimal ( " tqq9_yyhwflje " ) ; //有优惠无返利含税单价
String lotnumber = object . getString ( " lotnumber " ) ; //批号
2025-11-03 10:21:37 +00:00
DynamicObject bd_lot = BusinessDataServiceHelper . loadSingle ( " bd_lot " , new QFilter [ ] { new QFilter ( " number " , QCP . equals , lotnumber ) } ) ;
2025-10-30 07:47:33 +00:00
DynamicObject tqq9_goods = object . getDynamicObject ( " tqq9_goods " ) ; //商品
String tqq9_wmsdetailid = object . getString ( " tqq9_wmsdetailid " ) ; //WMS分录id
Date producedate = object . getDate ( " producedate " ) ; //生产日期
Date expirydate = object . getDate ( " expirydate " ) ; //生产日期
2025-11-06 06:12:41 +00:00
String srcbillnumber = object . getString ( " srcbillnumber " ) ; //来源单据编号(收货单)
2025-12-15 05:45:13 +00:00
DynamicObject invtype = object . getDynamicObject ( " invtype " ) ; //入库库存类型
2025-12-17 10:02:38 +00:00
DynamicObject tqq9_cksx = object . getDynamicObject ( " tqq9_cksx " ) ; //仓库属性
2025-10-30 07:47:33 +00:00
2025-11-03 10:21:37 +00:00
if ( qty . compareTo ( BigDecimal . ZERO ) > 0 ) {
DynamicObject dynamicObject1 = dynamicObjectCollection . addNew ( ) ;
dynamicObject1 . set ( " material " , bd_materialpurchaseinfo ) ;
dynamicObject1 . set ( " materialname " , materialname ) ;
dynamicObject1 . set ( " unit " , baseunit ) ;
dynamicObject1 . set ( " baseunit " , baseunit ) ;
dynamicObject1 . set ( " rowclosestatus " , " A " ) ;
dynamicObject1 . set ( " rowterminatestatus " , " A " ) ;
dynamicObject1 . set ( " entryreqorg " , " A " ) ;
dynamicObject1 . set ( " entryreqorg " , entryreqorg ) ;
dynamicObject1 . set ( " entryinvcorg " , entryreqorg ) ;
dynamicObject1 . set ( " entrysettleorg " , entryreqorg ) ;
dynamicObject1 . set ( " taxrateid " , taxrateid ) ;
2025-11-04 07:45:38 +00:00
dynamicObject1 . set ( " taxrate " , taxrate ) ;
2025-11-03 10:21:37 +00:00
dynamicObject1 . set ( " discounttype " , discounttype ) ;
dynamicObject1 . set ( " entrypayorg " , entryreqorg ) ;
dynamicObject1 . set ( " mainbillentity " , mainbillentity ) ;
dynamicObject1 . set ( " mainbillid " , mainbillid ) ;
dynamicObject1 . set ( " mainbillnumber " , mainbillnumber ) ;
dynamicObject1 . set ( " mainbillentryid " , mainbillentryid ) ;
dynamicObject1 . set ( " mainbillentryseq " , mainbillentryseq ) ;
dynamicObject1 . set ( " srcbillentity " , mainbillentity ) ;
dynamicObject1 . set ( " srcbillid " , mainbillid ) ;
dynamicObject1 . set ( " srcbillnumber " , mainbillnumber ) ;
dynamicObject1 . set ( " srcbillentryid " , mainbillentryid ) ;
dynamicObject1 . set ( " srcbillentryseq " , mainbillentryseq ) ;
dynamicObject1 . set ( " entrycreator " , creator ) ;
dynamicObject1 . set ( " entrycreatetime " , createtime ) ;
dynamicObject1 . set ( " entrymodifier " , modifier ) ;
dynamicObject1 . set ( " entrymodifytime " , modifytime ) ;
dynamicObject1 . set ( " linetype " , linetype ) ;
dynamicObject1 . set ( " tqq9_registration " , tqq9_registration ) ;
2025-12-02 10:17:19 +00:00
dynamicObject1 . set ( " tqq9_cs " , tqq9_cs ) ;
2025-11-03 10:21:37 +00:00
dynamicObject1 . set ( " tqq9_licenseno " , tqq9_licenseno ) ;
dynamicObject1 . set ( " tqq9_brand " , tqq9_brand ) ;
dynamicObject1 . set ( " tqq9_thck " , warehouse ) ;
dynamicObject1 . set ( " tqq9_kclx " , " ZP " ) ;
dynamicObject1 . set ( " tqq9_maxqty " , qty ) ;
dynamicObject1 . set ( " qty " , qty ) ;
dynamicObject1 . set ( " baseqty " , qty ) ;
dynamicObject1 . set ( " ispresent " , ispresent ) ;
dynamicObject1 . set ( " ownertype " , ownertype ) ;
dynamicObject1 . set ( " owner " , owner ) ;
dynamicObject1 . set ( " materialversion " , version ) ;
dynamicObject1 . set ( " auxunit " , unit2nd ) ;
dynamicObject1 . set ( " auxqty " , qtyunit2nd ) ;
dynamicObject1 . set ( " auxpty " , auxpty ) ;
dynamicObject1 . set ( " discountrate " , discountrate ) ;
dynamicObject1 . set ( " price " , price ) ;
dynamicObject1 . set ( " priceandtax " , priceandtax ) ;
dynamicObject1 . set ( " amount " , amount ) ;
dynamicObject1 . set ( " curamount " , curamount ) ;
dynamicObject1 . set ( " taxamount " , taxamount ) ;
dynamicObject1 . set ( " curtaxamount " , curtaxamount ) ;
dynamicObject1 . set ( " discountamount " , discountamount ) ;
dynamicObject1 . set ( " amountandtax " , amountandtax ) ;
dynamicObject1 . set ( " curamountandtax " , curamountandtax ) ;
dynamicObject1 . set ( " joinqty " , zero ) ;
dynamicObject1 . set ( " joinbaseqty " , zero ) ;
dynamicObject1 . set ( " returnqty " , returnqty ) ;
dynamicObject1 . set ( " returnbaseqty " , returnbaseqty ) ;
dynamicObject1 . set ( " tqq9_yyhyflje " , tqq9_yyhyflje ) ;
dynamicObject1 . set ( " tqq9_yyhwflje " , tqq9_yyhwflje ) ;
dynamicObject1 . set ( " tqq9_ph " , bd_lot ) ;
dynamicObject1 . set ( " tqq9_goods " , tqq9_goods ) ;
dynamicObject1 . set ( " tqq9_inwarebill " , dynamicObject ) ;
dynamicObject1 . set ( " tqq9_inwarebillid " , billid ) ;
2025-12-19 09:25:33 +00:00
dynamicObject1 . set ( " tqq9_inwarebillentryid " , tqq9_inwarebillentryid ) ;
inWaresId . append ( " , " ) . append ( tqq9_inwarebillentryid ) ;
2025-11-03 10:21:37 +00:00
dynamicObject1 . set ( " tqq9_inwarebillentryqty " , qty ) ;
dynamicObject1 . set ( " tqq9_wmsdetailid " , tqq9_wmsdetailid ) ;
dynamicObject1 . set ( " tqq9_productdate " , producedate ) ;
dynamicObject1 . set ( " tqq9_expiredate " , expirydate ) ;
2025-11-06 06:12:41 +00:00
dynamicObject1 . set ( " tqq9_shbillno " , srcbillnumber ) ;
2025-12-15 05:45:13 +00:00
dynamicObject1 . set ( " tqq9_basedatafield1 " , invtype ) ;
2025-12-17 10:02:38 +00:00
dynamicObject1 . set ( " tqq9_assistantfield " , tqq9_cksx ) ;
2025-11-11 04:28:43 +00:00
} else {
2025-11-17 10:15:54 +00:00
if ( map . containsKey ( tqq9_inwarebillentryid ) ) {
ArrayList < BigDecimal > entry_qty = map . get ( tqq9_inwarebillentryid ) ;
entry_qty . add ( qty ) ;
map . put ( tqq9_inwarebillentryid , entry_qty ) ;
2025-12-17 10:02:38 +00:00
} else {
2025-11-17 10:15:54 +00:00
ArrayList < BigDecimal > objects = new ArrayList < > ( ) ;
objects . add ( qty ) ;
map . put ( tqq9_inwarebillentryid , objects ) ;
}
2025-11-11 04:28:43 +00:00
}
}
}
2025-11-17 10:15:54 +00:00
for ( Map . Entry < String , ArrayList < BigDecimal > > entrySet : map . entrySet ( ) ) {
2025-11-11 04:28:43 +00:00
String id = entrySet . getKey ( ) ;
2025-11-17 10:15:54 +00:00
ArrayList < BigDecimal > qtylist = entrySet . getValue ( ) ;
2025-11-11 06:48:50 +00:00
ListIterator < DynamicObject > iterator = dynamicObjectCollection . listIterator ( ) ;
while ( iterator . hasNext ( ) ) {
DynamicObject dynamicObject1 = iterator . next ( ) ;
2025-11-11 04:28:43 +00:00
String inwarebillentryid = dynamicObject1 . getString ( " tqq9_inwarebillentryid " ) ;
if ( StringUtils . equals ( inwarebillentryid , id ) ) {
BigDecimal qty2 = dynamicObject1 . getBigDecimal ( " qty " ) ;
2025-11-17 10:15:54 +00:00
BigDecimal add = qty2 ;
for ( BigDecimal bigDecimal : qtylist ) {
2025-12-17 10:02:38 +00:00
add = add . add ( bigDecimal ) ;
2025-11-17 10:15:54 +00:00
}
2025-11-11 09:28:36 +00:00
if ( add . compareTo ( BigDecimal . ZERO ) > 0 ) {
2025-11-11 04:28:43 +00:00
dynamicObject1 . set ( " tqq9_inwarebillentryqty " , add ) ;
dynamicObject1 . set ( " tqq9_maxqty " , add ) ;
dynamicObject1 . set ( " qty " , add ) ;
dynamicObject1 . set ( " baseqty " , add ) ;
2025-11-11 09:28:36 +00:00
} else {
iterator . remove ( ) ;
}
}
}
}
//采购退货申请锁定数量扣减
if ( pm_purrefundapplybill ! = null ) {
for ( DynamicObject dynamicObject : pm_purrefundapplybill ) {
DynamicObjectCollection billentry = dynamicObject . getDynamicObjectCollection ( " billentry " ) ;
for ( DynamicObject object : billentry ) {
BigDecimal returnqty = object . getBigDecimal ( " returnqty " ) ;
BigDecimal qty = object . getBigDecimal ( " qty " ) ;
BigDecimal subtract = qty . subtract ( returnqty ) ;
if ( subtract . compareTo ( zero ) > 0 ) {
String id = object . getString ( " tqq9_inwarebillentryid " ) ;
ListIterator < DynamicObject > iterator = dynamicObjectCollection . listIterator ( ) ;
while ( iterator . hasNext ( ) ) {
DynamicObject dynamicObject1 = iterator . next ( ) ;
String inwarebillentryid = dynamicObject1 . getString ( " tqq9_inwarebillentryid " ) ;
if ( StringUtils . equals ( inwarebillentryid , id ) ) {
BigDecimal qty1 = dynamicObject1 . getBigDecimal ( " qty " ) ;
BigDecimal subtract1 = qty1 . subtract ( subtract ) ;
if ( subtract1 . compareTo ( BigDecimal . ZERO ) > 0 ) {
dynamicObject1 . set ( " tqq9_inwarebillentryqty " , subtract1 ) ;
dynamicObject1 . set ( " tqq9_maxqty " , subtract1 ) ;
dynamicObject1 . set ( " qty " , subtract1 ) ;
dynamicObject1 . set ( " baseqty " , subtract1 ) ;
} else {
iterator . remove ( ) ;
}
}
}
}
2025-11-03 10:21:37 +00:00
}
}
2025-10-30 07:47:33 +00:00
}
2025-12-19 09:25:33 +00:00
//物料
DataSet materialpurchaseinfoDataSet = QueryServiceHelper . queryDataSet ( this . getClass ( ) . getName ( ) ,
" bd_materialinventoryinfo " ,
" id as materialinventoryinfo,masterid as material " ,
new QFilter [ ] { } ,
null ) ;
//采购入库sql
String purInSql = " /*dialect*/select fentryid id,fwarehouseid warehouse,fk_tqq9_goods goods,fmaterialid inventoryinfo,flotnumber lot,fproducedate producedate,fexpirydate expirydate, \ n " +
" fk_tqq9_registration registration,fk_tqq9_cksx tqq9_cksx,finvstatusid invstatus,finvtypeid invtype from t_im_purinbillentry where fentryid in( " + inWaresId . substring ( 1 ) + " ) " ;
logger . info ( " PuroderBillShareRefundPlugin-采购入库sql " + purInSql ) ;
//即时库存余额表
String realBalanceSql = " /*dialect*/select fid realbalanceId,fwarehouseid warehouse,fk_tqq9_goods goods,fmaterialid material,flotnum lot,fproducedate producedate,fexpirydate expirydate, \ n " +
" fk_tqq9_registration registration,fk_tqq9_cksx tqq9_cksx,finvstatusid invstatus,finvtypeid invtype,COALESCE(fqty,0) qty from t_im_inv_realbalance " ;
logger . info ( " PuroderBillShareRefundPlugin-即时库存余额表sql " + realBalanceSql ) ;
//预留记录
String reserveRecordSql = " /*dialect*/select f_bal_id realbalanceId,sum(COALESCE(f_qty,0)) s_qty from t_msmod_reserverecord group by f_bal_id " ;
logger . info ( " PuroderBillShareRefundPlugin-预留记录sql " + reserveRecordSql ) ;
DataSet purInDataSet = DB . queryDataSet ( this . getClass ( ) . getName ( ) , DBRoute . of ( " scm " ) , purInSql ) ;
DataSet realBalanceDataSet = DB . queryDataSet ( this . getClass ( ) . getName ( ) , DBRoute . of ( " scm " ) , realBalanceSql ) ;
DataSet reserveRecordDataSet = DB . queryDataSet ( this . getClass ( ) . getName ( ) , DBRoute . of ( " scm " ) , reserveRecordSql ) ;
purInDataSet = purInDataSet . leftJoin ( materialpurchaseinfoDataSet ) . on ( " inventoryinfo " , " materialinventoryinfo " ) . select ( " id " , " warehouse " , " goods " , " material " , " lot " , " producedate " , " expirydate " , " registration "
, " tqq9_cksx " , " invstatus " , " invtype " ) . finish ( )
. leftJoin ( realBalanceDataSet ) . on ( " warehouse " , " warehouse " ) . on ( " goods " , " goods " ) . on ( " material " , " material " ) . on ( " lot " , " lot " ) . on ( " producedate " , " producedate " )
. on ( " expirydate " , " expirydate " ) . on ( " registration " , " registration " ) . on ( " tqq9_cksx " , " tqq9_cksx " ) . on ( " invstatus " , " invstatus " ) . on ( " invtype " , " invtype " )
. select ( " id " , " realbalanceId " , " warehouse " , " goods " , " material " , " lot " , " producedate " , " expirydate " , " registration "
, " tqq9_cksx " , " invstatus " , " invtype " , " qty " ) . finish ( )
. leftJoin ( reserveRecordDataSet ) . on ( " realbalanceId " , " realbalanceId " ) . select ( " id " , " realbalanceId " , " warehouse " , " goods " , " material " , " lot " , " producedate " , " expirydate " , " registration "
, " tqq9_cksx " , " invstatus " , " invtype " , " qty " , " (CASE WHEN qty IS NULL THEN 0 ELSE qty END) - (CASE WHEN s_qty IS NULL THEN 0 ELSE s_qty END) AS totalQty " ) . finish ( ) ;
DataSet copy = purInDataSet . copy ( ) ;
DynamicObjectCollection dynamicObjects = ORM . create ( ) . toPlainDynamicObjectCollection ( copy ) ;
HashMap < String , BigDecimal > qtyMap = new HashMap < > ( ) ;
for ( DynamicObject dynamicObject : dynamicObjects ) {
String id = dynamicObject . getString ( " id " ) ;
BigDecimal totalQty = dynamicObject . getBigDecimal ( " totalQty " ) ;
qtyMap . put ( id , totalQty ) ;
}
for ( DynamicObject dynamicObject : dynamicObjectCollection ) {
String tqq9_inwarebillentryid = dynamicObject . getString ( " tqq9_inwarebillentryid " ) ;
BigDecimal totalQty = qtyMap . get ( tqq9_inwarebillentryid ) ;
dynamicObject . set ( " tqq9_pckyamount " , totalQty ) ;
}
2025-10-30 07:47:33 +00:00
}
2025-12-19 09:25:33 +00:00
2025-10-30 07:47:33 +00:00
}
}
}