ensign/src/main/java/com/yem/rf/salescommission/DepartureDailyReportPlugin.java
2025-02-19 21:02:48 +08:00

896 lines
37 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.yem.rf.salescommission;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.yem.ensign.common.DateUtils;
import com.yem.wm.utils.RequestCmmp;
import com.yem.wm.utils.RptUtil;
import com.yem.wm.utils.YEM;
import kd.bos.algo.DataSet;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.report.AbstractReportListDataPlugin;
import kd.bos.entity.report.FilterInfo;
import kd.bos.entity.report.ReportQueryParam;
import kd.bos.orm.ORM;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import org.apache.commons.compress.utils.Lists;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.*;
import static com.yem.rf.salescommission.CompleteShipDetailReportPlugin.*;
import static com.yem.rf.salescommission.SalesCommissionReportPlugin.queryGathering_ClaimedAmt_Total;
import static com.yem.rf.utils.RFUtils.getBaseQFilter;
import static com.yem.wm.utils.CalendarUtils.*;
/**
* @Description: 发车日报
* @Date: 2024/7/19 15:53
* @Created: by ZZSLL
*/
public class DepartureDailyReportPlugin extends AbstractReportListDataPlugin {
private static final String algoKey = DepartureDailyReportPlugin.class.getName();
@Override
public DataSet query(ReportQueryParam param, Object o) throws Throwable {
FilterInfo filter = param.getFilter();
Date fdate = filter.getDate("yem_fdate");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
DataSet dataSet;
DataSet productype = queryProductType(param);//产品机型
DataSet notreceivedqty = queryNotReceivedQty(param);//查询未收款数量
DataSet receivedqty = queryReceivedRty(param);//查询已收定金数量
DataSet contactbook_today = queryTodayContactBook(param);
DataSet contactbook_mouth = queryMouthContactBook(param);
DataSet contactbook_year = queryYearContactBook(param);
DataSet yearlybudget_mouth = queryYearlyBudgetMouth(param);
DataSet yearlybudget_year = queryYearlyBudgetYear(param);
DataSet yearlybudget_year_total = queryYearlyBudgetYearTotal(param);
dataSet = productype.addField("'" + sdf.format(fdate) + "'", "yem_date");
dataSet = dataSet.leftJoin(notreceivedqty)
.on("id", "order_product_id_main_fk")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(notreceivedqty))
.finish();
dataSet = dataSet.leftJoin(receivedqty)
.on("id", "received_order_product_id_main_fk")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(receivedqty))
.finish();
dataSet = dataSet.leftJoin(contactbook_today)
.on("id", "contactbook_product_id_main_fk_t")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(contactbook_today))
.finish();
dataSet = dataSet.leftJoin(contactbook_mouth)
.on("id", "contactbook_product_id_main_fk_m")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(contactbook_mouth))
.finish();
dataSet = dataSet.leftJoin(contactbook_year)
.on("id", "contactbook_product_id_main_fk_y")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(contactbook_year))
.finish();
dataSet = dataSet.leftJoin(yearlybudget_mouth)
.on("id", "budget_product_id_main_fk")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(yearlybudget_mouth))
.finish();
dataSet = dataSet.leftJoin(yearlybudget_year)
.on("id", "budget_product_id_main_fk_year")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(yearlybudget_year))
.finish();
dataSet = dataSet.leftJoin(yearlybudget_year_total)
.on("id", "budget_product_id_main_fk_year_total")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(yearlybudget_year_total))
.finish();
dataSet = dataSet.addField("0.0", "yem_productid");
dataSet = dataSet.addField("0.0", "yem_inventory");
dataSet = dataSet.select(RptUtil.getDataSetFiledAlias(dataSet));
StringBuilder sb = new StringBuilder();
Set<String> set = Sets.newHashSet();
String ftype = filter.getString("yem_ftype");
String[] splits = ftype.split(",");
for (String split : splits) {
if (YEM.isNotEmpty(split)) set.add(split);
}
for (String item : set) {
sb.append(" OR yem_proctype LIKE '%").append(item).append("%'");
}
if (set.contains("ZZJ")) {
sb.append(" OR yem_proctype IN ('WJZZJ', 'WJJ') ");
}
final String prefix = " OR ";
if (sb.length() >= prefix.length() && sb.substring(0, prefix.length()).equals(prefix)) {
sb.delete(0, prefix.length());
sb.insert(0, "(");
sb.insert(sb.length(), ")");
}
DynamicObjectCollection fproctype = filter.getDynamicObjectCollection("yem_fproctype");
if (YEM.isNotEmpty(fproctype) && !fproctype.isEmpty()) {
sb.append(" AND yem_proctype IN (");
for (DynamicObject dynamicObject : fproctype) {
String number = dynamicObject.getString("number");
sb.append("'").append(number).append("',");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(")");
}
dataSet = dataSet.where(sb.toString());
dataSet = dataSet.select(RptUtil.getDataSetFiledAlias(dataSet));
dataSet = dataSet.addField("0.0", "yem_budget_y_total");
if (YEM.isEmpty(fproctype) || fproctype.isEmpty()) {
dataSet = addSumLine(dataSet);
}
dataSet = fillWithCMMPQty(dataSet);
dataSet = addTotalSumLine(dataSet);
return dataSet;
}
/**
* 业务分类为整机的产品类型2级分组没有2级取1级
*
* @param param
* @return
*/
private DataSet queryProductType(ReportQueryParam param) {
ArrayList<String> list = Lists.newArrayList();
list.add("id");
list.add("number");
list.add("fullname");
list.add("parent");
list.add("enable");
list.add("yem_businesssort");
String selectfields = String.join(",", list);
QFilter qFilter = new QFilter("enable", "=", "1");
qFilter.and("yem_businesssort", "=", "Z");
qFilter.and("parent.id", "=", 0);
DataSet metaDataSet = ORM.create().queryDataSet(algoKey, "yem_bd_productsgroup", selectfields, qFilter.toArray());
DynamicObjectCollection levelOneCollection = QueryServiceHelper.query("yem_bd_productsgroup", selectfields, qFilter.toArray());
DynamicObjectCollection resCollection = new DynamicObjectCollection();
for (DynamicObject dynamicObject : levelOneCollection) {
long id = dynamicObject.getLong("id");
QFilter twoQf = new QFilter("enable", "=", "1");
twoQf.and("yem_businesssort", "=", "Z");
twoQf.and("parent.id", "=", id);
DynamicObjectCollection levelTwo = QueryServiceHelper.query("yem_bd_productsgroup", selectfields, twoQf.toArray());
if (!levelTwo.isEmpty()) {
resCollection.addAll(levelTwo);
} else {
resCollection.add(dynamicObject);
}
}
//更新产品机型名称
for (DynamicObject dynamicObject : resCollection) {
String fullname = dynamicObject.getString("fullname");
if (YEM.isNotEmpty(fullname)) {
if (fullname.contains(".")) {
fullname = fullname.substring(0, fullname.indexOf("."));
}
}
dynamicObject.set("fullname", fullname);
}
DataSet dataSet = RptUtil.plainDataSet(algoKey, metaDataSet, resCollection);
dataSet = dataSet.select(String.join(",", RptUtil.getDataSetFiledAlias(dataSet)) + ",number yem_proctype, fullname yem_product").orderBy(new String[]{"yem_proctype DESC"});
return dataSet;
}
/**
* 查询已提交下单审批
*
* @param param
* @return
*/
private DataSet queryPlaceExamine(ReportQueryParam param) {
QFilter qFilter = getBaseQFilter(new String[]{"B", "C"});
List<String> selectfields = new ArrayList<>();
selectfields.add("yem_sourcebillid source_order_id_placeexamine_fk");
return ORM.create().queryDataSet(algoKey, "yem_placeexamine", String.join(",", selectfields), qFilter.toArray());
}
/**
* 合同已下单(下单审批提交或者审核),但是合同款项未认领
*
* @param param
* @return
*/
private DataSet queryNotReceivedQty(ReportQueryParam param) {
DataSet claimedAmt = queryGathering_ClaimedAmt_Total();
DataSet dataSet;
DataSet placeexamine = queryPlaceExamine(param);//BC下单审批
DataSet salesorder = querySalesOrder(param);
DataSet trackTaskConsole = queryTrackTaskConsole(param);
dataSet = placeexamine.leftJoin(salesorder)
.on("source_order_id_placeexamine_fk", "order_id")
.select(RptUtil.getDataSetFiledAlias(placeexamine), RptUtil.getDataSetFiledAlias(salesorder))
.finish();
dataSet = dataSet.leftJoin(claimedAmt)
.on("order_id", "main_id_g_claimed_amt_fk")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(claimedAmt))
.finish();
dataSet = RptUtil.zeroNullNums(dataSet);
dataSet = dataSet.where("yem_salcontractclaamt = NULL OR yem_salcontractclaamt = 0.0 ");
dataSet = dataSet
.groupBy(new String[]{"order_product_id_main_fk"})
.sum("yem_qty")
.finish();
dataSet = dataSet.leftJoin(trackTaskConsole)
.on("order_product_id_main_fk", "tkconsole_product_id_main_fk")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(trackTaskConsole))
.finish();
dataSet = RptUtil.zeroNullNums(dataSet);
dataSet = dataSet.select("order_product_id_main_fk, yem_qty - yem_cancel_num yem_nooay");
return dataSet;
}
/**
* 查询跟单任务控制台,取消数量
* @param param
* @return
*/
private DataSet queryTrackTaskConsole(ReportQueryParam param) {
QFilter qFilter = getBaseQFilter();
List<String> selectfields = new ArrayList<>();
selectfields.add("id tkconsole_id");
selectfields.add("billno tkconsole_no");
selectfields.add("yem_es_materialinfo.yem_resourcenog.yem_products.group.id tkconsole_product_id_main_fk");
selectfields.add("yem_es_materialinfo.yem_cancel_num yem_cancel_num");
DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_tracktaskconsole", String.join(",", selectfields), qFilter.toArray());
dataSet = dataSet
.groupBy(new String[]{"tkconsole_product_id_main_fk"})
.sum("yem_cancel_num")
.finish();
return dataSet;
}
/**
* 合同已下单(下单审批提交或者审核),且合同的预收款全部认领完成的数量
*
* @param param
* @return
*/
private DataSet queryReceivedRty(ReportQueryParam param) {
DataSet dataSet;
DataSet placeexamine = queryPlaceExamine(param);//BC下单审批
DataSet salesorder = querySalesOrder(param);
dataSet = placeexamine.leftJoin(salesorder)
.on("source_order_id_placeexamine_fk", "order_id")
.select(RptUtil.getDataSetFiledAlias(placeexamine), RptUtil.getDataSetFiledAlias(salesorder))
.finish();
dataSet = dataSet.select("order_id received_order_id, order_product_id_main_fk received_order_product_id_main_fk, yem_qty");
ArrayList<Long> salesorderIds = new ArrayList<>();
DynamicObjectCollection collection = ORM.create().toPlainDynamicObjectCollection(salesorder.copy());
for (DynamicObject dynamicObject : collection) {
salesorderIds.add(dynamicObject.getLong("order_id"));
}
DataSet payRate = querySalesOrder_PayRate(salesorderIds);
DataSet claimDate = queryGathering_ClaimDate(salesorderIds, payRate);
dataSet = dataSet.leftJoin(claimDate)
.on("received_order_id", "main_id_gathering_fk")
.select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(claimDate))
.finish();
dataSet = dataSet.where("yem_prodpaydate != NULL AND yem_prodpaydate != '' AND yem_shippaydate != NULL AND yem_shippaydate != ''");
dataSet = dataSet
.groupBy(new String[]{"received_order_product_id_main_fk"})
.sum("yem_qty")
.finish();
dataSet = dataSet.select("received_order_product_id_main_fk, yem_qty yem_payed");
return dataSet;
}
private DataSet querySalesOrder(ReportQueryParam param) {
QFilter qFilter = getBaseQFilter();
qFilter.and("yem_es_materialinfo.yem_businesssort", "=", "Z");
List<String> selectfields = new ArrayList<>();
selectfields.add("id order_id");
selectfields.add("billno salesorder_no");
selectfields.add("yem_es_materialinfo.yem_resourcenog.yem_products.group.id order_product_id_main_fk");
selectfields.add("yem_es_materialinfo.yem_qty yem_qty");
return ORM.create().queryDataSet(algoKey, "yem_es_salesorder", String.join(",", selectfields), qFilter.toArray());
}
/**
* 查询 本日发车量 发货联系书
*
* @param param
* @return
*/
private DataSet queryTodayContactBook(ReportQueryParam param) {
FilterInfo filter = param.getFilter();
Date fdate = filter.getDate("yem_fdate");
QFilter qFilter = getBaseQFilter(new String[]{"B", "C"});
qFilter.and("yem_es_materialinfo.yem_businesssort", "=", "Z");
Date start = DateUtils.getBeginTime(fdate);
Date end = DateUtils.getEndTime(fdate);
qFilter.and("yem_vehicleeleatime", ">=", start);
qFilter.and("yem_vehicleeleatime", "<=", end);
List<String> selectfields = new ArrayList<>();
selectfields.add("yem_es_materialinfo.yem_resourcenog.yem_products.group.id contactbook_product_id_main_fk_t");
selectfields.add("yem_es_materialinfo.yem_qty yem_qty");
DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_es_contactbook", String.join(",", selectfields), qFilter.toArray());
dataSet = dataSet.select("contactbook_product_id_main_fk_t, yem_qty");
dataSet = dataSet
.groupBy(new String[]{"contactbook_product_id_main_fk_t"})
.sum("yem_qty")
.finish();
dataSet = dataSet.select("contactbook_product_id_main_fk_t, yem_qty yem_today_ship");
return dataSet;
}
/**
* 查询 本月发车量 发货联系书
*
* @param param
* @return
*/
private DataSet queryMouthContactBook(ReportQueryParam param) {
FilterInfo filter = param.getFilter();
Date fdate = filter.getDate("yem_fdate");
QFilter qFilter = getBaseQFilter(new String[]{"B", "C"});
qFilter.and("yem_es_materialinfo.yem_businesssort", "=", "Z");
Date firstDayOfMonth = getFirstDayOfMonth(fdate);
Date lastDayOfMonth = getLastDayOfMonth(fdate);
qFilter.and("yem_vehicleeleatime", ">=", firstDayOfMonth);
qFilter.and("yem_vehicleeleatime", "<=", lastDayOfMonth);
List<String> selectfields = new ArrayList<>();
selectfields.add("yem_es_materialinfo.yem_resourcenog.yem_products.group.id contactbook_product_id_main_fk_m");
selectfields.add("yem_es_materialinfo.yem_qty yem_qty");
DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_es_contactbook", String.join(",", selectfields), qFilter.toArray());
dataSet = dataSet.select("contactbook_product_id_main_fk_m, yem_qty");
dataSet = dataSet
.groupBy(new String[]{"contactbook_product_id_main_fk_m"})
.sum("yem_qty")
.finish();
dataSet = dataSet.select("contactbook_product_id_main_fk_m, yem_qty yem_mouth_ship");
return dataSet;
}
/**
* 查询 本年发车量 发货联系书
*
* @param param
* @return
*/
private DataSet queryYearContactBook(ReportQueryParam param) {
FilterInfo filter = param.getFilter();
Date fdate = filter.getDate("yem_fdate");
QFilter qFilter = getBaseQFilter(new String[]{"B", "C"});
qFilter.and("yem_es_materialinfo.yem_businesssort", "=", "Z");
Date firstDayOfYear = getFirstDayOfYear(fdate);
Date lastDayOfYear = getLastDayOfYear(fdate);
qFilter.and("yem_vehicleeleatime", ">=", firstDayOfYear);
qFilter.and("yem_vehicleeleatime", "<=", lastDayOfYear);
List<String> selectfields = new ArrayList<>();
selectfields.add("yem_es_materialinfo.yem_resourcenog.yem_products.group.id contactbook_product_id_main_fk_y");
selectfields.add("yem_es_materialinfo.yem_qty yem_qty");
selectfields.add("billno");
DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_es_contactbook", String.join(",", selectfields), qFilter.toArray());
dataSet = dataSet.select("contactbook_product_id_main_fk_y, yem_qty");
dataSet = dataSet
.groupBy(new String[]{"contactbook_product_id_main_fk_y"})
.sum("yem_qty")
.finish();
dataSet = dataSet.select("contactbook_product_id_main_fk_y, yem_qty yem_year_ship");
return dataSet;
}
/**
* 查询年度预算单(月份)
*
* @param param
* @return
*/
private DataSet queryYearlyBudgetMouth(ReportQueryParam param) {
FilterInfo filter = param.getFilter();
Date fdate = filter.getDate("yem_fdate");
String monthName = getMonthName(fdate);
QFilter qFilter = getBaseQFilter();
List<String> selectfields = new ArrayList<>();
selectfields.add("yem_im_detailedinfor.yem_productmodel.group.id budget_product_id_main_fk");//产品类型ID
selectfields.add(String.format("yem_im_detailedinfor.yem_im_monthlyplan.yem_%s yem_qty", monthName.toLowerCase()));
DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_im_yearlybudget", String.join(",", selectfields), qFilter.toArray());
dataSet = dataSet
.groupBy(new String[]{"budget_product_id_main_fk"})
.sum("yem_qty")
.finish();
dataSet = dataSet.select("budget_product_id_main_fk, yem_qty yem_budget_mouth");
return dataSet;
}
/**
* 查询年度预算单
*
* @param param
* @return
*/
private DataSet queryYearlyBudgetYear(ReportQueryParam param) {
FilterInfo filter = param.getFilter();
Date fdate = filter.getDate("yem_fdate");
Set<String> set = getMonthsFromStartOfYearToDate(fdate);
QFilter qFilter = getBaseQFilter();
List<String> selectfields = new ArrayList<>();
Set<String> allMouth = Sets.newHashSet("yem_january", "yem_february", "yem_march", "yem_april", "yem_may", "yem_june", "yem_july", "yem_august", "yem_september", "yem_october", "yem_november", "yem_december");
Set<String> subSet = new HashSet<>(allMouth);
selectfields.add("yem_im_detailedinfor.yem_productmodel.group.id budget_product_id_main_fk_year");//产品类型ID
for (String mouth : set) {
selectfields.add(String.format("yem_im_detailedinfor.yem_im_monthlyplan.yem_%s yem_%s", mouth, mouth));
subSet.remove("yem_" + mouth);
}
DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_im_yearlybudget", String.join(",", selectfields), qFilter.toArray());
for (String mouth : subSet) {
dataSet = dataSet.addField("0.0", mouth);
}
dataSet = dataSet.select("budget_product_id_main_fk_year, " + String.join(",", allMouth));
dataSet = dataSet
.groupBy(new String[]{"budget_product_id_main_fk_year"})
.sum("yem_january")
.sum("yem_february")
.sum("yem_march")
.sum("yem_april")
.sum("yem_may")
.sum("yem_june")
.sum("yem_july")
.sum("yem_august")
.sum("yem_september")
.sum("yem_october")
.sum("yem_november")
.sum("yem_december")
.finish();
dataSet = dataSet.select("budget_product_id_main_fk_year, " + String.join(",", allMouth));
DynamicObjectCollection collection = ORM.create().toPlainDynamicObjectCollection(dataSet);
for (DynamicObject obj : collection) {
BigDecimal january = obj.getBigDecimal("yem_january");
BigDecimal february = obj.getBigDecimal("yem_february");
BigDecimal march = obj.getBigDecimal("yem_march");
BigDecimal april = obj.getBigDecimal("yem_april");
BigDecimal may = obj.getBigDecimal("yem_may");
BigDecimal june = obj.getBigDecimal("yem_june");
BigDecimal july = obj.getBigDecimal("yem_july");
BigDecimal august = obj.getBigDecimal("yem_august");
BigDecimal september = obj.getBigDecimal("yem_september");
BigDecimal october = obj.getBigDecimal("yem_october");
BigDecimal november = obj.getBigDecimal("yem_november");
BigDecimal december = obj.getBigDecimal("yem_december");
january = january.add(february).add(march).add(april).add(may).add(june).add(july).add(august).add(september).add(october).add(november).add(december);
obj.set("yem_january", january);
}
return RptUtil.plainDataSet(algoKey, dataSet, collection).select("budget_product_id_main_fk_year, yem_january yem_budget_year");
}
private DataSet queryYearlyBudgetYearTotal(ReportQueryParam param) {
FilterInfo filter = param.getFilter();
Date fdate = filter.getDate("yem_fdate");
Calendar calendar = Calendar.getInstance();
calendar.setTime(fdate);
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date startOfYear = calendar.getTime();
calendar.add(Calendar.YEAR, 1);
calendar.add(Calendar.SECOND, -1);
Date endOfYear = calendar.getTime();
QFilter qFilter = getBaseQFilter();
qFilter.and("yem_bizdate", ">=", startOfYear);
qFilter.and("yem_bizdate", "<=", endOfYear);
Set<String> allMouth = Sets.newHashSet("yem_january", "yem_february", "yem_march", "yem_april", "yem_may", "yem_june", "yem_july", "yem_august", "yem_september", "yem_october", "yem_november", "yem_december");
List<String> selectfields = new ArrayList<>();
selectfields.add("yem_im_detailedinfor.yem_productmodel.group.id budget_product_id_main_fk_year_total");//产品类型ID
for (String mouth : allMouth) {
selectfields.add(String.format("yem_im_detailedinfor.yem_im_monthlyplan.%s %s", mouth, mouth));
}
DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_im_yearlybudget", String.join(",", selectfields), qFilter.toArray());
dataSet = dataSet.select("budget_product_id_main_fk_year_total, " + String.join(",", allMouth));
dataSet = dataSet
.groupBy(new String[]{"budget_product_id_main_fk_year_total"})
.sum("yem_january")
.sum("yem_february")
.sum("yem_march")
.sum("yem_april")
.sum("yem_may")
.sum("yem_june")
.sum("yem_july")
.sum("yem_august")
.sum("yem_september")
.sum("yem_october")
.sum("yem_november")
.sum("yem_december")
.finish();
dataSet = dataSet.select("budget_product_id_main_fk_year_total, " + String.join(",", allMouth));
DynamicObjectCollection collection = ORM.create().toPlainDynamicObjectCollection(dataSet);
for (DynamicObject obj : collection) {
BigDecimal january = obj.getBigDecimal("yem_january");
BigDecimal february = obj.getBigDecimal("yem_february");
BigDecimal march = obj.getBigDecimal("yem_march");
BigDecimal april = obj.getBigDecimal("yem_april");
BigDecimal may = obj.getBigDecimal("yem_may");
BigDecimal june = obj.getBigDecimal("yem_june");
BigDecimal july = obj.getBigDecimal("yem_july");
BigDecimal august = obj.getBigDecimal("yem_august");
BigDecimal september = obj.getBigDecimal("yem_september");
BigDecimal october = obj.getBigDecimal("yem_october");
BigDecimal november = obj.getBigDecimal("yem_november");
BigDecimal december = obj.getBigDecimal("yem_december");
january = january.add(february).add(march).add(april).add(may).add(june).add(july).add(august).add(september).add(october).add(november).add(december);
obj.set("yem_january", january);
}
DataSet select = RptUtil.plainDataSet(algoKey, dataSet, collection).select("budget_product_id_main_fk_year_total, yem_january yem_budget_y_total_temp");
return select;
}
/**
* CMMP的可用库存根据产品汇总
* <br/>
* <code>SELECT sum(canuse_num) FROM VIEW_MATER_STOCK_WM WHERE plan_pin IS NOT NULL<code/>
*
* @param dataSet
* @return
*/
private DataSet fillWithCMMPQty(DataSet dataSet) {
DynamicObjectCollection originCollection = ORM.create().toPlainDynamicObjectCollection(dataSet);
String sql = "SELECT sum(canuse_num) canuse_num FROM VIEW_MATER_STOCK_WM WHERE plan_pin IS NOT NULL";
HashSet<Long> set = Sets.newHashSet();
for (DynamicObject dynamicObject : originCollection) {
long id = dynamicObject.getLong("yem_productid");
if (id != 0) {
set.add(id);
}
}
for (Long productId : set) {
List<Map> cmmp = RequestCmmp.getFromCmmp(0L, sql, productId);
for (Map map : cmmp) {
if (YEM.isEmpty(map)) continue;
BigDecimal canuse_num = (BigDecimal) map.get("canuse_num");
for (DynamicObject dataSetObj : originCollection) {
long id = dataSetObj.getLong("yem_productid");
if (id > 0) {
if (id == productId) {
dataSetObj.set("yem_inventory", canuse_num);
}
}
}
}
}
return RptUtil.plainDataSet(algoKey, dataSet, originCollection);
}
/**
* 添加汇总行
*
* @param dataSet
* @return
*/
private DataSet addSumLine(DataSet dataSet) {
DynamicObjectCollection originCollection = ORM.create().toPlainDynamicObjectCollection(dataSet);
BigDecimal nppay = BigDecimal.ZERO;
BigDecimal payed = BigDecimal.ZERO;
BigDecimal day_ship = BigDecimal.ZERO;
BigDecimal mouth_ship = BigDecimal.ZERO;
BigDecimal year_ship = BigDecimal.ZERO;
BigDecimal budget_mouth = BigDecimal.ZERO;
BigDecimal budget_year = BigDecimal.ZERO;
BigDecimal budget_year_total = BigDecimal.ZERO;
HashMap<Integer, DynamicObject> map = Maps.newHashMap();
for (DynamicObject currentObject : originCollection) {
nppay = nppay.add(currentObject.getBigDecimal("yem_nooay"));
payed = payed.add(currentObject.getBigDecimal("yem_payed"));
day_ship = day_ship.add(currentObject.getBigDecimal("yem_today_ship"));
mouth_ship = mouth_ship.add(currentObject.getBigDecimal("yem_mouth_ship"));
year_ship = year_ship.add(currentObject.getBigDecimal("yem_year_ship"));
budget_mouth = budget_mouth.add(currentObject.getBigDecimal("yem_budget_mouth"));
budget_year = budget_year.add(currentObject.getBigDecimal("yem_budget_year"));
budget_year_total = budget_year_total.add(currentObject.getBigDecimal("yem_budget_y_total_temp"));
int index = originCollection.indexOf(currentObject);
if (index <= 0) continue;
DynamicObject preObject = originCollection.get(index - 1);
String pre_proctype = preObject.getString("yem_proctype");
String current_proctype = currentObject.getString("yem_proctype");
boolean isLastRow = index == originCollection.size() - 1;
if (current_proctype.contains("WJJ")) {//装载机汇总
DynamicObject createObject = new DynamicObject(currentObject.getDynamicObjectType());
createObject.set("yem_date", "");
createObject.set("yem_product", "");
createObject.set("yem_inventory", BigDecimal.ZERO);
createObject.set("yem_proctype", "合计");
createObject.set("yem_nooay", nppay);
createObject.set("yem_payed", payed);
createObject.set("yem_today_ship", day_ship);
createObject.set("yem_mouth_ship", mouth_ship);
createObject.set("yem_year_ship", year_ship);
createObject.set("yem_budget_mouth", budget_mouth);
createObject.set("yem_budget_year", budget_year);
createObject.set("yem_budget_y_total", budget_year_total);
DynamicObject zzj = BusinessDataServiceHelper.loadSingle("yem_bd_productsgroup", new QFilter[]{new QFilter("number", "=", "ZZJ")});
createObject.set("yem_productid", zzj.getLong("id"));
if (current_proctype.contains("WJJ")) {
map.put(index + 1, createObject);
}
// if ((pre_proctype.contains("ZZJ") || pre_proctype.contains("WJZZJ"))
// && !(current_proctype.contains("ZZJ") || current_proctype.contains("WJZZJ"))
// ) {
// map.put(index, createObject);
// }
nppay = BigDecimal.ZERO;
payed = BigDecimal.ZERO;
day_ship = BigDecimal.ZERO;
mouth_ship = BigDecimal.ZERO;
year_ship = BigDecimal.ZERO;
budget_mouth = BigDecimal.ZERO;
budget_year = BigDecimal.ZERO;
budget_year_total = BigDecimal.ZERO;
} else if ((current_proctype.contains("CC") && !pre_proctype.contains("CC"))
|| (isLastRow && current_proctype.contains("TLJ"))
) {//拖拉机汇总
DynamicObject createObject = new DynamicObject(currentObject.getDynamicObjectType());
createObject.set("yem_date", "");
createObject.set("yem_product", "");
createObject.set("yem_inventory", BigDecimal.ZERO);
createObject.set("yem_proctype", "合计");
createObject.set("yem_nooay", nppay);
createObject.set("yem_payed", payed);
createObject.set("yem_today_ship", day_ship);
createObject.set("yem_mouth_ship", mouth_ship);
createObject.set("yem_year_ship", year_ship);
createObject.set("yem_budget_mouth", budget_mouth);
createObject.set("yem_budget_year", budget_year);
createObject.set("yem_budget_y_total", budget_year_total);
DynamicObject tlj = BusinessDataServiceHelper.loadSingle("yem_bd_productsgroup", new QFilter[]{new QFilter("number", "=", "TLJ")});
createObject.set("yem_productid", tlj.getLong("id"));
if (current_proctype.contains("CC") && !pre_proctype.contains("CC")) {
map.put(index, createObject);
}
if (isLastRow && current_proctype.contains("TLJ")) {
map.put(index + 1, createObject);
}
nppay = BigDecimal.ZERO;
payed = BigDecimal.ZERO;
day_ship = BigDecimal.ZERO;
mouth_ship = BigDecimal.ZERO;
year_ship = BigDecimal.ZERO;
budget_mouth = BigDecimal.ZERO;
budget_year = BigDecimal.ZERO;
budget_year_total = BigDecimal.ZERO;
} else if (current_proctype.contains("CC") && isLastRow) {//叉车汇总
DynamicObject createObject = new DynamicObject(currentObject.getDynamicObjectType());
createObject.set("yem_date", "");
createObject.set("yem_product", "");
createObject.set("yem_inventory", BigDecimal.ZERO);
createObject.set("yem_proctype", "合计");
createObject.set("yem_nooay", nppay);
createObject.set("yem_payed", payed);
createObject.set("yem_today_ship", day_ship);
createObject.set("yem_mouth_ship", mouth_ship);
createObject.set("yem_year_ship", year_ship);
createObject.set("yem_budget_mouth", budget_mouth);
createObject.set("yem_budget_year", budget_year);
createObject.set("yem_budget_y_total", budget_year_total);
DynamicObject cc = BusinessDataServiceHelper.loadSingle("yem_bd_productsgroup", new QFilter[]{new QFilter("number", "=", "CC")});
createObject.set("yem_productid", cc.getLong("id"));
map.put(-1, createObject);
nppay = BigDecimal.ZERO;
payed = BigDecimal.ZERO;
day_ship = BigDecimal.ZERO;
mouth_ship = BigDecimal.ZERO;
year_ship = BigDecimal.ZERO;
budget_mouth = BigDecimal.ZERO;
budget_year = BigDecimal.ZERO;
budget_year_total = BigDecimal.ZERO;
}
}
for (Map.Entry<Integer, DynamicObject> mapEntry : map.entrySet()) {
Integer idx = mapEntry.getKey();
DynamicObject object = mapEntry.getValue();
if (idx != -1) {
originCollection.add(idx, object);
} else {
originCollection.add(originCollection.size(), object);
}
}
return RptUtil.plainDataSet(algoKey, dataSet, originCollection);
}
/**
* 添加总计行
* @param dataSet
* @return
*/
private DataSet addTotalSumLine(DataSet dataSet) {
DynamicObjectCollection originCollection = ORM.create().toPlainDynamicObjectCollection(dataSet);
BigDecimal nppay = BigDecimal.ZERO;
BigDecimal payed = BigDecimal.ZERO;
BigDecimal day_ship = BigDecimal.ZERO;
BigDecimal mouth_ship = BigDecimal.ZERO;
BigDecimal year_ship = BigDecimal.ZERO;
BigDecimal budget_mouth = BigDecimal.ZERO;
BigDecimal budget_year = BigDecimal.ZERO;
BigDecimal budget_year_total = BigDecimal.ZERO;
BigDecimal inventory = BigDecimal.ZERO;
for (DynamicObject currentObject : originCollection) {
long id = currentObject.getLong("yem_productid");
if (id == 0) {
nppay = nppay.add(currentObject.getBigDecimal("yem_nooay"));
payed = payed.add(currentObject.getBigDecimal("yem_payed"));
day_ship = day_ship.add(currentObject.getBigDecimal("yem_today_ship"));
mouth_ship = mouth_ship.add(currentObject.getBigDecimal("yem_mouth_ship"));
year_ship = year_ship.add(currentObject.getBigDecimal("yem_year_ship"));
budget_mouth = budget_mouth.add(currentObject.getBigDecimal("yem_budget_mouth"));
budget_year = budget_year.add(currentObject.getBigDecimal("yem_budget_year"));
inventory = inventory.add(currentObject.getBigDecimal("yem_inventory"));
} else {
budget_year_total = budget_year_total.add(currentObject.getBigDecimal("yem_budget_y_total"));
}
}
DynamicObject createObject = new DynamicObject(originCollection.getDynamicObjectType());
createObject.set("yem_date", "");
createObject.set("yem_product", "");
createObject.set("yem_proctype", "总计");
createObject.set("yem_nooay", nppay);
createObject.set("yem_payed", payed);
createObject.set("yem_today_ship", day_ship);
createObject.set("yem_mouth_ship", mouth_ship);
createObject.set("yem_year_ship", year_ship);
createObject.set("yem_budget_mouth", budget_mouth);
createObject.set("yem_budget_year", budget_year);
createObject.set("yem_budget_y_total", budget_year_total);
createObject.set("yem_inventory", inventory);
originCollection.add(originCollection.size(), createObject);
return RptUtil.plainDataSet(algoKey, dataSet, originCollection);
}
}