lc/lc123/cloud/app/plugin/form/pm/PurSuggestRptFromPlugin.java

291 lines
19 KiB
Java

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.ShowType;
import kd.bos.form.control.EntryGrid;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.plugin.AbstractFormPlugin;
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 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();
}
//业务归属查询
QFilter qFilter = new QFilter("number", QCP.in, new String[]{"Org-00001", "Org-00002", "Org-00003", "Org-00004"});
DynamicObject[] load = BusinessDataServiceHelper.load("bos_org", "id,number", qFilter.toArray());
String sh = "0";
String bj = "0";
String gz = "0";
String cd = "0";
for (int i = 0; load != null && i < load.length; i++) {
DynamicObject dynamicObject = load[i];
String number = dynamicObject.getString("number");
switch (number) {
case "Org-00001":
sh = dynamicObject.getString("id");
break;
case "Org-00002":
bj = dynamicObject.getString("id");
break;
case "Org-00003":
gz = dynamicObject.getString("id");
break;
case "Org-00004":
cd = dynamicObject.getString("id");
break;
}
}
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 goodspackagesql = "/*dialect*/select t1.fid id,t1.fk_tqq9_isauto tqq9_isauto,t1.fk_tqq9_mater tqq9_sku,t1.fcreateorgid tqq9_org,\n" +
"t1.fk_tqq9_purchaser tqq9_purchaser,t1.fk_tqq9_onsale tqq9_onsale ,t1.fk_tqq9_totalupstock tqq9_totalupstock \n" +
"from tk_tqq9_goodspackage t1";
//即时库存表
String realbalancesql = "/*dialect*/select '1' tqq9_isauto,t1.fmaterialid tqq9_sku,t1.forgid tqq9_org,sum(t1.fqty) tqq9_totalinventory \n" +
"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 goodspackagDataSet = DB.queryDataSet(this.getClass().getName(), DBRoute.of("scm"), goodspackagesql);
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"));//物料名称
dynamicObject1.set("unit", tqq9_sku.getDynamicObject("baseunit"));//计量单位
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")+",下推成功");
}
}
}