Commit 27ba095ca3045c9c5fb60935718547007001a617
1 parent
16c8f286
增加库存水位查询页面,预警消息增加连接跳转
Showing
10 changed files
with
604 additions
and
83 deletions
ant-design-vue-jeecg/src/views/system/inventory/InventoryLevelAlarmList.vue
0 → 100644
1 | +<template> | |
2 | + <a-card :bordered="false"> | |
3 | + <!-- 查询区域 --> | |
4 | + <div class="table-page-search-wrapper"> | |
5 | + <a-form layout="inline" @keyup.enter.native="searchQuery"> | |
6 | + <a-row :gutter="24"> | |
7 | + <a-col :xl="6" :lg="7" :md="8" :sm="24"> | |
8 | + <a-form-item label="物料编码"> | |
9 | + <a-input placeholder="请输入物料编码" v-model="queryParam.materialCode"></a-input> | |
10 | + </a-form-item> | |
11 | + </a-col> | |
12 | + <a-col :xl="6" :lg="7" :md="8" :sm="24"> | |
13 | + <a-form-item label="物料名称"> | |
14 | + <a-input placeholder="请输入物料名称" v-model="queryParam.materialName"></a-input> | |
15 | + </a-form-item> | |
16 | + </a-col> | |
17 | + <a-col :xl='6' :lg='7' :md='8' :sm='24'> | |
18 | + <a-form-item label='预警状态'> | |
19 | + <a-select show-search placeholder='请选择预警状态' option-filter-prop='children' v-model='queryParam.alarmStatus'> | |
20 | + <a-select-option v-for='item in alarmStatusList' :key='item.name' :value='item.code'> | |
21 | + {{ item.name }} | |
22 | + </a-select-option> | |
23 | + </a-select> | |
24 | + </a-form-item> | |
25 | + </a-col> | |
26 | + <a-col :xl="6" :lg="7" :md="8" :sm="24"> | |
27 | + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> | |
28 | + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> | |
29 | + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> | |
30 | + </span> | |
31 | + </a-col> | |
32 | + </a-row> | |
33 | + </a-form> | |
34 | + </div> | |
35 | + <!-- 查询区域-END --> | |
36 | + | |
37 | + <!-- 操作按钮区域 --> | |
38 | + <div class="table-operator" style="display: none"> | |
39 | + <a-button type="primary" icon="download" @click="handleExportXls('inventory_level_alarm')">导出</a-button> | |
40 | + </div> | |
41 | + | |
42 | + <!-- table区域-begin --> | |
43 | + <div> | |
44 | + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> | |
45 | + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a | |
46 | + style="font-weight: 600">{{ selectedRowKeys.length }}</a>项 | |
47 | + <a style="margin-left: 24px" @click="onClearSelected">清空</a> | |
48 | + </div> | |
49 | + | |
50 | + <a-table | |
51 | + ref="table" | |
52 | + size="middle" | |
53 | + :scroll="{x:true}" | |
54 | + bordered | |
55 | + rowKey="id" | |
56 | + :columns="columns" | |
57 | + :dataSource="dataSource" | |
58 | + :pagination="ipagination" | |
59 | + :loading="loading" | |
60 | + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" | |
61 | + class="j-table-force-nowrap" | |
62 | + @change="handleTableChange"> | |
63 | + | |
64 | + <span slot="min" slot-scope="text, record"> | |
65 | + <a-tag :key="record" :color="minColor(record)"> | |
66 | + {{ minStatus(record) }} | |
67 | + </a-tag> | |
68 | + </span> | |
69 | + | |
70 | + <span slot="max" slot-scope="text, record"> | |
71 | + <a-tag :key="record" :color="maxColor(record)"> | |
72 | + {{ maxStatus(record) }} | |
73 | + </a-tag> | |
74 | + </span> | |
75 | + | |
76 | + <span slot="qtySum" slot-scope="text, record"> | |
77 | + <a-tag :key="record" :color="qtySumColor(record)"> | |
78 | + {{ qtySumStatus(record) }} | |
79 | + </a-tag> | |
80 | + </span> | |
81 | + | |
82 | + <span slot="upper" slot-scope="text, record"> | |
83 | + <a-tag :key="record" :color="upperColor(record)"> | |
84 | + {{ record.upper }} | |
85 | + </a-tag> | |
86 | + </span> | |
87 | + | |
88 | + <span slot="lower" slot-scope="text, record"> | |
89 | + <a-tag :key="record" :color="lowerColor(record)"> | |
90 | + {{ record.lower }} | |
91 | + </a-tag> | |
92 | + </span> | |
93 | + | |
94 | + <template slot="htmlSlot" slot-scope="text"> | |
95 | + <div v-html="text"></div> | |
96 | + </template> | |
97 | + <template slot="imgSlot" slot-scope="text"> | |
98 | + <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> | |
99 | + <img v-else :src="getImgView(text)" height="25px" alt="" | |
100 | + style="max-width:80px;font-size: 12px;font-style: italic;"/> | |
101 | + </template> | |
102 | + <template slot="fileSlot" slot-scope="text"> | |
103 | + <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> | |
104 | + <a-button | |
105 | + v-else | |
106 | + :ghost="true" | |
107 | + type="primary" | |
108 | + icon="download" | |
109 | + size="small" | |
110 | + @click="downloadFile(text)"> | |
111 | + 下载 | |
112 | + </a-button> | |
113 | + </template> | |
114 | + | |
115 | + </a-table> | |
116 | + </div> | |
117 | + </a-card> | |
118 | +</template> | |
119 | + | |
120 | +<script> | |
121 | + | |
122 | +import '@/assets/less/TableExpand.less' | |
123 | +import {mixinDevice} from '@/utils/mixin' | |
124 | +import {JeecgListMixin} from '@/mixins/JeecgListMixin' | |
125 | + | |
126 | +export default { | |
127 | + name: 'InventoryLevelAlarmList', | |
128 | + mixins: [JeecgListMixin, mixinDevice], | |
129 | + components: {}, | |
130 | + queryParam: { | |
131 | + materialName2:"" | |
132 | + }, | |
133 | + data() { | |
134 | + return { | |
135 | + description: '库存水位预警', | |
136 | + // alarmStatusList:['所有', '无预警', '有预警', '上限预警', '下限预警'], | |
137 | + alarmStatusList:[ | |
138 | + {'name':'所有', 'code':'all'}, | |
139 | + {'name':'无预警', 'code':'noAlarm'}, | |
140 | + {'name':'有预警', 'code':'isAlarm'}, | |
141 | + {'name':'上限预警', 'code':'upperAlarm'}, | |
142 | + {'name':'下限预警', 'code':'lowerAlarm'}], | |
143 | + // 表头 | |
144 | + columns: [ | |
145 | + { | |
146 | + title: '#', | |
147 | + dataIndex: '', | |
148 | + key: 'rowIndex', | |
149 | + width: 60, | |
150 | + align: "center", | |
151 | + customRender: function (t, r, index) { | |
152 | + return parseInt(index) + 1; | |
153 | + } | |
154 | + }, | |
155 | + { | |
156 | + title: '物料编码', | |
157 | + align: "center", | |
158 | + dataIndex: 'materialCode' | |
159 | + }, | |
160 | + { | |
161 | + title: '物料名称', | |
162 | + align: "center", | |
163 | + dataIndex: 'materialName' | |
164 | + }, | |
165 | + { | |
166 | + title: '最小值', | |
167 | + align: "center", | |
168 | + dataIndex: 'min', | |
169 | + scopedSlots: {customRender: 'min'} | |
170 | + }, | |
171 | + { | |
172 | + title: '下限预警值', | |
173 | + align: "center", | |
174 | + dataIndex: 'lower', | |
175 | + scopedSlots: {customRender: 'lower'} | |
176 | + }, | |
177 | + { | |
178 | + title: '库存数量', | |
179 | + align: "center", | |
180 | + dataIndex: 'qtySum', | |
181 | + scopedSlots: {customRender: 'qtySum'} | |
182 | + }, | |
183 | + { | |
184 | + title: '上限预警值', | |
185 | + align: "center", | |
186 | + dataIndex: 'upper', | |
187 | + scopedSlots: {customRender: 'upper'} | |
188 | + }, | |
189 | + { | |
190 | + title: '最大值', | |
191 | + align: "center", | |
192 | + dataIndex: 'max', | |
193 | + scopedSlots: {customRender: 'max'} | |
194 | + }, | |
195 | + { | |
196 | + title: '物料规格', | |
197 | + align: "center", | |
198 | + dataIndex: 'materialSpec' | |
199 | + }, | |
200 | + { | |
201 | + title: '物料单位', | |
202 | + align: "center", | |
203 | + dataIndex: 'materialUnit' | |
204 | + }, | |
205 | + { | |
206 | + title: '仓库编码', | |
207 | + align: "center", | |
208 | + dataIndex: 'warehouseCode' | |
209 | + }, | |
210 | + { | |
211 | + title: '货主编码', | |
212 | + align: "center", | |
213 | + dataIndex: 'companyCode' | |
214 | + }, | |
215 | + { | |
216 | + title: '备注', | |
217 | + align: "center", | |
218 | + dataIndex: 'remark' | |
219 | + }, | |
220 | + ], | |
221 | + url: { | |
222 | + list: "/inventory/inventoryLevel/list", | |
223 | + exportXlsUrl: "/inventory/inventoryLevel/exportXls", | |
224 | + }, | |
225 | + dictOptions: {}, | |
226 | + superFieldList: [], | |
227 | + } | |
228 | + }, | |
229 | + created() { | |
230 | + this.getSuperFieldList(); | |
231 | + }, | |
232 | + computed: { | |
233 | + importExcelUrl: function () { | |
234 | + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; | |
235 | + }, | |
236 | + }, | |
237 | + methods: { | |
238 | + initDictConfig() { | |
239 | + }, | |
240 | + qtySumStatus(record) { | |
241 | + if(record.qtySum <= record.lower){ | |
242 | + return record.qtySum + " 🠋" | |
243 | + } | |
244 | + if(record.qtySum >= record.upper){ | |
245 | + return record.qtySum + " 🠉" | |
246 | + } | |
247 | + return record.qtySum; | |
248 | + }, | |
249 | + qtySumColor(record) { | |
250 | + if(record.qtySum > record.upper || record.qtySum < record.lower){ | |
251 | + return 'red'; | |
252 | + } | |
253 | + return ''; | |
254 | + }, | |
255 | + | |
256 | + lowerColor(record) { | |
257 | + if(record.qtySum <= record.lower){ | |
258 | + return 'blue'; | |
259 | + } | |
260 | + return ''; | |
261 | + }, | |
262 | + | |
263 | + upperColor(record) { | |
264 | + if(record.qtySum >= record.upper){ | |
265 | + return 'blue'; | |
266 | + } | |
267 | + return ''; | |
268 | + }, | |
269 | + | |
270 | + maxColor(record) { | |
271 | + if(record.qtySum >= record.max){ | |
272 | + return 'blue'; | |
273 | + } | |
274 | + return ''; | |
275 | + }, | |
276 | + | |
277 | + minColor(record) { | |
278 | + if(record.qtySum <= record.min){ | |
279 | + return 'blue'; | |
280 | + } | |
281 | + return ''; | |
282 | + }, | |
283 | + | |
284 | + minStatus(record) { | |
285 | + if(record.min <= 0){ | |
286 | + return '' | |
287 | + } | |
288 | + return record.min; | |
289 | + }, | |
290 | + | |
291 | + maxStatus(record) { | |
292 | + if(record.max <= 0){ | |
293 | + return ''; | |
294 | + } | |
295 | + return record.max; | |
296 | + }, | |
297 | + getSuperFieldList() { | |
298 | + let fieldList = []; | |
299 | + fieldList.push({type: 'string', value: 'alarmType', text: '预警类别代码'}) | |
300 | + fieldList.push({type: 'string', value: 'warehouseCode', text: '仓库编码'}) | |
301 | + fieldList.push({type: 'string', value: 'companyCode', text: '货主编码'}) | |
302 | + fieldList.push({type: 'string', value: 'materialCode', text: '物料编码'}) | |
303 | + fieldList.push({type: 'string', value: 'materialName', text: '物料名称'}) | |
304 | + fieldList.push({type: 'string', value: 'materialSpec', text: '物料规格'}) | |
305 | + fieldList.push({type: 'string', value: 'materialUnit', text: '物料单位'}) | |
306 | + fieldList.push({type: 'int', value: 'qtysum', text: 'qtysum'}) | |
307 | + fieldList.push({type: 'int', value: 'inlower', text: 'inlower'}) | |
308 | + fieldList.push({type: 'int', value: 'inupper', text: 'inupper'}) | |
309 | + fieldList.push({type: 'int', value: 'inmin', text: 'inmin'}) | |
310 | + fieldList.push({type: 'int', value: 'inmax', text: 'inmax'}) | |
311 | + fieldList.push({type: 'int', value: 'needalarm', text: 'needalarm'}) | |
312 | + fieldList.push({type: 'int', value: 'max', text: '最大'}) | |
313 | + fieldList.push({type: 'int', value: 'min', text: '最小'}) | |
314 | + fieldList.push({type: 'int', value: 'upper', text: '上限预警值'}) | |
315 | + fieldList.push({type: 'int', value: 'lower', text: '下限预警值'}) | |
316 | + fieldList.push({type: 'string', value: 'remark', text: '备注'}) | |
317 | + fieldList.push({type: 'string', value: 'userdef1', text: '备用字段1'}) | |
318 | + fieldList.push({type: 'string', value: 'userdef2', text: '备用字段2'}) | |
319 | + fieldList.push({type: 'string', value: 'userdef3', text: '备用字段3'}) | |
320 | + this.superFieldList = fieldList | |
321 | + } | |
322 | + } | |
323 | +} | |
324 | +</script> | |
325 | +<style scoped> | |
326 | +@import '~@assets/less/common.less'; | |
327 | +</style> | |
0 | 328 | \ No newline at end of file |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/materialWarning/service/IMaterialWarningService.java
1 | 1 | package org.jeecg.modules.wms.config.materialWarning.service; |
2 | 2 | |
3 | 3 | import com.baomidou.mybatisplus.extension.service.IService; |
4 | -import org.jeecg.modules.wms.config.materialWarning.entity.MaterialLevelAlarm; | |
5 | 4 | import org.jeecg.modules.wms.config.materialWarning.entity.MaterialWarning; |
6 | 5 | |
7 | -import java.util.List; | |
8 | - | |
9 | 6 | /** |
10 | 7 | * @Description: 物料预警 |
11 | 8 | * @Author: jeecg-boot |
... | ... | @@ -14,5 +11,4 @@ import java.util.List; |
14 | 11 | */ |
15 | 12 | public interface IMaterialWarningService extends IService<MaterialWarning> { |
16 | 13 | |
17 | - List<MaterialLevelAlarm> getLevelAlarm(String materialCode); | |
18 | 14 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/materialWarning/service/impl/MaterialWarningServiceImpl.java
1 | 1 | package org.jeecg.modules.wms.config.materialWarning.service.impl; |
2 | 2 | |
3 | -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
4 | -import org.jeecg.modules.wms.config.materialWarning.entity.MaterialLevelAlarm; | |
3 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
5 | 4 | import org.jeecg.modules.wms.config.materialWarning.entity.MaterialWarning; |
6 | 5 | import org.jeecg.modules.wms.config.materialWarning.mapper.MaterialWarningMapper; |
7 | 6 | import org.jeecg.modules.wms.config.materialWarning.service.IMaterialWarningService; |
8 | -import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; | |
9 | -import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; | |
10 | -import org.jeecg.utils.StringUtils; | |
11 | -import org.jeecg.utils.constant.QuantityConstant; | |
12 | 7 | import org.springframework.stereotype.Service; |
13 | 8 | |
14 | -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
15 | - | |
16 | -import javax.annotation.Resource; | |
17 | -import java.math.BigDecimal; | |
18 | -import java.util.ArrayList; | |
19 | -import java.util.List; | |
20 | -import java.util.stream.Collectors; | |
21 | - | |
22 | 9 | /** |
23 | 10 | * @Description: 物料预警 |
24 | 11 | * @Author: jeecg-boot |
... | ... | @@ -28,26 +15,4 @@ import java.util.stream.Collectors; |
28 | 15 | @Service |
29 | 16 | public class MaterialWarningServiceImpl extends ServiceImpl<MaterialWarningMapper, MaterialWarning> implements IMaterialWarningService { |
30 | 17 | |
31 | - @Resource | |
32 | - InventoryDetailServiceImpl inventoryDetailService; | |
33 | - | |
34 | - @Override | |
35 | - public List<MaterialLevelAlarm> getLevelAlarm(String materialCode) { | |
36 | - LambdaQueryWrapper<MaterialWarning> query = new LambdaQueryWrapper<>(); | |
37 | - query.eq(StringUtils.isNotEmpty(materialCode), MaterialWarning::getMaterialCode, materialCode); | |
38 | - List<MaterialWarning> warningList = list(query); | |
39 | - | |
40 | - List<MaterialLevelAlarm> alarmList = new ArrayList<>(); | |
41 | - warningList.forEach(w -> { | |
42 | - InventoryDetail d = new InventoryDetail(); | |
43 | - d.setMaterialCode(w.getMaterialCode()); | |
44 | - d.setCompanyCode(w.getCompanyCode()); | |
45 | - d.setWarehouseCode(w.getWarehouseCode()); | |
46 | - d.setInventoryStatus(QuantityConstant.QUALITY_GOOD); | |
47 | - BigDecimal sum = inventoryDetailService.getInventorySumQty(d); | |
48 | - alarmList.add(new MaterialLevelAlarm(w, sum)); | |
49 | - }); | |
50 | - | |
51 | - return alarmList.stream().filter(MaterialLevelAlarm::needAlarm).collect(Collectors.toList()); | |
52 | - } | |
53 | 18 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryLevel/controller/InventoryLevelAlarmController.java
0 → 100644
1 | +package org.jeecg.modules.wms.inventory.inventoryLevel.controller; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
4 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |
5 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
6 | +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |
7 | +import io.swagger.annotations.Api; | |
8 | +import io.swagger.annotations.ApiOperation; | |
9 | +import lombok.extern.slf4j.Slf4j; | |
10 | +import org.jeecg.common.api.vo.Result; | |
11 | +import org.jeecg.common.system.base.controller.JeecgController; | |
12 | +import org.jeecg.common.system.query.QueryGenerator; | |
13 | +import org.jeecg.modules.oss.entity.OSSFile; | |
14 | +import org.jeecg.modules.wms.config.materialWarning.entity.MaterialWarning; | |
15 | +import org.jeecg.modules.wms.config.materialWarning.service.IMaterialWarningService; | |
16 | +import org.jeecg.modules.wms.inventory.inventoryLevel.entity.InventoryLevelAlarm; | |
17 | +import org.jeecg.modules.wms.inventory.inventoryLevel.service.IInventoryLevelAlarmService; | |
18 | +import org.jeecg.utils.StringUtils; | |
19 | +import org.springframework.beans.factory.annotation.Autowired; | |
20 | +import org.springframework.web.bind.annotation.*; | |
21 | +import org.springframework.web.servlet.ModelAndView; | |
22 | + | |
23 | +import javax.servlet.http.HttpServletRequest; | |
24 | +import java.util.List; | |
25 | +import java.util.stream.Collectors; | |
26 | + | |
27 | +/** | |
28 | + * @Description: inventory_level_alarm | |
29 | + * @Author: jeecg-boot | |
30 | + * @Date: 2023-10-30 | |
31 | + * @Version: V1.0 | |
32 | + */ | |
33 | +@Api(tags="inventory_level_alarm") | |
34 | +@RestController | |
35 | +@RequestMapping("/inventory/inventoryLevel") | |
36 | +@Slf4j | |
37 | +public class InventoryLevelAlarmController extends JeecgController<InventoryLevelAlarm, IInventoryLevelAlarmService> { | |
38 | + @Autowired | |
39 | + private IInventoryLevelAlarmService iInventoryLevelAlarmService; | |
40 | + | |
41 | + @Autowired | |
42 | + private IMaterialWarningService iMaterialWarningService; | |
43 | + | |
44 | + /** | |
45 | + * 分页列表查询 | |
46 | + * | |
47 | + * @param inventoryLevelAlarm | |
48 | + * @param pageNo | |
49 | + * @param pageSize | |
50 | + * @param req | |
51 | + * @return | |
52 | + */ | |
53 | + //@AutoLog(value = "inventory_level_alarm-分页列表查询") | |
54 | + @ApiOperation(value="inventory_level_alarm-分页列表查询", notes="inventory_level_alarm-分页列表查询") | |
55 | + @GetMapping(value = "/list") | |
56 | + public Result<IPage<InventoryLevelAlarm>> queryPageList(String materialCode, String materialName, String alarmStatus, | |
57 | + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, | |
58 | + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, | |
59 | + HttpServletRequest req) { | |
60 | + | |
61 | + Page<InventoryLevelAlarm> page = new Page<>(pageNo, pageSize); | |
62 | + IPage<InventoryLevelAlarm> pageList = iInventoryLevelAlarmService.queryLevelAlarm(page, materialCode, materialName, alarmStatus); | |
63 | + //对list分页处理 | |
64 | + return Result.OK(pageList); | |
65 | + } | |
66 | + | |
67 | + | |
68 | + /** | |
69 | + * 通过id查询 | |
70 | + * | |
71 | + * @param id | |
72 | + * @return | |
73 | + */ | |
74 | + //@AutoLog(value = "inventory_level_alarm-通过id查询") | |
75 | + @ApiOperation(value="inventory_level_alarm-通过id查询", notes="inventory_level_alarm-通过id查询") | |
76 | + @GetMapping(value = "/queryById") | |
77 | + public Result<InventoryLevelAlarm> queryById(@RequestParam(name="id",required=true) String id) { | |
78 | + InventoryLevelAlarm inventoryLevelAlarm = iInventoryLevelAlarmService.getById(id); | |
79 | + if(inventoryLevelAlarm ==null) { | |
80 | + return Result.error("未找到对应数据"); | |
81 | + } | |
82 | + return Result.OK(inventoryLevelAlarm); | |
83 | + } | |
84 | + | |
85 | + /** | |
86 | + * 导出excel | |
87 | + * | |
88 | + * @param request | |
89 | + * @param inventoryLevelAlarm | |
90 | + */ | |
91 | + @RequestMapping(value = "/exportXls") | |
92 | + public ModelAndView exportXls(HttpServletRequest request, InventoryLevelAlarm inventoryLevelAlarm) { | |
93 | + return super.exportXls(request, inventoryLevelAlarm, InventoryLevelAlarm.class, "inventory_level_alarm"); | |
94 | + } | |
95 | + | |
96 | + | |
97 | +} | |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/materialWarning/entity/MaterialLevelAlarm.java renamed to huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryLevel/entity/InventoryLevelAlarm.java
1 | -package org.jeecg.modules.wms.config.materialWarning.entity; | |
1 | +package org.jeecg.modules.wms.inventory.inventoryLevel.entity; | |
2 | 2 | |
3 | 3 | import lombok.Data; |
4 | +import org.jeecg.modules.wms.config.materialWarning.entity.MaterialWarning; | |
4 | 5 | |
5 | 6 | import java.math.BigDecimal; |
6 | 7 | |
7 | 8 | @Data |
8 | -public class MaterialLevelAlarm extends MaterialWarning { | |
9 | +public class InventoryLevelAlarm extends MaterialWarning { | |
9 | 10 | private int qtySum; |
10 | - //小于等于下线预警 | |
11 | - private boolean inLower; | |
12 | - //小于等于上线预警 | |
13 | - private boolean inUpper; | |
14 | 11 | |
15 | - //小于等于最小值 | |
16 | - private boolean inMin; | |
17 | - //大于等于最大值 | |
18 | - private boolean inMax; | |
12 | + public InventoryLevelAlarm(){ | |
13 | + | |
14 | + } | |
19 | 15 | |
20 | 16 | /** |
21 | - * 构造预警数据 | |
17 | + * 判断是否低于下限 | |
22 | 18 | **/ |
23 | - public MaterialLevelAlarm(MaterialWarning warning, BigDecimal qtySum) { | |
24 | - org.springframework.beans.BeanUtils.copyProperties(warning, this); | |
25 | - this.qtySum = qtySum.intValue(); | |
26 | - if (getLower() > 0) { | |
27 | - inLower = this.qtySum <= getLower(); | |
28 | - } | |
29 | - if (getUpper() > 0) { | |
30 | - inUpper = this.qtySum >= getUpper(); | |
31 | - } | |
19 | + public boolean inLower() { | |
20 | + return this.qtySum <= getLower(); | |
21 | + } | |
32 | 22 | |
33 | - if (getMin() > 0) { | |
34 | - inMin = this.qtySum <= getMin(); | |
35 | - } | |
23 | + /** | |
24 | + * 判断是否高于上限 | |
25 | + **/ | |
26 | + public boolean inUpper(){ | |
27 | + return this.qtySum >= getUpper(); | |
28 | + } | |
36 | 29 | |
37 | - if (getMax() > 0) { | |
38 | - inMax = this.qtySum >= getMax(); | |
39 | - } | |
30 | + /** 判断是否低于最小值 **/ | |
31 | + public boolean inMin(){ | |
32 | + return this.qtySum <= getMin(); | |
33 | + } | |
34 | + | |
35 | + /** 判断是否高于最大值 **/ | |
36 | + public boolean inMax(){ | |
37 | + return this.qtySum >= getMax(); | |
40 | 38 | } |
41 | 39 | |
42 | 40 | /** |
43 | 41 | * 判断是否有预警 |
44 | 42 | **/ |
45 | 43 | public Boolean needAlarm() { |
46 | - return inLower || inUpper || inMin || inMax; | |
44 | + return inLower() || inUpper() || inMin() || inMax(); | |
47 | 45 | } |
48 | 46 | |
49 | 47 | @Override |
50 | 48 | public String toString() { |
51 | 49 | String str = "<ul>"; |
52 | - if (inLower) { | |
50 | + if (inLower()) { | |
53 | 51 | str = str + "<li><b>" + getMaterialName() + "</b> " + getMaterialCode() + " 库存数 <b>" + getQtySum() + "</b> 低于下限预警值<b> " + getLower() + "</b></li>"; |
54 | - } else if (inUpper) { | |
52 | + } else if (inUpper()) { | |
55 | 53 | str = str + "<li><b>" + getMaterialName() + "</b> " + getMaterialCode() + " 库存数 <b>" + getQtySum() + "</b> 高于上限预警值<b> " + getUpper() + "</b></li>"; |
56 | - } else if (inMin) { | |
54 | + } else if (inMin()) { | |
57 | 55 | str = str + "<li><b>" + getMaterialName() + "</b> " + getMaterialCode() + " 库存数 <b>" + getQtySum() + "</b> 低于最低值<b> " + getMin() + "</b></li>"; |
58 | - } else if (inMax) { | |
56 | + } else if (inMax()) { | |
59 | 57 | str = str + "<li><b>" + getMaterialName() + "</b> " + getMaterialCode() + " 库存数 <b>" + getQtySum() + "</b> 超过最高值<b> " + getMax() + "</b></li>"; |
60 | 58 | } |
61 | 59 | return str + "</ul>"; |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryLevel/mapper/InventoryLevelAlarmMapper.java
0 → 100644
1 | +package org.jeecg.modules.wms.inventory.inventoryLevel.mapper; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |
4 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
5 | +import org.apache.ibatis.annotations.Param; | |
6 | +import org.jeecg.modules.wms.inventory.inventoryLevel.entity.InventoryLevelAlarm; | |
7 | + | |
8 | +import java.util.List; | |
9 | + | |
10 | +/** | |
11 | + * @Description: material_level_alarm | |
12 | + * @Author: jeecg-boot | |
13 | + * @Date: 2023-10-30 | |
14 | + * @Version: V1.0 | |
15 | + */ | |
16 | +public interface InventoryLevelAlarmMapper extends BaseMapper<InventoryLevelAlarm> { | |
17 | + IPage<InventoryLevelAlarm> queryLevelAlarm(IPage<InventoryLevelAlarm> page, | |
18 | + @Param("materialCode") String materialCode, | |
19 | + @Param("materialName") String materialName, | |
20 | + @Param("alarmStatus") String alarmStatus); | |
21 | + | |
22 | + List<InventoryLevelAlarm> queryLevelAlarm(@Param("materialCode") String materialCode, | |
23 | + @Param("materialName") String materialName, | |
24 | + @Param("alarmStatus") String alarmStatus); | |
25 | +} | |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryLevel/mapper/xml/InventoryLevelAlarmMapper.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
3 | +<mapper namespace="org.jeecg.modules.wms.inventory.inventoryLevel.mapper.InventoryLevelAlarmMapper"> | |
4 | + | |
5 | + <select id="queryLevelAlarm" | |
6 | + resultType="org.jeecg.modules.wms.inventory.inventoryLevel.entity.InventoryLevelAlarm"> | |
7 | + select t.* from ( | |
8 | + SELECT w.*, sum(qty) as qtySum FROM inventory_detail i inner join material_warning w | |
9 | + on i.material_code = w.material_code | |
10 | + WHERE i.inventory_status='good' and i.material_code IN ( SELECT material_code FROM material_warning | |
11 | + <where> | |
12 | + <if test="materialCode != null and materialCode != ''"> | |
13 | + and material_code = #{materialCode} | |
14 | + </if> | |
15 | + <if test="materialName != null and materialName != ''"> | |
16 | + <bind name="materialNameLike" value="'%'+materialName+'%'"/> | |
17 | + and material_name like #{materialNameLike} | |
18 | + </if> | |
19 | + </where> | |
20 | + ) | |
21 | + group by material_code | |
22 | + ) t | |
23 | + <where> | |
24 | + <if test="alarmStatus != null and alarmStatus == 'noAlarm'"> | |
25 | + and qtySum between lower and upper | |
26 | + </if> | |
27 | + <if test="alarmStatus != null and alarmStatus == 'isAlarm'"> | |
28 | + and qtySum <= lower or qtySum >= upper | |
29 | + </if> | |
30 | + <if test="alarmStatus != null and alarmStatus == 'lowerAlarm'"> | |
31 | + and qtySum <= lower | |
32 | + </if> | |
33 | + <if test="alarmStatus != null and alarmStatus == 'upperAlarm'"> | |
34 | + and qtySum >= upper | |
35 | + </if> | |
36 | + </where> | |
37 | + </select> | |
38 | +</mapper> | |
0 | 39 | \ No newline at end of file |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryLevel/service/IInventoryLevelAlarmService.java
0 → 100644
1 | +package org.jeecg.modules.wms.inventory.inventoryLevel.service; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
4 | +import com.baomidou.mybatisplus.extension.service.IService; | |
5 | +import org.jeecg.modules.wms.config.materialWarning.entity.MaterialWarning; | |
6 | +import org.jeecg.modules.wms.inventory.inventoryLevel.entity.InventoryLevelAlarm; | |
7 | + | |
8 | +import java.util.List; | |
9 | + | |
10 | +/** | |
11 | + * @Description: inventory_level_alarm | |
12 | + * @Author: jeecg-boot | |
13 | + * @Date: 2023-10-30 | |
14 | + * @Version: V1.0 | |
15 | + */ | |
16 | +public interface IInventoryLevelAlarmService extends IService<InventoryLevelAlarm> { | |
17 | + List<InventoryLevelAlarm> getLevelAlarm(String materialCode); | |
18 | + | |
19 | + IPage<InventoryLevelAlarm> queryLevelAlarm(IPage<InventoryLevelAlarm> page, String materialCode, String materialName, String alarmStatus); | |
20 | + | |
21 | +} | |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryLevel/service/impl/InventoryLevelAlarmServiceImpl.java
0 → 100644
1 | +package org.jeecg.modules.wms.inventory.inventoryLevel.service.impl; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
4 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
5 | +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |
6 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
7 | +import org.jeecg.modules.wms.config.materialWarning.entity.MaterialWarning; | |
8 | +import org.jeecg.modules.wms.config.materialWarning.service.impl.MaterialWarningServiceImpl; | |
9 | +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; | |
10 | +import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; | |
11 | +import org.jeecg.modules.wms.inventory.inventoryLevel.entity.InventoryLevelAlarm; | |
12 | +import org.jeecg.modules.wms.inventory.inventoryLevel.mapper.InventoryLevelAlarmMapper; | |
13 | +import org.jeecg.modules.wms.inventory.inventoryLevel.service.IInventoryLevelAlarmService; | |
14 | +import org.jeecg.utils.StringUtils; | |
15 | +import org.jeecg.utils.constant.QuantityConstant; | |
16 | +import org.springframework.stereotype.Service; | |
17 | + | |
18 | +import javax.annotation.Resource; | |
19 | +import java.math.BigDecimal; | |
20 | +import java.util.ArrayList; | |
21 | +import java.util.List; | |
22 | +import java.util.stream.Collectors; | |
23 | + | |
24 | +/** | |
25 | + * @Description: inventory_level_alarm | |
26 | + * @Author: jeecg-boot | |
27 | + * @Date: 2023-10-30 | |
28 | + * @Version: V1.0 | |
29 | + */ | |
30 | +@Service | |
31 | +public class InventoryLevelAlarmServiceImpl extends ServiceImpl<InventoryLevelAlarmMapper, InventoryLevelAlarm> implements IInventoryLevelAlarmService { | |
32 | + | |
33 | + @Resource | |
34 | + InventoryDetailServiceImpl inventoryDetailService; | |
35 | + | |
36 | + @Resource | |
37 | + MaterialWarningServiceImpl materialWarningService; | |
38 | + | |
39 | + @Resource | |
40 | + InventoryLevelAlarmMapper inventoryLevelAlarmMapper; | |
41 | + | |
42 | + @Override | |
43 | + public List<InventoryLevelAlarm> getLevelAlarm(String materialCode) { | |
44 | + List<InventoryLevelAlarm> alarmList = inventoryLevelAlarmMapper.queryLevelAlarm(materialCode,null,"isAlarm"); | |
45 | + | |
46 | + return alarmList; | |
47 | + } | |
48 | + | |
49 | + | |
50 | + @Override | |
51 | + public IPage<InventoryLevelAlarm> queryLevelAlarm(IPage<InventoryLevelAlarm> page, String materialCode, String materialName, String alarmStatus) { | |
52 | + return inventoryLevelAlarmMapper.queryLevelAlarm(page, materialCode, materialName, alarmStatus); | |
53 | + } | |
54 | +} | |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/MaterialLevelAlarmTask.java renamed to huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/InventoryLevelAlarmTask.java
... | ... | @@ -11,14 +11,12 @@ import org.jeecg.modules.system.entity.SysUser; |
11 | 11 | import org.jeecg.modules.system.service.impl.SysAnnouncementServiceImpl; |
12 | 12 | import org.jeecg.modules.system.service.impl.SysRoleServiceImpl; |
13 | 13 | import org.jeecg.modules.system.service.impl.SysUserServiceImpl; |
14 | -import org.jeecg.modules.wms.config.materialWarning.entity.MaterialLevelAlarm; | |
15 | -import org.jeecg.modules.wms.config.materialWarning.service.impl.MaterialWarningServiceImpl; | |
14 | +import org.jeecg.modules.wms.inventory.inventoryLevel.entity.InventoryLevelAlarm; | |
15 | +import org.jeecg.modules.wms.inventory.inventoryLevel.service.impl.InventoryLevelAlarmServiceImpl; | |
16 | 16 | import org.quartz.*; |
17 | -import org.springframework.beans.factory.annotation.Autowired; | |
18 | 17 | import org.springframework.util.CollectionUtils; |
19 | 18 | |
20 | 19 | import javax.annotation.Resource; |
21 | -import java.util.ArrayList; | |
22 | 20 | import java.util.Date; |
23 | 21 | import java.util.List; |
24 | 22 | import java.util.stream.Collectors; |
... | ... | @@ -31,7 +29,7 @@ import java.util.stream.Collectors; |
31 | 29 | @Slf4j |
32 | 30 | @PersistJobDataAfterExecution |
33 | 31 | @DisallowConcurrentExecution |
34 | -public class MaterialLevelAlarmTask implements Job { | |
32 | +public class InventoryLevelAlarmTask implements Job { | |
35 | 33 | private String parameter; |
36 | 34 | |
37 | 35 | @Resource |
... | ... | @@ -43,14 +41,14 @@ public class MaterialLevelAlarmTask implements Job { |
43 | 41 | @Resource |
44 | 42 | private SysRoleServiceImpl sysRoleService; |
45 | 43 | |
46 | - @Autowired | |
44 | + @Resource | |
47 | 45 | private SqlSession sqlSession; |
48 | 46 | |
49 | - @Autowired | |
47 | + @Resource | |
50 | 48 | private SysAnnouncementServiceImpl sysAnnouncementService; |
51 | 49 | |
52 | - @Autowired | |
53 | - private MaterialWarningServiceImpl materialWarningService; | |
50 | + @Resource | |
51 | + private InventoryLevelAlarmServiceImpl inventoryLevelAlarmService; | |
54 | 52 | |
55 | 53 | public void setParameter(String parameter) { |
56 | 54 | this.parameter = parameter; |
... | ... | @@ -60,13 +58,15 @@ public class MaterialLevelAlarmTask implements Job { |
60 | 58 | public void execute(JobExecutionContext context) throws JobExecutionException { |
61 | 59 | log.info(StrUtil.format("定时任务 MaterialLevelAlarmTask 参数:{},执行时间:{}", this.parameter, DateUtils.getTimestamp())); |
62 | 60 | |
63 | - List<MaterialLevelAlarm> alarmList = materialWarningService.getLevelAlarm(null); | |
61 | + List<InventoryLevelAlarm> alarmList = inventoryLevelAlarmService.getLevelAlarm(null); | |
64 | 62 | if (CollectionUtils.isEmpty(alarmList)) { |
65 | 63 | return; |
66 | 64 | } |
67 | 65 | |
68 | - List<String> list = alarmList.stream().map(MaterialLevelAlarm::toString).collect(Collectors.toList()); | |
66 | + List<String> list = alarmList.stream().map(InventoryLevelAlarm::toString).collect(Collectors.toList()); | |
69 | 67 | String msg = String.join("\n", list); |
68 | + msg = msg + "<a href='/wms/#/system/inventory/inventoryLevel'>库存水位详情</a> " + | |
69 | + "<a href='/wms/#/system/config/MaterialWarningList'>预警配置</a>"; | |
70 | 70 | |
71 | 71 | List<SysUser> userList; |
72 | 72 | try { |
... | ... | @@ -75,7 +75,7 @@ public class MaterialLevelAlarmTask implements Job { |
75 | 75 | if (userList.size() == 0) { |
76 | 76 | userList = null; |
77 | 77 | } |
78 | - sysAnnouncementService.quickAnnouncementToUser(userList, "物料水位预警", msg, DateUtil.offsetDay(new Date(), 1), "H"); | |
78 | + sysAnnouncementService.quickAnnouncementToUser(userList, "库存水位预警", msg, DateUtil.offsetDay(new Date(), 1), "H"); | |
79 | 79 | } catch (Exception e) { |
80 | 80 | log.error("获取预警通知用户出错", e); |
81 | 81 | } |
... | ... |