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

View File

@@ -12,7 +12,16 @@
label-suffix=":"
>
<el-form-item label="统计日期">
<date-range-picker v-model="query.createTime" class="date-item" />
<el-date-picker
v-model="query.createTime"
type="daterange"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
@input="onInput()"
@change="mytoQuery"
/>
</el-form-item>
<el-form-item label="所属组织">
<el-select
@@ -20,8 +29,10 @@
clearable
size="mini"
placeholder="所属组织"
multiple
style="width: 400px"
class="filter-item"
@change="crud.toQuery"
@change="handTaskStatus"
>
<el-option
v-for="item in Depts"
@@ -99,17 +110,15 @@ import crudOperation from '@crud/CRUD.operation'
import StructIvt4 from '@/views/wms/statistics/materPlan/StructIvt4'
import StructIvt3 from '@/views/wms/statistics/materPlan/StructIvt3'
import StructIvt2 from '@/views/wms/statistics/materPlan/StructIvt2'
import DateRangePicker from '@/components/DateRangePicker'
import crudInspectionsheetmst from '@/api/wms/ql/inspectionsheetmst'
import { download } from '@/api/data'
import { downloadFile } from '@/utils'
import Date from '@/utils/datetime'
import workorder from '@/api/wms/pdm/workorder'
const start = new Date()
export default {
name: 'MaterPlanQuery',
components: { crudOperation, rrOperation, DateRangePicker, StructIvt4, StructIvt2, StructIvt3 },
components: { crudOperation, rrOperation, StructIvt4, StructIvt2, StructIvt3 },
mixins: [presenter(), header(), crud()],
cruds() {
return CRUD({
@@ -118,7 +127,7 @@ export default {
idField: '1',
sort: '1,desc',
query: {
createTime: [new Date(), start.daysLater(30)]
task_status: ''
},
optShow: {
add: false,
@@ -139,6 +148,7 @@ export default {
structshow2: false,
structshow3: false,
Depts: [],
query_flag: true,
statusList: [],
permission: {},
rules: {}
@@ -150,6 +160,7 @@ export default {
workorder.getDepts().then(res => {
this.Depts = res
})
this.crud.query.createTime = [new Date(), new Date().daysLater(30)]
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
@@ -160,9 +171,10 @@ export default {
report.getHeader2().then(res => {
this.cols2 = res
})
if (this.crud.query.createTime) {
this.crud.query.begin_time = this.crud.query.createTime[0]
this.crud.query.end_time = this.crud.query.createTime[1]
if (this.query_flag) {
this.crud.query.begin_time = (new Date()).strftime('%F', 'zh')
this.crud.query.end_time = (new Date().daysLater(30)).strftime('%F', 'zh')
this.query_flag = false
}
const data = this.crud.query
report.materPlanDtlQuery(data).then(res => {
@@ -173,6 +185,21 @@ export default {
})
return true
},
handTaskStatus(value) {
var str1 = ''
if (value) {
for (const item of value) {
if (str1 === '') {
str1 = item
} else {
str1 = str1 + ',' + item
}
}
this.query.task_status = str1
} else {
this.query.task_status = ''
}
},
open2(index, row) {
if (row.first === '库存现存量') {
this.structshow = true
@@ -198,6 +225,19 @@ export default {
hand(value) {
this.crud.toQuery()
},
onInput() {
this.$forceUpdate()
},
mytoQuery(array1) {
if (array1 === null) {
this.crud.query.begin_time = ''
this.crud.query.end_time = ''
} else {
this.crud.query.begin_time = array1[0]
this.crud.query.end_time = array1[1]
}
this.crud.toQuery()
},
downdtl() {
if (this.currentRow !== null) {
crud.downloadLoading = true