This commit is contained in:
zds
2022-12-06 20:32:46 +08:00
parent 531c2ba8cd
commit 5199a6ecc2
5 changed files with 229 additions and 97 deletions

View File

@@ -35,8 +35,8 @@ public enum MaterOptTypeEnum {
TJJ_AND_OTHER(24, "25", "添加剂和其他有色金属粉", "('1503644361697660928','1503644362838511616')", ""),
BJID(25, "26", "备品备件", "1503644361789935616", ""),
THW_AND_GF_AND_TJJ(26, "27", "碳化钨、钴粉、添加剂", "('1503644361664106496','1503644362192588800','1503644361697660928')", ""),
BCP_AND_YL_AND_FL(27, "28", "半成品、原辅料、合金制品", "('1503644359155912704','1503644353019645952','1503644353116114944','1503644349995552768')", "");
BCP_AND_YL_AND_FL(27, "28", "半成品、原辅料、合金制品", "('1503644359155912704','1503644353019645952','1503644353116114944','1503644349995552768')", ""),
YYJS(28, "29", "有色金属中除了焊条", "('1503644361664106496','1503644361697660928','1503644362192588800','1503644362234531840','1503644362788179968','1503644362838511616')", "");
//顺序号

View File

@@ -12,6 +12,7 @@ import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.exception.BadRequestException;
import org.nl.wms.basedata.master.constant.MaterOptTypeEnum;
import org.nl.wms.common.util.DataAuthUtil;
import org.nl.wms.statistics.service.StatisticalReportService;
import org.nl.wms.statistics.service.StifleQueryService;
@@ -133,9 +134,32 @@ public class StatisticalReportServiceImpl implements StatisticalReportService {
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料信息表
String begin_time = MapUtil.getStr(whereJson, "begin_time");
String end_time = MapUtil.getStr(whereJson, "end_time");
String org_id = MapUtil.getStr(whereJson, "org_id");
String begin_date = "";
String end_date = "";
if (StrUtil.isNotEmpty(begin_time)) {
begin_time = begin_time.substring(0,10)+" 00:00:00";
begin_date = begin_time.substring(0,10);
}
if (StrUtil.isNotEmpty(end_time)) {
end_time = end_time.substring(0,10)+" 23:59:59";
end_date = end_time.substring(0,10);
}
String org_ids = MapUtil.getStr(whereJson, "task_status");
String org_ids_new = "";
if (StrUtil.isNotEmpty(org_ids) && !"null".equals(org_ids)) {
String[] strs = org_ids.split(",");
for( int i=0;i<strs.length;i++){
if(i==0){
org_ids_new = "('" +strs[i];
}else{
org_ids_new =org_ids_new +"','"+strs[i];
}
}
org_ids_new =org_ids_new +"')";
}
Date date1 = DateUtil.parse(begin_time);
Date date2 = DateUtil.parse(end_time);
JSONArray rows = new JSONArray();
JSONArray mater_rows = WQL.getWO("statistical_report_query_01").addParam("flag", "3").process().getResultJSONArray(0);
JSONObject jo1 = new JSONObject();
@@ -165,6 +189,9 @@ public class StatisticalReportServiceImpl implements StatisticalReportService {
JSONObject jo8 = new JSONObject();
jo8.put("first", "采购缺口");
rows.add(jo8);
JSONObject jo9 = new JSONObject();
jo9.put("first", "历史开单");
rows.add(jo9);
//汇总所有配方明细物料
HashMap<String,Double> dtlJa_map = new HashMap<String,Double>();
@@ -173,11 +200,23 @@ public class StatisticalReportServiceImpl implements StatisticalReportService {
JSONObject form_qty = dtlJa.getJSONObject(i);
dtlJa_map.put(form_qty.getString("material_id"),form_qty.getDouble("qty"));
}
//汇总历史配方明细物料
HashMap<String,Double> dtlJa_map2 = new HashMap<String,Double>();
JSONArray dtlJa2 = WQL.getWO("statistical_report_query_02").addParam("flag", "4")
.addParam("begin_time", begin_time)
.addParam("end_time", end_time)
.process()
.getResultJSONArray(0);
for (int i = 0; i < dtlJa2.size(); i++) {
JSONObject form_qty = dtlJa2.getJSONObject(i);
dtlJa_map2.put(form_qty.getString("material_id"),form_qty.getDouble("qty"));
}
//库存物料数量
JSONArray materQryArray = WQL.getWO("statistical_report_query_01").addParam("flag", "4").process().getResultJSONArray(0);
Map<String, List<Object>> materialMap = materQryArray.stream().collect(Collectors.groupingBy(a -> ((JSONObject)a).getString("material_id")));
//排产需求
JSONArray needMaterArray = WQL.getWO("statistical_report_query_01").addParam("flag", "6").addParam("begin_time", begin_time).addParam("end_time", end_time).addParam("org_id", org_id).process().getResultJSONArray(0);
JSONArray needMaterArray = WQL.getWO("statistical_report_query_01").addParam("flag", "6").addParam("begin_date", begin_date).addParam("end_date", end_date).addParam("org_ids", org_ids_new).process().getResultJSONArray(0);
Map<String, List<Object>> needMaterMap = needMaterArray.stream().collect(Collectors.groupingBy(a -> ((JSONObject)a).getString("material_id")));
//3、待检入库量sum(此物料未确认的到货单的单据数-入库数)
@@ -186,8 +225,11 @@ public class StatisticalReportServiceImpl implements StatisticalReportService {
//查询物料计划日期内的需求量
JSONArray DataPlanQtyArray = WQL.getWO("statistical_report_query_01").addParam("flag", "10")
.addParam("begin_time", begin_time.substring(0, 10) + "%")
.addParam("end_time", end_time.substring(0, 10) + "%").process().getResultJSONArray(0);
.addParam("begin_time", begin_time)
.addParam("end_time", end_time)
.addParam("begin_date", begin_date)
.addParam("end_date", end_date)
.process().getResultJSONArray(0);
Map<String, List<Object>> datePlanMap = DataPlanQtyArray.stream().collect(Collectors.groupingBy(a -> ((JSONObject)a).getString("material_id")));
for (int i = 0; i < mater_rows.size(); i++) {
@@ -211,7 +253,6 @@ public class StatisticalReportServiceImpl implements StatisticalReportService {
//已开单重量
jo22.put(material_id, String.format("%.2f", need_qty));
//2、排产需求量(未开工的工令重量+排产未生成工令日计划重量)根据bom计算需要多少原料库存重量
// JSONObject nedd_mater = WQL.getWO("statistical_report_query_01").addParam("flag", "6").addParam("material_id", material_id).addParam("begin_time", begin_time).addParam("end_time", end_time).addParam("org_id", org_id).process().uniqueResult(0);
double bom_qty = 0;
List<Object> needMaterInfo = needMaterMap.get(material_id);
if (ObjectUtil.isNotEmpty(needMaterInfo)) {
@@ -270,6 +311,14 @@ public class StatisticalReportServiceImpl implements StatisticalReportService {
double buy_qty = (canuse_num + noin_qty + notqty) - (bom_qty + safe_qty);
jo8.put(material_id, String.format("%.2f", buy_qty));
//9
double need_qty2 = 0;
if (dtlJa_map2.containsKey(material_id)) {
need_qty2 = dtlJa_map2.get(material_id);
}
jo9.put(material_id, String.format("%.2f", need_qty2));
//6、覆盖日期物料库存可坚持到哪一天库存现存量减每天需求量哪天<0,取前一天
if (canuse_num<0){
jo5.put(material_id, DateUtil.offsetDay(date1, -1).toString().substring(0, 10));
@@ -290,25 +339,6 @@ public class StatisticalReportServiceImpl implements StatisticalReportService {
}
}
}
// for (int j = 1; j <= betweenDay; j++) {
// DateTime newDate = DateUtil.offsetDay(date1, j);
// //查询该物料当天的需求量
// JSONObject today_qty = WQL.getWO("statistical_report_query_01").addParam("flag", "8").addParam("material_id", material_id).addParam("begin_time", newDate.toString().substring(0, 10) + "%").process().uniqueResult(0);
// double need_weight = 0;
// if (ObjectUtil.isNotEmpty(today_qty)) {
// need_weight = today_qty.getDoubleValue("qty");
// }
// if (canuse_num < need_weight) {
// jo5.put(material_id, DateUtil.offsetDay(newDate, -1).toString().substring(0, 10));
// break;
// } else {
// canuse_num -= need_weight;
// }
// if (j == betweenDay) {
// jo5.put(material_id, end_time.substring(0, 10));
// }
// }
}
}
JSONObject jo = new JSONObject();
@@ -320,9 +350,36 @@ public class StatisticalReportServiceImpl implements StatisticalReportService {
public Map<String, Object> materPlanDtlQuery(Map whereJson) {
String begin_time = MapUtil.getStr(whereJson, "begin_time");
String end_time = MapUtil.getStr(whereJson, "end_time");
String org_id = MapUtil.getStr(whereJson, "org_id");
String begin_date = "";
String end_date = "";
if (StrUtil.isNotEmpty(begin_time)) {
begin_time = begin_time.substring(0,10)+" 00:00:00";
begin_date = begin_time.substring(0,10);
}
if (StrUtil.isNotEmpty(end_time)) {
end_time = end_time.substring(0,10)+" 23:59:59";
end_date = end_time.substring(0,10);
}
String org_ids = MapUtil.getStr(whereJson, "task_status");
String org_ids_new = "";
if (StrUtil.isNotEmpty(org_ids) && !"null".equals(org_ids)) {
String[] strs = org_ids.split(",");
for( int i=0;i<strs.length;i++){
if(i==0){
org_ids_new = "('" +strs[i];
}else{
org_ids_new =org_ids_new +"','"+strs[i];
}
}
org_ids_new =org_ids_new +"')";
}
//查询日期内的排产日计划物料信息
JSONArray jsonArr = WQL.getWO("statistical_report_query_01").addParam("flag", "9").addParam("begin_time", begin_time).addParam("end_time", end_time).addParam("org_id", org_id).process().getResultJSONArray(0);
JSONArray jsonArr = WQL.getWO("statistical_report_query_01").addParam("flag", "9")
.addParam("begin_time", begin_time).addParam("end_time", end_time)
.addParam("begin_date", begin_date)
.addParam("end_date", end_date)
.addParam("org_ids", org_ids_new).process().getResultJSONArray(0);
JSONArray rows = new JSONArray();
for (int i = 0; i < jsonArr.size(); i++) {
JSONObject row = jsonArr.getJSONObject(i);

View File

@@ -16,6 +16,8 @@
输入.flag TYPEAS s_string
输入.begin_time TYPEAS s_string
输入.end_time TYPEAS s_string
输入.begin_date TYPEAS s_string
输入.end_date TYPEAS s_string
输入.pcsn TYPEAS s_string
输入.material_code TYPEAS s_string
输入.bill_code TYPEAS s_string
@@ -28,6 +30,8 @@
输入.bill_status TYPEAS s_string
输入.material_id TYPEAS s_string
输入.org_id TYPEAS s_string
输入.material_ids TYPEAS f_string
输入.org_ids TYPEAS f_string
[临时表]
@@ -313,45 +317,55 @@
mb.material_name,
mb.material_code,
class.parent_class_id,
(case when class.class_id = '1503644362192588800' then 1
when class.class_id = '1503644361664106496' then 2
when class.class_id = '1503644362788179968' then 4
when class.class_id = '1503644362234531840' then 5
else 3 end) AS order_no
FROM
(
SELECT
wo.material_id
CASE
WHEN class.class_id = '1503644362192588800' THEN
1
WHEN class.class_id = '1503644361664106496' THEN
2
WHEN class.class_id = '1503644362788179968' THEN
4
WHEN class.class_id = '1503644362234531840' THEN
5 ELSE 3
END
) AS order_no
FROM
pdm_bi_workorder wo
WHERE
wo.is_delete = '0'
AND wo.`status` IN ( '10', '20', '30' )
OPTION 输入.begin_time <> ""
wo.planstart_time >= 输入.begin_time
ENDOPTION
OPTION 输入.end_time <> ""
wo.planstart_time <= 输入.end_time
ENDOPTION
UNION
SELECT
plan.material_id
FROM
mps_bd_productdailyplan plan
WHERE
plan.`status` = '01'
OPTION 输入.begin_time <> ""
plan.planstart_date >= 输入.begin_time
ENDOPTION
OPTION 输入.end_time <> ""
plan.planstart_date <= 输入.end_time
ENDOPTION
) a
LEFT JOIN md_pd_productbom bom ON bom.material_id = a.material_id
LEFT JOIN md_pd_productbomdtl dtl ON dtl.bom_id = bom.bom_id
LEFT JOIN md_me_materialbase mb ON mb.material_id = dtl.material_id
LEFT JOIN md_pb_classstandard class ON class.class_id = mb.material_type_id
ORDER BY order_no,material_code
(
SELECT
dtl.material_id
FROM
(
SELECT
wo.material_id
FROM
pdm_bi_workorder wo
WHERE
wo.is_delete = '0'
AND wo.`status` IN ( '10', '20', '30' ) UNION
SELECT
plan.material_id
FROM
mps_bd_productdailyplan plan
WHERE
plan.`status` = '01'
) a
INNER JOIN md_pd_productbom bom ON bom.material_id = a.material_id
INNER JOIN md_pd_productbomdtl dtl ON dtl.bom_id = bom.bom_id UNION
SELECT
mb2.material_id
FROM
md_me_materialbase mb2
WHERE
1 = 1
AND mb2.is_delete = '0'
AND mb2.material_type_id IN ( '1503644361664106496', '1503644361697660928', '1503644362192588800', '1503644362234531840', '1503644362788179968', '1503644362838511616' )
) b
INNER JOIN md_me_materialbase mb ON mb.material_id = b.material_id
INNER JOIN md_pb_classstandard class ON class.class_id = mb.material_type_id
ORDER BY
order_no,
material_code
ENDSELECT
ENDQUERY
ENDIF
@@ -433,14 +447,14 @@
WHERE
wo.`status` < 50
AND is_delete = '0'
OPTION 输入.begin_time <> ""
wo.planstart_time >= 输入.begin_time
OPTION 输入.begin_date <> ""
wo.planstart_time >= 输入.begin_date
ENDOPTION
OPTION 输入.end_time <> ""
wo.planstart_time <= 输入.end_time
OPTION 输入.end_date <> ""
wo.planstart_time <= 输入.end_date
ENDOPTION
OPTION 输入.org_id <> ""
wo.org_id = 输入.org_id
OPTION 输入.org_ids <> ""
wo.org_id in 输入.org_ids
ENDOPTION
UNION ALL
SELECT
@@ -457,8 +471,8 @@
OPTION 输入.end_time <> ""
plan.planstart_date <= 输入.end_time
ENDOPTION
OPTION 输入.org_id <> ""
dept.dept_id = 输入.org_id
OPTION 输入.org_ids <> ""
dept.dept_id in 输入.org_ids
ENDOPTION
) a
GROUP BY
@@ -632,16 +646,15 @@
LEFT JOIN sys_dept dept ON dept.`code` = plan.plan_org_code
WHERE
plan.status = '01'
OPTION 输入.begin_time <> ""
plan.planstart_date >= 输入.begin_time
OPTION 输入.begin_date <> ""
plan.planstart_date >= 输入.begin_date
ENDOPTION
OPTION 输入.end_time <> ""
plan.planstart_date <= 输入.end_time
OPTION 输入.end_date <> ""
plan.planstart_date <= 输入.end_date
ENDOPTION
OPTION 输入.org_id <> ""
dept.dept_id = 输入.org_id
OPTION 输入.org_ids <> ""
dept.dept_id in 输入.org_ids
ENDOPTION
UNION ALL
SELECT
@@ -665,12 +678,11 @@
OPTION 输入.end_time <> ""
wo.planstart_time <= 输入.end_time
ENDOPTION
OPTION 输入.org_id <> ""
wo.org_id = 输入.org_id
OPTION 输入.org_ids <> ""
wo.org_id in 输入.org_ids
ENDOPTION
GROUP BY
planstart_time,wo.material_id
ORDER BY
planstart_date
ENDSELECT
@@ -709,11 +721,11 @@
FROM
MPS_BD_ProductDailyPlan
WHERE `status` = '01'
OPTION 输入.begin_time <> ""
planstart_date >= 输入.begin_time
OPTION 输入.begin_date <> ""
planstart_date >= 输入.begin_date
ENDOPTION
OPTION 输入.end_time <> ""
planstart_date <= 输入.end_time
OPTION 输入.end_date <> ""
planstart_date <= 输入.end_date
ENDOPTION
) a GROUP BY a.material_id,currentDate
) b

View File

@@ -16,6 +16,8 @@
输入.flag TYPEAS s_string
输入.begin_time TYPEAS s_string
输入.end_time TYPEAS s_string
输入.begin_date TYPEAS s_string
输入.end_date TYPEAS s_string
输入.pcsn TYPEAS s_string
输入.material_code TYPEAS s_string
输入.bill_code TYPEAS s_string
@@ -131,4 +133,25 @@
ENDQUERY
ENDIF
IF 输入.flag = "4"
QUERY
SELECT
FormulaDtl.material_id,
SUM( FormulaDtl.formula_qty ) AS qty
FROM PDM_BI_Formula Formula
inner JOIN PDM_BI_FormulaDtl FormulaDtl ON FormulaDtl.formula_id = Formula.formula_id
where 1=1
and Formula.is_delete='0'
OPTION 输入.begin_time <> ""
Formula.create_time >= 输入.begin_time
ENDOPTION
OPTION 输入.end_time <> ""
Formula.create_time <= 输入.end_time
ENDOPTION
GROUP BY
FormulaDtl.material_id
ENDSELECT
ENDQUERY
ENDIF