This commit is contained in:
zds
2022-12-01 21:48:55 +08:00
parent aced8be5a7
commit c22a8545ee
8 changed files with 214 additions and 197 deletions

View File

@@ -67,19 +67,36 @@ public class IvtQueryServiceImpl implements IvtQueryService {
} }
JSONObject jo = WQL.getWO("Qivt_query_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "me.material_code,me.material_name"); JSONObject jo = WQL.getWO("Qivt_query_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "me.material_code,me.material_name");
JSONArray json = jo.getJSONArray("content"); JSONArray json = jo.getJSONArray("content");
JSONArray ja = new JSONArray();
for(int i=0;i<json.size();i++){
JSONObject jo_now = json.getJSONObject(i);
JSONObject jo2 = WQL.getWO("Qivt_query_02").addParam("flag","1")
.addParam("storagevehicle_code",jo_now.getString("storagevehicle_code"))
.addParam("is_active",jo_now.getString("is_active"))
.addParam("ivt_level",jo_now.getString("ivt_level"))
.addParam("quality_scode",jo_now.getString("quality_scode"))
.addParam("pcsn",jo_now.getString("pcsn"))
.addParam("material_id",jo_now.getString("material_id")).process().uniqueResult(0);
if(jo2!=null){
jo_now.put("bucket_num",jo2.getDouble("bucket_num"));
}else{
jo_now.put("bucket_num","0");
}
ja.add(jo_now);
}
map.put("flag", "01"); map.put("flag", "01");
JSONArray jo2 = WQL.getWO("Qivt_query_01").addParamMap(map).process().getResultJSONArray(1); JSONArray jo2 = WQL.getWO("Qivt_query_01").addParamMap(map).process().getResultJSONArray(1);
if(jo2.size()!=0){ if(jo2.size()!=0){
JSONObject jo3 = jo2.getJSONObject(0); JSONObject jo3 = jo2.getJSONObject(0);
jo3.put("stor_name","合计"); jo3.put("stor_name","合计");
json.add(jo3); ja.add(jo3);
}else{ }else{
JSONObject jo3 = new JSONObject(); JSONObject jo3 = new JSONObject();
jo3.put("stor_name","合计"); jo3.put("stor_name","合计");
json.add(jo3); ja.add(jo3);
} }
jo.put("content",json); jo.put("content",ja);
return jo; return jo;
} }

View File

@@ -38,9 +38,22 @@ public class StatisticalReportServiceImpl implements StatisticalReportService {
String material_code = MapUtil.getStr(whereJson, "material_code"); String material_code = MapUtil.getStr(whereJson, "material_code");
HashMap<String, String> map = new HashMap<>(); HashMap<String, String> map = new HashMap<>();
map.put("flag", "1"); map.put("flag", "1");
map.put("begin_time", MapUtil.getStr(whereJson, "begin_time")); String begin_time = MapUtil.getStr(whereJson, "begin_time");
map.put("end_time", MapUtil.getStr(whereJson, "end_time")); if (StrUtil.isNotEmpty(begin_time)) {
map.put("pcsn", MapUtil.getStr(whereJson, "pcsn")); map.put("begin_time", begin_time.substring(0,10)+" 00:00:00");
}
String end_time = MapUtil.getStr(whereJson, "end_time");
if (StrUtil.isNotEmpty(end_time)) {
map.put("end_time", end_time.substring(0,10)+" 23:59:59");
}
String pcsn = MapUtil.getStr(whereJson, "pcsn");
if (!StrUtil.isEmpty(pcsn)) {
//处理转义字符
if (pcsn.contains("\\")) {
pcsn = pcsn.replace("\\", "\\\\\\");
}
map.put("pcsn", "%" + pcsn + "%");
}
if (!StrUtil.isEmpty(material_code)) { if (!StrUtil.isEmpty(material_code)) {
//处理转义字符 //处理转义字符
if (material_code.contains("\\")) { if (material_code.contains("\\")) {

View File

@@ -60,6 +60,7 @@
struct.struct_code, struct.struct_code,
struct.struct_name, struct.struct_name,
struct.storagevehicle_code, struct.storagevehicle_code,
ivt.material_id,
me.material_code, me.material_code,
me.material_name, me.material_name,
me.material_spec, me.material_spec,
@@ -73,139 +74,64 @@
ivt.frozen_qty, ivt.frozen_qty,
ivt.warehousing_qty, ivt.warehousing_qty,
ivt.qty_unit_name, ivt.qty_unit_name,
ivt.instorage_time, ivt.instorage_time
bucket.bucket_num
FROM FROM
ST_IVT_StructIvt ivt ST_IVT_StructIvt ivt
LEFT JOIN ST_IVT_StructAttr struct ON ivt.struct_id = struct.struct_id inner JOIN ST_IVT_StructAttr struct ON ivt.struct_id = struct.struct_id
LEFT JOIN MD_ME_MaterialBase me ON me.material_id = ivt.material_id inner JOIN MD_ME_MaterialBase me ON me.material_id = ivt.material_id
LEFT JOIN MD_PB_ClassStandard class ON class.class_id = me.material_type_id inner JOIN MD_PB_ClassStandard class ON class.class_id = me.material_type_id
LEFT JOIN (
SELECT
COUNT(*) AS bucket_num,
br.storagevehicle_code,
br.material_id,
br.pcsn,
br.is_active,
br.ivt_level,
br.quality_scode
FROM
MD_PB_BucketRecord br
WHERE 1=1
GROUP BY
br.storagevehicle_code,
br.material_id,
br.pcsn,
br.is_active,
br.ivt_level,
br.quality_scode
) bucket ON (bucket.storagevehicle_code = struct.storagevehicle_code
and bucket.material_id=ivt.material_id
and bucket.pcsn=ivt.pcsn
and bucket.is_active=ivt.is_active
and bucket.ivt_level=ivt.ivt_level
and bucket.quality_scode=ivt.quality_scode)
WHERE 1=1 WHERE 1=1
OPTION 输入.stor_id <> "" OPTION 输入.stor_id <> ""
struct.stor_id = 输入.stor_id struct.stor_id = 输入.stor_id
ENDOPTION ENDOPTION
OPTION 输入.sects <> "" OPTION 输入.sects <> ""
struct.sect_id in 输入.sects struct.sect_id in 输入.sects
ENDOPTION ENDOPTION
OPTION 输入.material_name <> "" OPTION 输入.material_name <> ""
( me.material_name like "%" 输入.material_name "%" or me.material_code like "%" 输入.material_name "%" ) ( me.material_name like "%" 输入.material_name "%" or me.material_code like "%" 输入.material_name "%" )
ENDOPTION ENDOPTION
OPTION 输入.storagevehicle_code <> "" OPTION 输入.storagevehicle_code <> ""
(struct.storagevehicle_code like "%" 输入.storagevehicle_code "%") (struct.storagevehicle_code like "%" 输入.storagevehicle_code "%")
ENDOPTION ENDOPTION
OPTION 输入.struct_name <> "" OPTION 输入.struct_name <> ""
( struct.struct_name like "%" 输入.struct_name "%" or struct.struct_code like "%" 输入.struct_name "%" ) ( struct.struct_name like "%" 输入.struct_name "%" or struct.struct_code like "%" 输入.struct_name "%" )
ENDOPTION ENDOPTION
OPTION 输入.is_active <> "" OPTION 输入.is_active <> ""
ivt.is_active = 输入.is_active ivt.is_active = 输入.is_active
ENDOPTION ENDOPTION
OPTION 输入.ivt_level <> "" OPTION 输入.ivt_level <> ""
ivt.ivt_level = 输入.ivt_level ivt.ivt_level = 输入.ivt_level
ENDOPTION ENDOPTION
OPTION 输入.quality_scode <> "" OPTION 输入.quality_scode <> ""
ivt.quality_scode = 输入.quality_scode ivt.quality_scode = 输入.quality_scode
ENDOPTION ENDOPTION
OPTION 输入.pcsn <> "" OPTION 输入.pcsn <> ""
ivt.pcsn like "%" 输入.pcsn "%" ivt.pcsn like "%" 输入.pcsn "%"
ENDOPTION ENDOPTION
OPTION 输入.material_model <> "" OPTION 输入.material_model <> ""
me.material_model like "%" 输入.material_model "%" me.material_model like "%" 输入.material_model "%"
ENDOPTION ENDOPTION
OPTION 输入.classIds <> "" OPTION 输入.classIds <> ""
class.class_id in 输入.classIds class.class_id in 输入.classIds
ENDOPTION ENDOPTION
ENDSELECT ENDSELECT
ENDPAGEQUERY ENDPAGEQUERY
ENDIF ENDIF
IF 输入.flag = "01" IF 输入.flag = "01"
QUERY QUERY
SELECT SELECT
sum(outq.bucket_num) AS bucket_num, sum( ivt.ivt_qty ) AS ivt_qty,
sum(outq.ivt_qty) AS ivt_qty, sum( ivt.canuse_qty ) AS canuse_qty,
sum(outq.canuse_qty) AS canuse_qty, sum( ivt.frozen_qty ) AS frozen_qty,
sum(outq.frozen_qty) AS frozen_qty, sum( ivt.warehousing_qty ) AS warehousing_qty
sum(outq.warehousing_qty) AS warehousing_qty
FROM FROM
( ST_IVT_StructIvt ivt
SELECT inner JOIN ST_IVT_StructAttr struct ON ivt.struct_id = struct.struct_id
struct.stor_name, inner JOIN MD_ME_MaterialBase me ON me.material_id = ivt.material_id
struct.sect_name, inner JOIN MD_PB_ClassStandard class ON class.class_id = me.material_type_id
struct.struct_code, WHERE
struct.struct_name, 1 = 1
struct.storagevehicle_code,
me.material_code,
me.material_name,
me.material_spec,
me.material_model,
ivt.quality_scode,
ivt.ivt_level,
ivt.is_active,
ivt.pcsn,
ivt.ivt_qty,
ivt.canuse_qty,
ivt.frozen_qty,
ivt.warehousing_qty,
ivt.qty_unit_name,
ivt.instorage_time,
bucket.bucket_num
FROM
ST_IVT_StructIvt ivt
LEFT JOIN ST_IVT_StructAttr struct ON ivt.struct_id = struct.struct_id
LEFT JOIN MD_ME_MaterialBase me ON me.material_id = ivt.material_id
LEFT JOIN MD_PB_ClassStandard class ON class.class_id = me.material_type_id
LEFT JOIN (
SELECT
COUNT(*) AS bucket_num,
br.storagevehicle_code,
br.material_id,
br.pcsn,
br.is_active,
br.ivt_level,
br.quality_scode
FROM
MD_PB_BucketRecord br
WHERE 1=1
GROUP BY
br.storagevehicle_code,
br.material_id,
br.pcsn,
br.is_active,
br.ivt_level,
br.quality_scode
) bucket ON (bucket.storagevehicle_code = struct.storagevehicle_code
and bucket.material_id=ivt.material_id
and bucket.pcsn=ivt.pcsn
and bucket.is_active=ivt.is_active
and bucket.ivt_level=ivt.ivt_level
and bucket.quality_scode=ivt.quality_scode)
WHERE 1=1
OPTION 输入.stor_id <> "" OPTION 输入.stor_id <> ""
struct.stor_id = 输入.stor_id struct.stor_id = 输入.stor_id
ENDOPTION ENDOPTION
@@ -239,8 +165,6 @@
OPTION 输入.classIds <> "" OPTION 输入.classIds <> ""
class.class_id in 输入.classIds class.class_id in 输入.classIds
ENDOPTION ENDOPTION
) outq
where 1=1
ENDSELECT ENDSELECT
ENDQUERY ENDQUERY
ENDIF ENDIF

View File

@@ -0,0 +1,74 @@
[交易说明]
交易名: 库存分页查询
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.storagevehicle_code TYPEAS s_string
输入.material_id TYPEAS s_string
输入.quality_scode TYPEAS s_string
输入.ivt_level TYPEAS s_string
输入.is_active TYPEAS s_string
输入.pcsn TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
PAGEQUERY
SELECT
COUNT(bucket.bucketunique) AS bucket_num
FROM
MD_PB_BucketRecord bucket
WHERE 1=1
OPTION 输入.storagevehicle_code <> ""
bucket.storagevehicle_code = 输入.storagevehicle_code
ENDOPTION
OPTION 输入.is_active <> ""
bucket.is_active = 输入.is_active
ENDOPTION
OPTION 输入.ivt_level <> ""
bucket.ivt_level = 输入.ivt_level
ENDOPTION
OPTION 输入.quality_scode <> ""
bucket.quality_scode = 输入.quality_scode
ENDOPTION
OPTION 输入.pcsn <> ""
bucket.pcsn = 输入.pcsn
ENDOPTION
OPTION 输入.material_id <> ""
bucket.material_id = 输入.material_id
ENDOPTION
ENDSELECT
ENDPAGEQUERY
ENDIF

View File

@@ -68,9 +68,9 @@
MAX( ext.old_mark) AS old_mark MAX( ext.old_mark) AS old_mark
FROM FROM
pdm_bi_procedureoffline off pdm_bi_procedureoffline off
LEFT JOIN pdm_bi_workorder wo ON (wo.material_id = off.material_id and wo.pcsn = off.pcsn) inner JOIN pdm_bi_workorder wo ON (wo.material_id = off.material_id and wo.pcsn = off.pcsn)
LEFT JOIN md_me_materialbase mb ON mb.material_id = off.material_id inner JOIN md_me_materialbase mb ON mb.material_id = off.material_id
LEFT JOIN md_me_producmaterialext ext ON ext.material_id = off.material_id inner JOIN md_me_producmaterialext ext ON ext.material_id = off.material_id
WHERE WHERE
1=1 and wo.is_delete='0' 1=1 and wo.is_delete='0'
OPTION 输入.material_code <> "" OPTION 输入.material_code <> ""
@@ -81,20 +81,18 @@
) )
ENDOPTION ENDOPTION
OPTION 输入.pcsn <> "" OPTION 输入.pcsn <> ""
off.pcsn = 输入.pcsn off.pcsn like 输入.pcsn
ENDOPTION ENDOPTION
OPTION 输入.begin_time <> ""
off.create_time >= 输入.begin_time
ENDOPTION
OPTION 输入.end_time <> ""
off.create_time <= 输入.end_time
ENDOPTION
GROUP BY GROUP BY
off.material_id, off.material_id,
off.pcsn, off.pcsn,
wo.org_id wo.org_id
HAVING
1=1
OPTION 输入.begin_time <> ""
create_time >= 输入.begin_time
ENDOPTION
OPTION 输入.end_time <> ""
create_time <= 输入.end_time
ENDOPTION
ENDSELECT ENDSELECT
ENDPAGEQUERY ENDPAGEQUERY
ENDIF ENDIF
@@ -102,28 +100,12 @@
IF 输入.flag = "01" IF 输入.flag = "01"
QUERY QUERY
SELECT SELECT
sum(outq.qty) AS qty SUM( off.qty ) AS qty
FROM
(
SELECT
MAX( mb.material_code ) AS material_code,
SUM( off.qty ) AS qty,
off.material_id,
off.pcsn,
wo.org_id,
MAX( off.create_time ) AS create_time,
MAX( off.create_name ) AS create_name,
MAX( wo.planend_time ) AS planend_time,
MAX( wo.realend_time ) AS realend_time,
datediff (MAX( wo.planend_time ),MAX( wo.realend_time )) AS off_days,
MAX( ext.old_mark) AS old_mark
FROM FROM
pdm_bi_procedureoffline off pdm_bi_procedureoffline off
LEFT JOIN pdm_bi_workorder wo ON (wo.material_id = off.material_id and wo.pcsn = off.pcsn) inner JOIN md_me_materialbase mb ON mb.material_id = off.material_id
LEFT JOIN md_me_materialbase mb ON mb.material_id = off.material_id
LEFT JOIN md_me_producmaterialext ext ON ext.material_id = off.material_id
WHERE WHERE
1=1 and wo.is_delete='0' 1=1
OPTION 输入.material_code <> "" OPTION 输入.material_code <> ""
( (
mb.material_code like 输入.material_code mb.material_code like 输入.material_code
@@ -132,22 +114,14 @@
) )
ENDOPTION ENDOPTION
OPTION 输入.pcsn <> "" OPTION 输入.pcsn <> ""
off.pcsn = 输入.pcsn off.pcsn like 输入.pcsn
ENDOPTION ENDOPTION
GROUP BY
off.material_id,
off.pcsn,
wo.org_id
HAVING
1=1
OPTION 输入.begin_time <> "" OPTION 输入.begin_time <> ""
create_time >= 输入.begin_time off.create_time >= 输入.begin_time
ENDOPTION ENDOPTION
OPTION 输入.end_time <> "" OPTION 输入.end_time <> ""
create_time <= 输入.end_time off.create_time <= 输入.end_time
ENDOPTION ENDOPTION
) outq
where 1=1
ENDSELECT ENDSELECT
ENDQUERY ENDQUERY
ENDIF ENDIF

View File

@@ -25,10 +25,12 @@ Date.prototype.daysLater = function(days, midnight) {
return midnight ? date.toMidnight() : date return midnight ? date.toMidnight() : date
} }
Date.prototype.monthBegin = function(offset) { Date.prototype.monthBegin = function() {
offset = offset ? offset - 0 : 0 const year = new Date().getFullYear()
const days = this.getDate() - 1 - offset const mouth = new Date().getMonth()
return this.daysAgo(days, true) const days = new Date(year,mouth,1).strftime('%F', 'zh')
debugger
return days
} }
Date.prototype.quarterBegin = function() { Date.prototype.quarterBegin = function() {

View File

@@ -166,21 +166,21 @@
<el-link type="warning" @click="openBucket(scope.row)">{{ scope.row.storagevehicle_code }}</el-link> <el-link type="warning" @click="openBucket(scope.row)">{{ scope.row.storagevehicle_code }}</el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="material_code" label="物料编码" min-width="150" show-overflow-tooltip /> <el-table-column prop="bucket_num" label="桶数" min-width="100" />
<el-table-column prop="material_name" label="物料名称" min-width="120" show-overflow-tooltip /> <el-table-column prop="material_code" label="物料编码" min-width="150" />
<el-table-column prop="material_spec" label="物料规格" show-overflow-tooltip /> <el-table-column prop="material_name" label="物料名称" min-width="120" />
<el-table-column prop="material_model" label="型号" /> <el-table-column prop="material_spec" label="物料规格" min-width="120" />
<el-table-column prop="pcsn" label="批次" show-overflow-tooltip width="150px" /> <el-table-column prop="material_model" label="型号" min-width="120" />
<el-table-column prop="quality_scode" label="品质类型" :formatter="format_quality_scode" /> <el-table-column prop="pcsn" label="批次" min-width="140" />
<el-table-column prop="ivt_level" label="库存等级" :formatter="format_ivt_level" /> <el-table-column prop="quality_scode" label="品质类型" :formatter="format_quality_scode" min-width="90" />
<el-table-column prop="is_active" label="是否可用" :formatter="format_is_active" /> <el-table-column prop="ivt_level" label="库存等级" :formatter="format_ivt_level" min-width="90" />
<el-table-column prop="bucket_num" :formatter="crud.formatNum0" label="桶数" min-width="100" /> <el-table-column prop="is_active" label="是否可用" :formatter="format_is_active" min-width="90" />
<el-table-column prop="ivt_qty" label="库存重量" :formatter="formatQty" min-width="100" /> <el-table-column prop="ivt_qty" label="库存重量" :formatter="formatQty" min-width="100" />
<el-table-column prop="canuse_qty" label="可用重量" :formatter="formatQty" min-width="100" /> <el-table-column prop="canuse_qty" label="可用重量" :formatter="formatQty" min-width="100" />
<el-table-column prop="frozen_qty" label="冻结数" :formatter="formatQty" min-width="100" /> <el-table-column prop="frozen_qty" label="冻结数" :formatter="formatQty" min-width="100" />
<el-table-column prop="warehousing_qty" label="待入数" :formatter="formatQty" min-width="100" /> <el-table-column prop="warehousing_qty" label="待入数" :formatter="formatQty" min-width="100" />
<el-table-column prop="qty_unit_name" label="单位" /> <el-table-column prop="qty_unit_name" label="单位" min-width="100" />
<el-table-column prop="instorage_time" label="入库时间" width="135" /> <el-table-column prop="instorage_time" label="入库时间" minwidth="140" />
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
@@ -242,9 +242,6 @@ export default {
} }
}, },
created() { created() {
// crudSectattr.getSect().then(res => {
// this.sects = res.content
// })
crudSectattr.getSect({ 'is_materialstore': '1' }).then(res => { crudSectattr.getSect({ 'is_materialstore': '1' }).then(res => {
this.sects = res.content this.sects = res.content
}) })

View File

@@ -15,12 +15,12 @@
<el-date-picker <el-date-picker
v-model="query.createTime" v-model="query.createTime"
type="daterange" type="daterange"
@input="onInput()"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']" :default-time="['00:00:00', '23:59:59']"
@change="crud.toQuery" @input="onInput()"
@change="mytoQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="物料"> <el-form-item label="物料">
@@ -88,7 +88,7 @@ import StructIvt from '@/views/wms/statistics/outStorQuery/StructIvt'
import crudRawAssist from '@/api/wms/st/core/inbill/rawassist' import crudRawAssist from '@/api/wms/st/core/inbill/rawassist'
import workorder from '@/api/wms/pdm/workorder' import workorder from '@/api/wms/pdm/workorder'
const start = new Date()
export default { export default {
name: 'ProductInstor', name: 'ProductInstor',
components: { StructIvt, crudOperation, rrOperation, pagination }, components: { StructIvt, crudOperation, rrOperation, pagination },
@@ -105,9 +105,6 @@ export default {
del: false, del: false,
reset: true, reset: true,
download: false download: false
},
query: {
createTime: [start.monthBegin(), new Date()]
} }
}) })
}, },
@@ -122,6 +119,7 @@ export default {
currentRow: null, currentRow: null,
storlist: [], storlist: [],
sum: 0, sum: 0,
query_flag: true,
Depts: [], Depts: [],
billtypelist: [] billtypelist: []
} }
@@ -142,11 +140,29 @@ export default {
workorder.getDepts().then(res => { workorder.getDepts().then(res => {
this.Depts = res this.Depts = res
}) })
this.crud.query.createTime = [new Date(new Date().monthBegin()), new Date()]
}, },
methods: { methods: {
[CRUD.HOOK.beforeRefresh]() {
if (this.query_flag) {
this.crud.query.begin_time = new Date().monthBegin()
this.crud.query.end_time = (new Date()).strftime('%F', 'zh')
this.query_flag = false
}
},
onInput() { onInput() {
this.$forceUpdate() 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()
},
async queryMater() { async queryMater() {
this.structshow = true this.structshow = true
}, },