2025-08-12 03:42:59 +00:00
package tqq9.lc123.cloud.app.plugin.form.pm ;
import kd.bos.algo.DataSet ;
import kd.bos.bill.BillShowParameter ;
import kd.bos.coderule.api.CodeRuleInfo ;
import kd.bos.dataentity.entity.DynamicObject ;
import kd.bos.dataentity.entity.DynamicObjectCollection ;
import kd.bos.dataentity.utils.StringUtils ;
import kd.bos.db.DB ;
import kd.bos.db.DBRoute ;
import kd.bos.entity.datamodel.IDataModel ;
import kd.bos.form.CloseCallBack ;
import kd.bos.form.ShowFormHelper ;
import kd.bos.form.ShowType ;
import kd.bos.form.control.EntryGrid ;
import kd.bos.form.control.events.ItemClickEvent ;
import kd.bos.form.plugin.AbstractFormPlugin ;
import kd.bos.list.ListFilterParameter ;
import kd.bos.list.ListShowParameter ;
import kd.bos.logging.Log ;
import kd.bos.logging.LogFactory ;
import kd.bos.orm.ORM ;
import kd.bos.orm.query.QCP ;
import kd.bos.orm.query.QFilter ;
import kd.bos.servicehelper.BusinessDataServiceHelper ;
import kd.bos.servicehelper.QueryServiceHelper ;
import kd.bos.servicehelper.coderule.CodeRuleServiceHelper ;
import kd.bos.servicehelper.operation.SaveServiceHelper ;
import kd.bos.servicehelper.user.UserServiceHelper ;
import kd.sdk.plugin.Plugin ;
import oadd.org.apache.hadoop.io.compress.zlib.BuiltInZlibInflater ;
import java.math.BigDecimal ;
import java.util.* ;
/ * *
* 动态表单插件
* /
public class PurSuggestRptFromPlugin extends AbstractFormPlugin implements Plugin {
private final static Log logger = LogFactory . getLog ( PurSuggestRptFromPlugin . class ) ;
private static DynamicObject BILLTYPE ;
private static DynamicObject BIZTYPE ;
private static DynamicObject LINETYPE ;
static {
DynamicObject billtype = BusinessDataServiceHelper . loadSingle ( " bos_billtype " , new QFilter [ ] { new QFilter ( " number " , QCP . equals , " pm_PurApplyBill_STD_BT_S " ) } ) ;
BILLTYPE = billtype ;
DynamicObject biztype = BusinessDataServiceHelper . loadSingle ( " bd_biztype " , new QFilter [ ] { new QFilter ( " number " , QCP . equals , " 110 " ) } ) ;
BIZTYPE = biztype ;
DynamicObject linetype = BusinessDataServiceHelper . loadSingle ( " bd_linetype " , new QFilter [ ] { new QFilter ( " number " , QCP . equals , " 010 " ) } ) ;
LINETYPE = linetype ;
}
@Override
public void registerListener ( EventObject e ) {
super . registerListener ( e ) ;
this . addItemClickListeners ( " tbmain " ) ;
}
@Override
public void itemClick ( ItemClickEvent evt ) {
super . itemClick ( evt ) ;
String itemKey = evt . getItemKey ( ) ;
IDataModel model = this . getModel ( ) ;
DynamicObject dataEntity = model . getDataEntity ( true ) ;
if ( " tqq9_query " . equals ( itemKey ) ) {
DynamicObjectCollection entryentity = dataEntity . getDynamicObjectCollection ( " tqq9_pursuggestrptentry " ) ;
if ( entryentity . size ( ) ! = 0 ) {
entryentity . clear ( ) ;
}
DynamicObjectCollection tqq9_queryorg = dataEntity . getDynamicObjectCollection ( " tqq9_queryorg " ) ;
DynamicObjectCollection tqq9_querysku = dataEntity . getDynamicObjectCollection ( " tqq9_querysku " ) ;
List < String > org = new ArrayList < > ( ) ;
List < String > sku = new ArrayList < > ( ) ;
StringBuilder orgBuilder = new StringBuilder ( ) ;
StringBuilder skuBuilder = new StringBuilder ( ) ;
for ( DynamicObject dynamicObject : tqq9_queryorg ) {
String id = dynamicObject . getString ( " fbasedataid.id " ) ;
org . add ( id ) ;
orgBuilder . append ( " , " ) . append ( id ) ;
}
for ( DynamicObject dynamicObject : tqq9_querysku ) {
String id = dynamicObject . getString ( " fbasedataid.id " ) ;
sku . add ( id ) ;
skuBuilder . append ( " , " ) . append ( id ) ;
}
//物料Map
DynamicObject [ ] materials = BusinessDataServiceHelper . load ( " bd_material " , " id,number,name,tqq9_brand,baseunit " , null ) ;
HashMap < Long , DynamicObject > materialMap = new HashMap < Long , DynamicObject > ( ) ;
for ( DynamicObject dynamicObject : materials ) {
materialMap . put ( dynamicObject . getLong ( " id " ) , dynamicObject ) ;
}
//组织Map
DynamicObject [ ] adminorgs = BusinessDataServiceHelper . load ( " bos_adminorg " , " id,number " , null ) ;
HashMap < Long , DynamicObject > adminorgMap = new HashMap < Long , DynamicObject > ( ) ;
for ( DynamicObject dynamicObject : adminorgs ) {
adminorgMap . put ( dynamicObject . getLong ( " id " ) , dynamicObject ) ;
}
QFilter warehouseF = new QFilter ( " number " , QCP . in , new String [ ] { " 001 " , " 006 " } ) ;
DynamicObject [ ] warehouses = BusinessDataServiceHelper . load ( " bd_warehouse " , " id,number " , warehouseF . toArray ( ) ) ;
StringBuilder warehouseSb = new StringBuilder ( ) ;
for ( DynamicObject warehouse : warehouses ) {
String id = warehouse . getString ( " id " ) ;
warehouseSb . append ( " ,' " ) . append ( id ) . append ( " ' " ) ;
}
DataSet materialinventoryinfoDataSet = QueryServiceHelper . queryDataSet ( this . getClass ( ) . getName ( ) ,
" bd_materialinventoryinfo " ,
" id as materialinventoryid,masterid as tqq9_sku " ,
new QFilter [ ] { } ,
null ) ;
//即时库存表
String realbalancesql = " /*dialect*/select t1.fmaterialid tqq9_sku,t1.forgid tqq9_org,sum(t1.fqty) tqq9_totalinventory " +
" from t_im_inv_realbalance t1 group by fmaterialid,forgid " ;
//销售订单
String saloutbillsql = " /*dialect*/ SELECT sum(CASE WHEN fbiztime >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '3' MONTH) AND fbiztime < DATE_TRUNC('month', CURRENT_DATE)THEN t2.fqty ELSE 0 END) / 3 AS permonthsales, \ n " +
" sum(CASE WHEN fbiztime >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '2' MONTH) AND fbiztime < DATE_TRUNC('month', CURRENT_DATE)THEN t2.fqty ELSE 0 END) AS last_2month_sum, \ n " +
" sum(case when t1.fbiztime>= CURRENT_DATE - INTERVAL '90 days' then t2.fqty else 0 end) tqq9_totalqty, \ n " +
" sum(CASE WHEN t1.fbillstatus in('A','B','C') and t2.fwarehouseid in ( " + warehouseSb . substring ( 1 ) + " ) then t2.fqty ELSE 0 END)tqq9_onorderinventory,t2.fmaterialid materialinventoryid, t1.forgid tqq9_org \ n " +
" FROM t_im_saloutbill t1,t_im_saloutbillentry t2 WHERE t1.fid = t2.fid AND t1.fbillstatus = 'C'GROUP BY t2.fmaterialid, t1.forgid " ;
//采购订单
String purorderbillsql = " /*dialect*/select t2.fmaterialid tqq9_sku,t1.forgid tqq9_org, sum(CASE WHEN t1.fclosestatus='A' then t1.fk_tqq9_purqty ELSE 0 END) tqq9_oninventory \ n " +
" from t_pm_purorderbill t1,t_pm_purorderbillentry t2 where t1.fid=t2.fid and t1.fbillstatus='C' GROUP BY t2.fmaterialid,t1.forgid " ;
DataSet realbalanceDataSet = DB . queryDataSet ( this . getClass ( ) . getName ( ) , DBRoute . of ( " scm " ) , realbalancesql ) ;
DataSet saloutbillDataSet = DB . queryDataSet ( this . getClass ( ) . getName ( ) , DBRoute . of ( " scm " ) , saloutbillsql ) ;
DataSet purorderbillDataSet = DB . queryDataSet ( this . getClass ( ) . getName ( ) , DBRoute . of ( " scm " ) , purorderbillsql ) ;
saloutbillDataSet = saloutbillDataSet . leftJoin ( materialinventoryinfoDataSet ) . on ( " materialinventoryid " , " materialinventoryid " ) . select ( " tqq9_sku " , " tqq9_org " , " permonthsales " , " last_2month_sum " , " tqq9_totalqty " , " tqq9_onorderinventory " ) . finish ( ) ;
realbalanceDataSet = realbalanceDataSet . leftJoin ( saloutbillDataSet ) . on ( " tqq9_sku " , " tqq9_sku " ) . select ( " tqq9_sku " , " tqq9_org " , " tqq9_totalinventory " , " permonthsales " , " last_2month_sum " , " tqq9_totalqty " , " tqq9_onorderinventory " , " case when permonthsales<>0 then tqq9_totalinventory/permonthsales else -1 end tqq9_saledates " ) . finish ( ) ;
realbalanceDataSet = realbalanceDataSet . leftJoin ( purorderbillDataSet ) . on ( " tqq9_sku " , " tqq9_sku " ) . select ( " " ) . select ( " tqq9_sku " , " tqq9_org " , " tqq9_totalqty " , " tqq9_totalinventory " , " tqq9_saledates " , " permonthsales*0.5 tqq9_safeinventory " , " tqq9_oninventory " , " " +
" case when tqq9_saledates>=0 and tqq9_saledates<0.5 then '急需备货' when tqq9_saledates>0.5 and tqq9_saledates<=2 then '需备货' when tqq9_saledates>2 and tqq9_saledates<=4.5 then '不需备货' when tqq9_saledates>4.5 then '滞销' else '无' end tqq9_remark " , " case when tqq9_saledates<=0.5 then last_2month_sum-tqq9_oninventory-tqq9_totalinventory else 0 end tqq9_suppleinventory " , " " +
" tqq9_onorderinventory " , " case when tqq9_totalinventory<>0 and tqq9_onorderinventory/tqq9_totalinventory>0.8 then '需注意' else '无' end tqq9_onorderemark " ) . finish ( ) ;
realbalanceDataSet = realbalanceDataSet . where ( " 1=1 " + ( ( ! tqq9_queryorg . isEmpty ( ) ) ? " and tqq9_org in( " + orgBuilder . substring ( 1 ) + " ) " : " " ) + ( ( ! tqq9_querysku . isEmpty ( ) ) ? " and tqq9_sku in( " + skuBuilder . substring ( 1 ) + " ) " : " " ) ) ;
DataSet copy1 = realbalanceDataSet . copy ( ) ;
DynamicObjectCollection dynamicObjects = ORM . create ( ) . toPlainDynamicObjectCollection ( copy1 ) ;
Iterator < DynamicObject > iterator = dynamicObjects . iterator ( ) ;
while ( iterator . hasNext ( ) ) {
DynamicObject next = iterator . next ( ) ;
DynamicObject entry = new DynamicObject ( entryentity . getDynamicObjectType ( ) ) ;
DynamicObject tqq9_sku = materialMap . get ( next . getLong ( " tqq9_sku " ) ) ;
entry . set ( " tqq9_sku " , tqq9_sku ) ; //sku(物料)
entry . set ( " tqq9_skuname " , tqq9_sku . getString ( " name " ) ) ; //名称
entry . set ( " tqq9_skubrand " , tqq9_sku . getDynamicObject ( " tqq9_brand " ) ) ; //品牌
entry . set ( " tqq9_unit " , tqq9_sku . getDynamicObject ( " baseunit " ) ) ; //基本单位
entry . set ( " tqq9_org " , adminorgMap . get ( next . getLong ( " tqq9_org " ) ) ) ; //业务归属(组织)
entry . set ( " tqq9_totalqty " , next . get ( " tqq9_totalqty " ) ) ; //合计销量
entry . set ( " tqq9_totalinventory " , next . get ( " tqq9_totalinventory " ) ) ; //总仓库存
entry . set ( " tqq9_saledates " , next . get ( " tqq9_saledates " ) ) ; //预计销售时间
entry . set ( " tqq9_safeinventory " , next . get ( " tqq9_safeinventory " ) ) ; //安全库存
entry . set ( " tqq9_oninventory " , next . get ( " tqq9_oninventory " ) ) ; //在途库存
entry . set ( " tqq9_remark " , next . get ( " tqq9_remark " ) ) ; //备注
entry . set ( " tqq9_suppleinventory " , next . get ( " tqq9_suppleinventory " ) ) ; //待补库存
entry . set ( " tqq9_onorderinventory " , next . get ( " tqq9_onorderinventory " ) ) ; //占单库存
entry . set ( " tqq9_onorderemark " , next . get ( " tqq9_onorderemark " ) ) ; //占单库存备注
entryentity . add ( entry ) ;
}
dataEntity . set ( " tqq9_pursuggestrptentry " , entryentity ) ;
this . getView ( ) . updateView ( ) ;
} else if ( StringUtils . equals ( " tqq9_purapply " , itemKey ) ) {
EntryGrid entry = this . getControl ( " tqq9_pursuggestrptentry " ) ;
int [ ] selectRows = entry . getSelectRows ( ) ;
DynamicObjectCollection tqq9_pursuggestrptentry = dataEntity . getDynamicObjectCollection ( " tqq9_pursuggestrptentry " ) ;
DynamicObject purapplybill = BusinessDataServiceHelper . newDynamicObject ( " pm_purapplybill " ) ;
DynamicObjectCollection dynamicObjectCollection = purapplybill . getDynamicObjectCollection ( " billentry " ) ;
long currentUserId = UserServiceHelper . getCurrentUserId ( ) ;
DynamicObject user = BusinessDataServiceHelper . loadSingle ( " bos_user " , new QFilter [ ] { new QFilter ( " id " , QCP . equals , currentUserId ) } ) ;
DynamicObjectCollection entryentity = user . getDynamicObjectCollection ( " entryentity " ) ;
DynamicObject dept = null ;
for ( DynamicObject dynamicObject : entryentity ) {
boolean ispartjob = dynamicObject . getBoolean ( " ispartjob " ) ;
if ( ! ispartjob ) {
dept = dynamicObject . getDynamicObject ( " dpt " ) ;
}
} DynamicObject org = BusinessDataServiceHelper . loadSingle ( " bos_org " , new QFilter [ ] { new QFilter ( " name " , QCP . equals , " 励齿集团 " ) } ) ;
CodeRuleInfo vouCodeRule = CodeRuleServiceHelper . getCodeRule ( " pm_purapplybill " ,
purapplybill , org . getString ( " id " ) ) ;
String billno = CodeRuleServiceHelper . getNumber ( vouCodeRule , purapplybill ) ; //采购申请单编号
DynamicObject currency = BusinessDataServiceHelper . loadSingle ( " bd_currency " ,
new QFilter [ ] { new QFilter ( " number " , QCP . equals , " CNY " ) } ) ; //币别
DynamicObject taxrate = BusinessDataServiceHelper . loadSingle ( " bd_taxrate " ,
new QFilter [ ] { new QFilter ( " number " , QCP . equals , " V13 " ) } ) ; //税率
Date date = new Date ( ) ;
for ( int i = 0 ; i < selectRows . length ; i + + ) {
DynamicObject dynamicObject = tqq9_pursuggestrptentry . get ( selectRows [ i ] ) ;
DynamicObject tqq9_org = dynamicObject . getDynamicObject ( " tqq9_org " ) ;
DynamicObject tqq9_sku = dynamicObject . getDynamicObject ( " tqq9_sku " ) ;
DynamicObject materialpurchaseinfo = BusinessDataServiceHelper . loadSingle ( " bd_materialpurchaseinfo " ,
new QFilter [ ] { new QFilter ( " masterid " , QCP . equals , tqq9_sku . getLong ( " id " ) ) } ) ; //物料采购信息
BigDecimal tqq9_saledates = dynamicObject . getBigDecimal ( " tqq9_saledates " ) ;
if ( i = = 0 ) {
purapplybill . set ( " org " , org ) ; //申请组织
purapplybill . set ( " dept " , dept ) ; //申请部门
purapplybill . set ( " bizuser " , user ) ; //申请人
purapplybill . set ( " currency " , currency ) ; //币别
purapplybill . set ( " creator " , user ) ; //创建人
purapplybill . set ( " lastupdateuser " , user ) ; //修改人
purapplybill . set ( " lastupdatetime " , date ) ; //修改时间
purapplybill . set ( " billno " , billno ) ; //采购申请单编号
purapplybill . set ( " billtype " , BILLTYPE ) ; //单据类型
purapplybill . set ( " biztype " , BIZTYPE ) ; //业务类型
purapplybill . set ( " biztime " , date ) ; //申请日期
purapplybill . set ( " billstatus " , " A " ) ; //单据状态
purapplybill . set ( " closestatus " , " A " ) ; //关闭状态
purapplybill . set ( " cancelstatus " , " A " ) ; //作废状态
purapplybill . set ( " changestatus " , " A " ) ; //作废状态
purapplybill . set ( " subversion " , " 1 " ) ; //子版本号
purapplybill . set ( " version " , " 1 " ) ; //版本号
purapplybill . set ( " tqq9_sfsyhf " , " false " ) ; //是否使用货返
purapplybill . set ( " tqq9_hshfsysl " , taxrate ) ; //含税货返使用税率
purapplybill . set ( " tqq9_sfsyxf " , " false " ) ; //是否使用现返
purapplybill . set ( " tqq9_hsxfsysl " , taxrate ) ; //含税现返使用税率
}
DynamicObject dynamicObject1 = dynamicObjectCollection . addNew ( ) ;
dynamicObject1 . set ( " seq " , i + 1 ) ; //分录号
dynamicObject1 . set ( " material " , materialpurchaseinfo ) ; //物料
dynamicObject1 . set ( " materialname " , tqq9_sku . getString ( " name " ) ) ; //物料名称
2025-08-12 05:18:29 +00:00
dynamicObject1 . set ( " unit " , tqq9_sku . getDynamicObject ( " baseunit " ) ) ; //计量单位
2025-08-12 03:42:59 +00:00
dynamicObject1 . set ( " baseunit " , tqq9_sku . getDynamicObject ( " baseunit " ) ) ; //基本单位
dynamicObject1 . set ( " rowclosestatus " , " A " ) ; //行关闭状态
dynamicObject1 . set ( " rowterminatestatus " , " A " ) ; //行终止状态
dynamicObject1 . set ( " entryrecorg " , tqq9_org ) ; //收货组织
dynamicObject1 . set ( " entryreqorg " , tqq9_org ) ; //需求组织
dynamicObject1 . set ( " entryreqdept " , dept ) ; //需求部门
dynamicObject1 . set ( " reqdate " , date ) ; //需求日期
dynamicObject1 . set ( " purdate " , date ) ; //建议采购日期
dynamicObject1 . set ( " deliverdate " , date ) ; //交货日期
dynamicObject1 . set ( " bomtime " , date ) ; //展BOM时间
dynamicObject1 . set ( " entrychangetype " , " B " ) ; //变更方式
dynamicObject1 . set ( " linetype " , LINETYPE ) ; //行类型
dynamicObject1 . set ( " linetype " , LINETYPE ) ; //行类型
dynamicObject1 . set ( " entrycreator " , user ) ; //创建人
dynamicObject1 . set ( " entryrecdept " , tqq9_org ) ; //收货部门
dynamicObject1 . set ( " entrypurdept " , tqq9_org ) ; //采购部门
dynamicObject1 . set ( " entryoperatorgroup " , tqq9_org ) ; //采购组
dynamicObject1 . set ( " tqq9_expectsaletime " , tqq9_saledates ) ; //预计销售时间(月)
dynamicObjectCollection . set ( i , dynamicObject1 ) ;
}
purapplybill . set ( " billentry " , dynamicObjectCollection ) ;
SaveServiceHelper . save ( new DynamicObject [ ] { purapplybill } ) ;
BillShowParameter billShowParameter = new BillShowParameter ( ) ;
billShowParameter . getOpenStyle ( ) . setShowType ( ShowType . Modal ) ;
billShowParameter . setFormId ( " pm_purapplybill " ) ;
DynamicObject dynamicObject = BusinessDataServiceHelper . loadSingle ( purapplybill . getLong ( " id " ) , " pm_purapplybill " ) ;
billShowParameter . setPkId ( dynamicObject . get ( " id " ) ) ;
this . getView ( ) . showForm ( billShowParameter ) ;
// this.getView().showMessage("采购申请单:"+purapplybill.getString("billno")+",下推成功");
}
}
}