diff --git a/ant-design-vue-jeecg/src/views/system/report/InventoryClassificationDetail.vue b/ant-design-vue-jeecg/src/views/system/report/InventoryClassificationDetail.vue new file mode 100644 index 0000000..12c78b9 --- /dev/null +++ b/ant-design-vue-jeecg/src/views/system/report/InventoryClassificationDetail.vue @@ -0,0 +1,165 @@ +<template> + <a-card :bordered="false" :class="'cust-erp-sub-tab'"> + <!-- 操作按钮区域 --> + <!-- <div class="table-operator" v-if="mainId"> + <a-button type="primary" icon="download" @click="handleExportXls('库存分类报表详情')">导出</a-button> + </div>--> + + <!-- table区域-begin --> + <div> + <a-table + ref="table" + size="middle" + bordered + :rowKey="(record,index) => {return record.zoneCode + '_' + record.materialCode + '_' + record.materialSpec + '_' + record.materialUnit}" + class="j-table-force-nowrap" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange"> + + <span slot="inventoryStatus_dictText" slot-scope="inventoryStatus_dictText"> + <a-tag :key="inventoryStatus_dictText" :color="getStatusColor(inventoryStatus_dictText)"> + {{ inventoryStatus_dictText }} + </a-tag> + </span> + + <span slot="companyCode" slot-scope="companyCode"> + <a-tag :key="companyCode" color="blue"> + {{ solutionCompany(companyCode) }} + </a-tag> + </span> + + <span slot="zoneCode" slot-scope="zoneCode"> + <a-tag :key="zoneCode" color="blue"> + {{ solutionZoneCode(zoneCode) }} + </a-tag> + </span> + </a-table> + </div> + + <inventoryDetail-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></inventoryDetail-modal> + </a-card> +</template> + +<script> + +import {JeecgListMixin} from '@/mixins/JeecgListMixin' +import InventoryDetailModal from '@views/system/inventory/modules/InventoryDetailModal' +import {getCompanyList} from '@/api/api' + +export default { + name: 'InventoryClassificationDetail', + mixins: [JeecgListMixin], + components: {InventoryDetailModal}, + props: { + mainId: { + type: String, + default: '', + required: false + } + }, + watch: { + mainId: { + immediate: true, + handler(val) { + if (!this.mainId) { + this.clearList() + } else { + this.queryParam['materialTypeCode'] = val.split("_")[0]; + this.loadData(1) + } + } + } + }, + data() { + return { + description: '库存分类报表详情页面', + disableMixinCreated: true, + companyList: [], + zoneList: [], + // 表头 + columns: [ + { + title: '物料编码', + align: "center", + dataIndex: 'materialCode' + }, + { + title: '物料名称', + align: "center", + dataIndex: 'materialName' + }, + { + title: '物料规格', + align: "center", + dataIndex: 'materialSpec' + }, + { + title: '物料单位', + align: "center", + dataIndex: 'materialUnit' + }, + { + title: '库存总数量', + align: "center", + dataIndex: 'qty' + } + ], + url: { + list: '/report/listInventoryClassificationDetail', + }, + dictOptions: { + containerStatus: [] + } + } + }, + created() { + this.loadFrom(); + }, + computed: { + importExcelUrl() { + return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}` + } + }, + methods: { + getStatusColor(status) { + const colors = { + '良品': 'green', + '报废品': 'purple', + '待确认 ': 'grey', + '次品': 'red', + default: 'blue' + }; + return colors[status] || colors.default; + }, + loadFrom() { + getCompanyList().then(res => { + if (res.success) { + this.companyList = res.result + } + }) + }, + solutionCompany(value) { + let actions = [] + Object.keys(this.companyList).some(key => { + if (this.companyList[key].code === '' + value) { + actions.push(this.companyList[key].name) + return true + } + }) + return actions.join('') + }, + clearList() { + this.dataSource = [] + this.selectedRowKeys = [] + this.ipagination.current = 1 + } + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> diff --git a/ant-design-vue-jeecg/src/views/system/report/ReportInventoryClassificationList.vue b/ant-design-vue-jeecg/src/views/system/report/ReportInventoryClassificationList.vue index 445569b..768ef96 100644 --- a/ant-design-vue-jeecg/src/views/system/report/ReportInventoryClassificationList.vue +++ b/ant-design-vue-jeecg/src/views/system/report/ReportInventoryClassificationList.vue @@ -5,17 +5,17 @@ <a-form layout="inline" @keyup.enter.native="searchQuery"> <a-row :gutter="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="物料类别"> - <a-select - show-search - placeholder="请选择物料类别" - option-filter-prop="children" - v-model="queryParam.materialTypeCode"> - <a-select-option v-for="item in materialTypeList" :key="item.code" :value="item.code"> - {{ item.code }} {{ item.name }} - </a-select-option> - </a-select> - </a-form-item> + <a-form-item label="物料类别"> + <a-select + show-search + placeholder="请选择物料类别" + option-filter-prop="children" + v-model="queryParam.materialTypeCode"> + <a-select-option v-for="item in materialTypeList" :key="item.code" :value="item.code"> + {{ item.code }} {{ item.name }} + </a-select-option> + </a-select> + </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> @@ -34,12 +34,14 @@ size="middle" :scroll="{x:true}" bordered - rowKey="id" + rowKey="materialTypeCode" :columns="columns" :dataSource="dataSource" :pagination="ipagination" :loading="loading" class="j-table-force-nowrap" + :customRow="clickThenSelect" + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio' }" @change="handleTableChange"> <span slot="zoneCode" slot-scope="zoneCode"> @@ -52,6 +54,12 @@ </template> </a-table> </div> + + <a-tabs defaultActiveKey="1"> + <a-tab-pane tab="库存分类详情" key="1"> + <InventoryClassificationDetail :mainId="selectedMainId"/> + </a-tab-pane> + </a-tabs> </a-card> </template> @@ -61,14 +69,16 @@ import '@/assets/less/TableExpand.less' import {mixinDevice} from '@/utils/mixin' import {JeecgListMixin} from '@/mixins/JeecgListMixin' import {getMaterialTypeList, getZoneList} from '@/api/api' +import InventoryClassificationDetail from "./InventoryClassificationDetail"; export default { name: 'ReportInventoryClassificationList', mixins: [JeecgListMixin, mixinDevice], - components: {}, + components: {InventoryClassificationDetail}, data() { return { description: '库存分类报表页面', + selectedMainId: '', zoneList: [], zoneOptions: [], materialTypeList: [], @@ -130,6 +140,15 @@ export default { }, }, methods: { + searchQuery() { + this.loadData(1); + this.onClearSelected(); + }, + searchReset() { + this.queryParam = {} + this.loadData(1); + this.onClearSelected(); + }, loadFrom() { getMaterialTypeList().then((res) => { if (res.success) { @@ -159,7 +178,26 @@ export default { } }) return actions.join('') - } + }, + clickThenSelect(record) { + return { + on: { + click: () => { + this.onSelectChange(record.materialTypeCode.split(','), [record]) + } + } + } + }, + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedMainId = selectionRows[0].materialTypeCode + this.selectedRowKeys = selectedRowKeys + this.selectionRows = selectionRows + }, + onClearSelected() { + this.selectedMainId = '' + this.selectedRowKeys = [] + this.selectionRows = [] + }, } } </script> diff --git a/ant-design-vue-jeecg/src/views/system/report/ReportInventoryDailyList.vue b/ant-design-vue-jeecg/src/views/system/report/ReportInventoryDailyList.vue index 0b7dab9..1623a5d 100644 --- a/ant-design-vue-jeecg/src/views/system/report/ReportInventoryDailyList.vue +++ b/ant-design-vue-jeecg/src/views/system/report/ReportInventoryDailyList.vue @@ -71,7 +71,6 @@ </template> </a-table> </div> - <inventory-transaction-modal ref="modalForm" @ok="modalFormOk"></inventory-transaction-modal> </a-card> </template> diff --git a/ant-design-vue-jeecg/src/views/system/report/ReportPerformanceAssessmentList.vue b/ant-design-vue-jeecg/src/views/system/report/ReportPerformanceAssessmentList.vue index a98aa87..b5ef4b9 100644 --- a/ant-design-vue-jeecg/src/views/system/report/ReportPerformanceAssessmentList.vue +++ b/ant-design-vue-jeecg/src/views/system/report/ReportPerformanceAssessmentList.vue @@ -26,7 +26,7 @@ size="middle" :scroll="{x:true}" bordered - rowKey="id" + rowKey="userName" :columns="columns" :dataSource="dataSource" :pagination="ipagination" @@ -55,12 +55,12 @@ import {JeecgListMixin} from '@/mixins/JeecgListMixin' import {getMaterialTypeList, getZoneList} from '@/api/api' export default { - name: 'ReportInventoryClassificationList', + name: 'ReportPerformanceAssessmentList', mixins: [JeecgListMixin, mixinDevice], components: {}, data() { return { - description: '库存分类报表页面', + description: '绩效考核报表页面', zoneList: [], zoneOptions: [], materialTypeList: [], diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/InventoryDetailMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/InventoryDetailMapper.java index aee2119..7ad4e47 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/InventoryDetailMapper.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/InventoryDetailMapper.java @@ -25,4 +25,11 @@ public interface InventoryDetailMapper extends BaseMapper<InventoryDetail> { * @return 库存分类报表信息 */ List<ReportInventoryClassificationDto> selectReportClassification(@Param("materialTypeCode") String materialTypeCode); + + /** + * 根据物料类别查询库存详情 + * @param materialTypeCode 物料类别编码 + * @return 库存详情信息 + */ + List<InventoryDetail> selectByMaterialTypeCode(String materialTypeCode); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/xml/InventoryDetailMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/xml/InventoryDetailMapper.xml index af717b1..1badcc7 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/xml/InventoryDetailMapper.xml +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/xml/InventoryDetailMapper.xml @@ -29,4 +29,21 @@ </if> GROUP BY type </select> + + <select id="selectByMaterialTypeCode" + resultType="org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail"> + SELECT + inventory_detail.material_code, + inventory_detail.material_name, + inventory_detail.material_unit, + inventory_detail.material_spec, + SUM( qty ) AS qty + FROM inventory_detail + INNER JOIN material ON material.code = inventory_detail.material_code + <if test="materialTypeCode != null and materialTypeCode !=''"> + and material.type = #{materialTypeCode} + </if> + INNER JOIN material_type ON material_type.code = material.type + GROUP BY inventory_detail.material_code + </select> </mapper> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java index 4319517..e0201c2 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java @@ -140,4 +140,12 @@ public interface IInventoryDetailService extends IService<InventoryDetail> { * @return 库存分类报表信息 */ List<ReportInventoryClassificationDto> getInventoryClassifyReport(String materialTypeCode); + + /** + * 库存分类详情报表查询 + * + * @param materialTypeCode 物料类别编码 + * @return 库存分类报表信息 + */ + List<InventoryDetail> getByMaterialTypeCode(String materialTypeCode); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java index a6c4520..f561b41 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java @@ -11,6 +11,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; +import cn.hutool.core.util.StrUtil; import org.jeecg.common.api.vo.Result; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.modules.wms.config.container.entity.Container; @@ -495,4 +496,9 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe public List<ReportInventoryClassificationDto> getInventoryClassifyReport(String materialTypeCode) { return super.baseMapper.selectReportClassification(materialTypeCode); } + + @Override + public List<InventoryDetail> getByMaterialTypeCode(String materialTypeCode) { + return super.baseMapper.selectByMaterialTypeCode(materialTypeCode); + } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/controller/ReportController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/controller/ReportController.java index 4a36be7..20d756d 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/controller/ReportController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/controller/ReportController.java @@ -36,6 +36,7 @@ import org.jeecg.modules.wms.report.dto.ReportInventoryClassificationDto; import org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto; import org.jeecg.modules.wms.stocktaking.cycleCountDetail.service.ICycleCountDetailChildService; import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; +import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskHeaderHistoryService; import org.jeecg.utils.HuahengJwtUtil; import org.jeecg.utils.StringUtils; import org.jeecg.utils.constant.QuantityConstant; @@ -67,7 +68,7 @@ public class ReportController extends JeecgController<InventoryTransaction, IInv @Resource private IMaterialService materialService; @Resource - private ITaskHeaderService taskHeaderService; + private ITaskHeaderHistoryService taskHeaderHistoryService; @Resource private ILocationService locationService; @Resource @@ -225,12 +226,24 @@ public class ReportController extends JeecgController<InventoryTransaction, IInv } /** + * 库存分类报表列表详情查询 + */ + @GetMapping(value = "/listInventoryClassificationDetail") + public Result listInventoryClassificationDetail(String materialTypeCode, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + List<InventoryDetail> inventoryClassifyReportList = inventoryDetailService.getByMaterialTypeCode(materialTypeCode); + Page<InventoryDetail> page = new Page<>(pageNo, pageSize); + page.setRecords(inventoryClassifyReportList); + return Result.OK(page); + } + + /** * 绩效考核报表列表查询 */ @GetMapping(value = "/listPerformanceAssessment") public Result listPerformanceAssessment(String realName, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { - List<ReportPerformanceAssessmentDto> performanceAssessmentReportList = taskHeaderService.getPerformanceAssessmentReport(realName); + List<ReportPerformanceAssessmentDto> performanceAssessmentReportList = taskHeaderHistoryService.getPerformanceAssessmentReport(realName); Page<ReportPerformanceAssessmentDto> page = new Page<>(pageNo, pageSize); page.setRecords(performanceAssessmentReportList); return Result.OK(page); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/dto/ReportPerformanceAssessmentDto.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/dto/ReportPerformanceAssessmentDto.java index b0d347e..8c43203 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/dto/ReportPerformanceAssessmentDto.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/dto/ReportPerformanceAssessmentDto.java @@ -16,7 +16,7 @@ public class ReportPerformanceAssessmentDto implements Serializable { private String realName; /** - * 任务总数 + * 任务总数(只包含入库类型与出库类的) */ private Integer sumTaskQty; diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/TaskHeaderMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/TaskHeaderMapper.java index 65a188a..a6a02ff 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/TaskHeaderMapper.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/TaskHeaderMapper.java @@ -15,10 +15,4 @@ import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; */ public interface TaskHeaderMapper extends BaseMapper<TaskHeader> { - /** - * 绩效考核报表查询 - * @param realName 用户姓名 - * @return 绩效考核报表信息 - */ - List<ReportPerformanceAssessmentDto> selectPerformanceAssessment(@Param("realName") String realName); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/xml/TaskHeaderMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/xml/TaskHeaderMapper.xml index 50e418f..d8179cd 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/xml/TaskHeaderMapper.xml +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/xml/TaskHeaderMapper.xml @@ -2,18 +2,4 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.wms.task.taskHeader.mapper.TaskHeaderMapper"> - <select id="selectPerformanceAssessment" - resultType="org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto"> - SELECT sys_user.realname, - COUNT(task_header.create_by) AS sumTaskQty, - COUNT(IF((task_header.task_type = 100 OR task_header.task_type = 200 OR task_header.task_type = 500), task_header.create_by, NULL)) AS receiptTaskQty, - COUNT(IF((task_header.task_type = 300 OR task_header.task_type = 400 OR task_header.task_type = 600), task_header.create_by, NULL)) AS shipmentTaskQty - FROM sys_user - LEFT JOIN task_header ON sys_user.realname = task_header.create_by - <if test="realName != null and realName != ''"> - <bind name="realName" value="'%' + realName + '%'"/> - WHERE sys_user.realname LIKE #{realName} - </if> - GROUP BY sys_user.realname - </select> </mapper> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java index dbd0078..c1e7fe4 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java @@ -454,11 +454,4 @@ public interface ITaskHeaderService extends IService<TaskHeader> { List<String> findCommonData(List<String> dataList1, List<String> dataList2, boolean flag); boolean delMain (Integer id); - - /** - * 绩效考核报表查询 - * @param realName 用户姓名 - * @return 绩效考核报表信息 - */ - List<ReportPerformanceAssessmentDto> getPerformanceAssessmentReport(String realName); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java index 03df444..36b1163 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java @@ -1,12 +1,16 @@ package org.jeecg.modules.wms.task.taskHeader.service.impl; -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.*; -import java.util.stream.Collectors; - -import javax.annotation.Resource; - +import cn.hutool.core.collection.ListUtil; +import cn.monitor4all.logRecord.annotation.OperationLog; +import cn.monitor4all.logRecord.context.LogRecordContext; +import com.alibaba.fastjson.JSON; +import com.aliyun.oss.ServiceException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.modules.wms.api.wcs.service.LocationAllocationService; @@ -75,23 +79,17 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.alibaba.fastjson.JSON; -import com.aliyun.oss.ServiceException; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - -import cn.monitor4all.logRecord.annotation.OperationLog; -import cn.monitor4all.logRecord.context.LogRecordContext; -import lombok.extern.slf4j.Slf4j; +import javax.annotation.Resource; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 任务表 - * @Author: jeecg-boot - * @Date: 2022-11-10 - * @Version: V1.0 + * @Author: jeecg-boot + * @Date: 2022-11-10 + * @Version: V1.0 */ @Slf4j @Service @@ -217,7 +215,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 如果库位是锁定的,那么这个库位一定是被某个任务占用。 - * @param location + * + * @param location * @return */ @Override @@ -324,11 +323,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_TRANSFER, containerCode, fromLocationCode, toLocationCode, - warehouseCode); + warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } - TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); + TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult(); String zoneCode = taskLockEntity.getZoneCode(); // 4. 判断源库位旁边有托盘但是没有任务,那么不允许移库 TaskHeader taskHeader = new TaskHeader(); @@ -396,11 +395,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea toLocationCode = fromLocationCode; } Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_CHECK_OUT, containerCode, fromLocationCode, toLocationCode, - warehouseCode); + warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } - TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); + TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult(); String zoneCode = taskLockEntity.getZoneCode(); Port port = portService.getPortByCode(toPortCode, zoneCode, warehouseCode); if (port == null) { @@ -458,11 +457,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea toLocationCode = fromLocationCode; } Result result = - taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_QUALITY, containerCode, fromLocationCode, toLocationCode, warehouseCode); + taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_QUALITY, containerCode, fromLocationCode, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } - TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); + TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult(); String zoneCode = taskLockEntity.getZoneCode(); Port port = portService.getPortByCode(toPortCode, QuantityConstant.PORT_TYPE_PICK, zoneCode, warehouseCode); if (port == null) { @@ -486,7 +485,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getContainerCode, containerCode).eq(InventoryDetail::getWarehouseCode, warehouseCode) - .eq(InventoryDetail::getLocationCode, fromLocationCode); + .eq(InventoryDetail::getLocationCode, fromLocationCode); List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); List<TaskDetail> taskDetailList = new ArrayList<>(); if (inventoryDetailList.size() != 0) { @@ -545,7 +544,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.error("创建跨站任务时,起始站台和目标站台不能相同"); } Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_OVER_STATION, containerCode, QuantityConstant.EMPTY_STRING, - QuantityConstant.EMPTY_STRING, warehouseCode); + QuantityConstant.EMPTY_STRING, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -621,7 +620,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea int high = locationHigh.getHigh(); boolean bypass = false; String toLocationCode = - allocationService.allocation(allocationRule, locationTypeCodeList, high, zoneCode, roadWays, warehouseCode, containerCode, null, null, bypass); + allocationService.allocation(allocationRule, locationTypeCodeList, high, zoneCode, roadWays, warehouseCode, containerCode, null, null, bypass); if (StringUtils.isEmpty(toLocationCode)) { throw new JeecgBootException("创建空托盘组入库任务时,目标库位为空"); } @@ -643,11 +642,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } log.info("开始创建空托盘组入库任务,容器编码" + containerCode + ",库位编码" + toLocationCode); Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT, containerCode, - QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode); + QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } - TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); + TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult(); String zoneCode = taskLockEntity.getZoneCode(); TaskHeader taskHeader = new TaskHeader(); taskHeader.setWarehouseCode(warehouseCode); @@ -680,11 +679,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.error("创建空托盘组出库任务时,仓库编码为空"); } Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT, containerCode, - QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode); + QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } - TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); + TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult(); String zoneCode = taskLockEntity.getZoneCode(); Container container = containerService.getContainerByCode(containerCode, warehouseCode); String fromLocationCode = container.getLocationCode(); @@ -757,13 +756,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } // 5、删除容器上的库位编码,并设置状态为空闲,填充度状态为空盘 boolean success = containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY, - QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, warehouseCode); + QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, warehouseCode); if (!success) { throw new JeecgBootException("处理空出失败, 更新容器状态失败"); } // 6、删除库位上的容器编码,并设置状态为空闲 success = - locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); + locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); if (!success) { throw new JeecgBootException("处理空出失败, 更新库位状态失败"); } @@ -778,7 +777,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea // 8、删除库存详情失败 List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode); if (inventoryDetailList.size() != 0) { - List<Integer> idList = inventoryDetailList.stream().map(InventoryDetail::getId).collect(Collectors.toList());; + List<Integer> idList = inventoryDetailList.stream().map(InventoryDetail::getId).collect(Collectors.toList()); + ; success = inventoryDetailService.removeByIds(idList); if (!success) { throw new JeecgBootException("处理空出失败, 删除库存详情失败"); @@ -837,7 +837,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } } - ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(taskHeader.getReceiptContainerHeaderId());; + ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(taskHeader.getReceiptContainerHeaderId()); + ; if (receiptContainerHeader != null) { success = receiptContainerHeaderService.updateStatusById(QuantityConstant.RECEIPT_CONTAINER_FINISHED, receiptContainerHeader.getId()); if (!success) { @@ -983,7 +984,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea public TaskHeader getUnCompleteTaskByFromLocationCode(String fromLocationCode, String warehouseCode) { LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); taskHeaderLambdaQueryWrapper.eq(TaskHeader::getFromLocationCode, fromLocationCode).eq(TaskHeader::getWarehouseCode, warehouseCode).lt(TaskHeader::getStatus, - QuantityConstant.TASK_STATUS_COMPLETED); + QuantityConstant.TASK_STATUS_COMPLETED); TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper); return taskHeader; } @@ -992,7 +993,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea public TaskHeader getUnCompleteTaskByToLocationCode(String toLocationCode, String warehouseCode) { LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); taskHeaderLambdaQueryWrapper.eq(TaskHeader::getToLocationCode, toLocationCode).eq(TaskHeader::getWarehouseCode, warehouseCode).lt(TaskHeader::getStatus, - QuantityConstant.TASK_STATUS_COMPLETED); + QuantityConstant.TASK_STATUS_COMPLETED); TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper); return taskHeader; } @@ -1010,7 +1011,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea public TaskHeader getUnCompleteTaskByContainerCode(String containerCode, String warehouseCode) { LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); taskHeaderLambdaQueryWrapper.eq(TaskHeader::getContainerCode, containerCode).eq(TaskHeader::getWarehouseCode, warehouseCode).lt(TaskHeader::getStatus, - QuantityConstant.TASK_STATUS_COMPLETED); + QuantityConstant.TASK_STATUS_COMPLETED); TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper); return taskHeader; } @@ -1019,7 +1020,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea public TaskHeader getUnCompleteTaskByPreTaskNo(int preTaskNo, String warehouseCode) { LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); taskHeaderLambdaQueryWrapper.eq(TaskHeader::getPreTaskNo, preTaskNo).eq(TaskHeader::getWarehouseCode, warehouseCode).lt(TaskHeader::getStatus, - QuantityConstant.TASK_STATUS_COMPLETED); + QuantityConstant.TASK_STATUS_COMPLETED); TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper); return taskHeader; } @@ -1215,9 +1216,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea * 创建空托盘入库 * 1. 判断托盘号、库位编码是否满足要求 * 2. 创建任务,锁定容器、库位 - * @param containerCode - * @param toLocationCode - * @param warehouseCode + * + * @param containerCode + * @param toLocationCode + * @param warehouseCode * @return */ @Override @@ -1243,7 +1245,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_EMPTYRECEIPT, containerCode, QuantityConstant.EMPTY_STRING, - toLocationCode, warehouseCode); + toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -1274,9 +1276,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 创建空托盘出库 - * @param containerCode - * @param toPortCode - * @param warehouseCode + * + * @param containerCode + * @param toPortCode + * @param warehouseCode * @return */ @Override @@ -1295,11 +1298,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea Container container = containerService.getContainerByCode(containerCode, warehouseCode); String fromLocationCode = container.getLocationCode(); Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT, containerCode, QuantityConstant.EMPTY_STRING, - QuantityConstant.EMPTY_STRING, warehouseCode); + QuantityConstant.EMPTY_STRING, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } - TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); + TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult(); String zoneCode = taskLockEntity.getZoneCode(); Port port = portService.getPortByCode(toPortCode, zoneCode, warehouseCode); if (port == null) { @@ -1339,8 +1342,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery(); containerLambdaQueryWrapper.eq(Container::getStatus, QuantityConstant.STATUS_CONTAINER_EMPTY).ne(Container::getLocationCode, QuantityConstant.EMPTY_STRING) - .eq(Container::getFillStatus, QuantityConstant.STATUS_CONTAINER_FILL_EMPTY).eq(Container::getWarehouseCode, warehouseCode) - .orderByAsc(Container::getUpdateTime); + .eq(Container::getFillStatus, QuantityConstant.STATUS_CONTAINER_FILL_EMPTY).eq(Container::getWarehouseCode, warehouseCode) + .orderByAsc(Container::getUpdateTime); List<Container> containerList = containerService.list(containerLambdaQueryWrapper); List<Container> removeContainerList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(containerList)) { @@ -1372,16 +1375,17 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 完成入库任务 - * @param taskHeader 任务 - * @return AjaxResult 完成入库任务结果 + * + * @param taskHeader 任务 + * @return AjaxResult 完成入库任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @OperationLog(bizId = "''", bizType = "'任务追踪'", tag = "'入库任务完成'", extra = "#extraJsonString1", - msg = "#taskHeader == null ? '' : '任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()", - recordReturnValue = true) + msg = "#taskHeader == null ? '' : '任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()", + recordReturnValue = true) @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'入库任务完成'", extra = "#extraJsonString1", - msg = "'任务ID:' + #taskHeader.getId() + ',库位编码:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()", recordReturnValue = true) + msg = "'任务ID:' + #taskHeader.getId() + ',库位编码:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()", recordReturnValue = true) @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'详情入库完成'", extra = "#extraJsonString2", msg = "''", recordReturnValue = true) public Result completeReceiptTask(TaskHeader taskHeader) { if (taskHeader == null) { @@ -1403,7 +1407,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea int allow = parameterConfigurationService.getValueIntByCode(QuantityConstant.RULE_CALL_BOX_ALLOW_EMPTY); if (allow == QuantityConstant.RULE_ALLOW_EMPTY) { Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), taskType, containerCode, - fromLocationCode, toLocationCode, warehouseCode); + fromLocationCode, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -1548,7 +1552,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), taskType, containerCode, fromLocationCode, - toLocationCode, warehouseCode); + toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -1566,17 +1570,18 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 完成出库任务 - * @param taskHeader 任务 - * @return result 完成出库任务 + * + * @param taskHeader 任务 + * @return result 完成出库任务 */ @Override @Transactional(rollbackFor = Exception.class) @OperationLog(bizId = "''", bizType = "'任务追踪'", tag = "'出库任务完成'", extra = "#extraJsonString1", - msg = "#taskHeader == null ? '' : '任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()", - recordReturnValue = true) + msg = "#taskHeader == null ? '' : '任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()", + recordReturnValue = true) @OperationLog(bizId = "''", bizType = "'出库单追踪'", tag = "'出库任务完成'", extra = "#extraJsonString1", - msg = "'任务ID:' + #taskHeader.getId() + ',库位编码:' + #taskHeader.getFromLocationCode() + ',容器编码:' + #taskHeader.getContainerCode() + ',目标出入口:' + #taskHeader.getToPortCode()", - recordReturnValue = true) + msg = "'任务ID:' + #taskHeader.getId() + ',库位编码:' + #taskHeader.getFromLocationCode() + ',容器编码:' + #taskHeader.getContainerCode() + ',目标出入口:' + #taskHeader.getToPortCode()", + recordReturnValue = true) @OperationLog(bizId = "''", bizType = "'出库单追踪'", tag = "'详情出库完成'", extra = "#extraJsonString2", msg = "''", recordReturnValue = true) public Result completeShipmentTask(TaskHeader taskHeader) { if (taskHeader == null) { @@ -1614,7 +1619,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("完成出库任务,更新出库组盘头失败"); } List<ShipmentContainerAdvice> shipmentContainerAdviceList = - shipmentContainerAdviceService.getShipmentContainerAdviceListByShipmentContainerId(shipmentContainerHeader.getId()); + shipmentContainerAdviceService.getShipmentContainerAdviceListByShipmentContainerId(shipmentContainerHeader.getId()); for (ShipmentContainerAdvice shipmentContainerAdvice : shipmentContainerAdviceList) { if (!shipmentContainerAdviceService.updateStatusById(QuantityConstant.SHIPMENT_CONTAINER_FINISHED, shipmentContainerAdvice.getId())) { throw new JeecgBootException("完成出库任务,更新出库预配盘失败"); @@ -1638,7 +1643,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), taskType, containerCode, - fromLocationCode, toLocationCode, warehouseCode); + fromLocationCode, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -1809,7 +1814,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), taskType, containerCode, fromLocationCode, - toLocationCode, warehouseCode); + toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -1885,8 +1890,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea InventoryDetail inventoryDetail1 = inventoryDetailList.get(i); InventoryDetail inventoryDetail2 = inventoryDetailList.get(j); if (inventoryDetail1.getMaterialCode().equals(inventoryDetail2.getMaterialCode()) && inventoryDetail1.getBatch().equals(inventoryDetail2.getBatch()) - && inventoryDetail1.getLot().equals(inventoryDetail2.getLot()) && inventoryDetail1.getProject().equals(inventoryDetail2.getProject()) - && inventoryDetail1.getInventoryStatus().equals(inventoryDetail2.getInventoryStatus())) { + && inventoryDetail1.getLot().equals(inventoryDetail2.getLot()) && inventoryDetail1.getProject().equals(inventoryDetail2.getProject()) + && inventoryDetail1.getInventoryStatus().equals(inventoryDetail2.getInventoryStatus())) { // 属性一样的库存,相加合并。 if (StringUtils.isNotEmpty(inventoryDetail1.getSn())) { if (!inventoryDetail1.getSn().equals(inventoryDetail2.getSn())) { @@ -1931,6 +1936,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 锁定容器和库位分4种情况,入库任务、出库任务、分拣任务、换站任务 + * * @param */ @Override @@ -2147,7 +2153,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Override @Transactional(rollbackFor = Exception.class) public Result completeTaskUnLockContainerAndLocation(String containerFillStatus, int taskType, String containerCode, String fromLocationCode, - String toLocationCode, String warehouseCode) { + String toLocationCode, String warehouseCode) { boolean success = false; if (StringUtils.isEmpty(containerCode)) { return Result.error("任务类型" + taskType + "完成任务时, 容器编码为空"); @@ -2193,7 +2199,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea break; case QuantityConstant.TASK_TYPE_OVER_STATION: success = containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY, - warehouseCode); + warehouseCode); break; } if (!success) { @@ -2205,7 +2211,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.error("任务类型" + taskType + "完成任务时," + toLocationCode + "目标库位不存在"); } success = - locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); + locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); if (!success) { throw new JeecgBootException("任务类型" + taskType + "完成任务时,更新源库位失败"); } @@ -2356,7 +2362,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } - TaskHeader taskHeader = (TaskHeader)result.getResult(); + TaskHeader taskHeader = (TaskHeader) result.getResult(); if (taskHeader.getTaskType() == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) { if (port == null) { throw new JeecgBootException("快速入库, 生成补充任务时必须有入库口"); @@ -2426,7 +2432,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea shipmentDetailList.add(shipmentDetail); shipmentQtyList.add(qty); List<InventoryDetail> inventoryDetailList = - inventoryDetailService.getInventoryDetailListByMaterialCodeToShipment(materialCode, zoneCode, qty, warehouseCode); + inventoryDetailService.getInventoryDetailListByMaterialCodeToShipment(materialCode, zoneCode, qty, warehouseCode); List<InventoryDetail> removeInventoryDetailList = new ArrayList<>(); for (InventoryDetail inventoryDetail : inventoryDetailList) { if (roadWay.intValue() == inventoryDetail.getRoadWay().intValue()) { @@ -2462,7 +2468,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea ShipmentDetail shipmentDetail = shipmentDetailService.getById(shipmentDetailId); BigDecimal shipQty = shipmentQtyList.get(i); InventoryDetail inventoryDetail = - inventoryDetailService.getInventoryDetailByMaterialCodeToShipment(switchContainerCode, shipmentDetail.getMaterialCode(), shipQty, warehouseCode); + inventoryDetailService.getInventoryDetailByMaterialCodeToShipment(switchContainerCode, shipmentDetail.getMaterialCode(), shipQty, warehouseCode); CombinationModel combinationModel = new CombinationModel(); combinationModel.setShipmentDetail(shipmentDetail); combinationModel.setInventoryDetail(inventoryDetail); @@ -2555,8 +2561,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 完成空托盘入库任务 - * @param taskHeader 任务 - * @return Result 完成入库任务结果 + * + * @param taskHeader 任务 + * @return Result 完成入库任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @@ -2575,7 +2582,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.error("完成空托盘入库任务时, 目标库位编码为空"); } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_EMPTYRECEIPT, - containerCode, QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode); + containerCode, QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -2590,7 +2597,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 盘点完成 * 盘点有差异完成时状态为105 - * @param taskHeader + * + * @param taskHeader * @return */ @Override @@ -2870,7 +2878,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea cycleCountHeaderService.updataHeaderStatus(cycleCountDetail.getCycleCountHeadCode()); Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_CHECK_OUT, - containerCode, fromLocationCode, toLocationCode, warehouseCode); + containerCode, fromLocationCode, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -2884,8 +2892,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 完成空托盘出库任务 - * @param taskHeader 任务 - * @return Result 完成出库任务结果 + * + * @param taskHeader 任务 + * @return Result 完成出库任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @@ -2921,7 +2930,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.error("完成空托盘出库任务时," + toPortCode + "目标出库口不存在"); } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_EMPTYSHIPMENT, - containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode); + containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -2935,8 +2944,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 完成移库任务 - * @param taskHeader 任务 - * @return Result 完成移库任务结果 + * + * @param taskHeader 任务 + * @return Result 完成移库任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @@ -2963,7 +2973,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea List<InventoryTransaction> inventoryTransactionList = new ArrayList<>(); LambdaUpdateWrapper<InventoryDetail> inventoryDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); inventoryDetailLambdaUpdateWrapper.eq(InventoryDetail::getWarehouseCode, warehouseCode).eq(InventoryDetail::getContainerCode, containerCode) - .eq(InventoryDetail::getLocationCode, fromLocationCode); + .eq(InventoryDetail::getLocationCode, fromLocationCode); List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaUpdateWrapper); for (InventoryDetail inventoryDetail : inventoryDetailList) { inventoryDetail.setLocationCode(toLocationCode); @@ -2994,7 +3004,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_TRANSFER, - containerCode, fromLocationCode, toLocationCode, warehouseCode); + containerCode, fromLocationCode, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -3008,8 +3018,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 完成出库查看任务 - * @param taskHeader 任务 - * @return Result 完成出库查看任务结果 + * + * @param taskHeader 任务 + * @return Result 完成出库查看任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @@ -3040,7 +3051,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea boolean success = false; LambdaUpdateWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaUpdate(); inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getWarehouseCode, warehouseCode).eq(InventoryDetail::getContainerCode, containerCode) - .eq(InventoryDetail::getLocationCode, fromLocationCode); + .eq(InventoryDetail::getLocationCode, fromLocationCode); List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); if (inventoryDetailList.size() != 0) { List<InventoryDetail> inventoryDetailList1 = new ArrayList<>(); @@ -3067,7 +3078,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_CHECK_OUT, - containerCode, fromLocationCode, toLocationCode, warehouseCode); + containerCode, fromLocationCode, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -3082,8 +3093,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 完成跨站任务 - * @param taskHeader 任务 - * @return Result 完成跨站任务结果 + * + * @param taskHeader 任务 + * @return Result 完成跨站任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @@ -3118,7 +3130,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.error("创建跨站任务时,目标站台为空"); } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_OVER_STATION, - containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode); + containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -3133,8 +3145,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 完成空托盘组入库任务 - * @param taskHeader 任务 - * @return Result 完成空托盘组入库任务结果 + * + * @param taskHeader 任务 + * @return Result 完成空托盘组入库任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @@ -3161,7 +3174,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.error("完成空托盘组入库任务时,没有找到库位" + toLocationCode); } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT, - containerCode, QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode); + containerCode, QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -3176,8 +3189,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 完成空托盘组出库任务 - * @param taskHeader 任务 - * @return Result 完成空托盘组出库任务结果 + * + * @param taskHeader 任务 + * @return Result 完成空托盘组出库任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @@ -3222,7 +3236,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("完成空托盘组出库任务时, 更新任务失败"); } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT, - containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode); + containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -3361,7 +3375,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_QUALITY, - containerCode, fromLocationCode, toLocationCode, warehouseCode); + containerCode, fromLocationCode, toLocationCode, warehouseCode); if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } @@ -3375,8 +3389,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 取消入库任务 - * @param taskHeader 任务 - * @return Result 取消入库任务结果 + * + * @param taskHeader 任务 + * @return Result 取消入库任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @@ -3395,8 +3410,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 取消出库任务 - * @param taskHeader 任务 - * @return Result 取消出库任务结果 + * + * @param taskHeader 任务 + * @return Result 取消出库任务结果 */ @Override @Transactional(rollbackFor = Exception.class) @@ -3418,7 +3434,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea log.info("开始取消盘点任务"); LambdaQueryWrapper<CycleCountDetail> cycleCountDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); cycleCountDetailLambdaQueryWrapper.eq(CycleCountDetail::getContainerCode, taskHeader.getContainerCode()).ne(CycleCountDetail::getEnableStatus, - QuantityConstant.SHIPMENT_RECEIVE_SUCCESS); + QuantityConstant.SHIPMENT_RECEIVE_SUCCESS); CycleCountDetail cycleCountDetail = cycleCountDetailService.getOne(cycleCountDetailLambdaQueryWrapper); if (cycleCountDetail == null) { throw new JeecgBootException("取消盘点任务,没有找到盘点明细"); @@ -3474,7 +3490,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea /** * 取消任务,恢复容器和库位状态 - * @param taskHeader + * + * @param taskHeader * @return */ @Override @@ -3526,12 +3543,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea public boolean updateById(TaskHeader taskHeader) { LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); taskHeaderLambdaQueryWrapper.eq(TaskHeader::getId, taskHeader.getId()).lt(taskHeader.getStatus() != null, TaskHeader::getStatus, - QuantityConstant.TASK_STATUS_COMPLETED); + QuantityConstant.TASK_STATUS_COMPLETED); return super.update(taskHeader, taskHeaderLambdaQueryWrapper); } - - @Override - public List<ReportPerformanceAssessmentDto> getPerformanceAssessmentReport(String realName) { - return super.baseMapper.selectPerformanceAssessment(realName); - } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/TaskHeaderHistoryMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/TaskHeaderHistoryMapper.java index 95bdce3..b1bbfb4 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/TaskHeaderHistoryMapper.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/TaskHeaderHistoryMapper.java @@ -1,8 +1,12 @@ package org.jeecg.modules.wms.task.taskHeaderHistory.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto; import org.jeecg.modules.wms.task.taskHeaderHistory.entity.TaskHeaderHistory; +import java.util.List; + /** * @Description: task_header_history * @Author: jeecg-boot @@ -11,4 +15,13 @@ import org.jeecg.modules.wms.task.taskHeaderHistory.entity.TaskHeaderHistory; */ public interface TaskHeaderHistoryMapper extends BaseMapper<TaskHeaderHistory> { + /** + * 绩效考核报表查询 + * @param realName 用户姓名 + * @param taskTypeList 任务类型 + * @return 绩效考核报表信息 + */ + List<ReportPerformanceAssessmentDto> selectPerformanceAssessment(@Param("realName") String realName, + @Param("receiptTaskInternalType") Integer receiptTaskInternalType, + @Param("shipmentTaskInternalType") Integer shipmentTaskInternalType); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/xml/TaskHeaderHistoryMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/xml/TaskHeaderHistoryMapper.xml index 44c2901..4abc6aa 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/xml/TaskHeaderHistoryMapper.xml +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/xml/TaskHeaderHistoryMapper.xml @@ -2,4 +2,24 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.wms.task.taskHeaderHistory.mapper.TaskHeaderHistoryMapper"> + <select id="selectPerformanceAssessment" + resultType="org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto"> + SELECT sys_user.realname, + COUNT(task_header_history.create_by) AS sumTaskQty, + COUNT(IF((task_header_history.innernal_task_type = #{receiptTaskInternalType}), + task_header_history.create_by, NULL)) AS receiptTaskQty, + COUNT(IF((task_header_history.innernal_task_type = #{shipmentTaskInternalType}), + task_header_history.create_by, NULL)) AS shipmentTaskQty + FROM sys_user + LEFT JOIN task_header_history ON sys_user.realname = task_header_history.create_by + and task_header_history.innernal_task_type IN + (#{receiptTaskInternalType}, #{shipmentTaskInternalType}) + <where> + <if test="realName != null and realName != ''"> + <bind name="realName" value="'%' + realName + '%'"/> + and sys_user.realname LIKE #{realName} + </if> + </where> + GROUP BY sys_user.realname + </select> </mapper> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/ITaskHeaderHistoryService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/ITaskHeaderHistoryService.java index 78c4f36..8b14ca1 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/ITaskHeaderHistoryService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/ITaskHeaderHistoryService.java @@ -1,5 +1,6 @@ package org.jeecg.modules.wms.task.taskHeaderHistory.service; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto; import org.jeecg.modules.wms.task.taskHeaderHistory.entity.TaskDetailHistory; import org.jeecg.modules.wms.task.taskHeaderHistory.entity.TaskHeaderHistory; @@ -39,4 +40,10 @@ public interface ITaskHeaderHistoryService extends IService<TaskHeaderHistory> { void saveById(Integer id); + /** + * 绩效考核报表查询:只包含入库(整盘入库、补充入库、空容器入库)与出库(整盘出库、分拣出库、空容器出库)类型的 + * @param realName 用户姓名 + * @return 绩效考核报表信息 + */ + List<ReportPerformanceAssessmentDto> getPerformanceAssessmentReport(String realName); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/impl/TaskHeaderHistoryServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/impl/TaskHeaderHistoryServiceImpl.java index ec281f7..6f159ea 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/impl/TaskHeaderHistoryServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/impl/TaskHeaderHistoryServiceImpl.java @@ -1,12 +1,15 @@ package org.jeecg.modules.wms.task.taskHeaderHistory.service.impl; import java.io.Serializable; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.annotation.Resource; +import cn.hutool.core.collection.ListUtil; import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto; import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail; import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService; @@ -17,6 +20,7 @@ import org.jeecg.modules.wms.task.taskHeaderHistory.mapper.TaskDetailHistoryMapp import org.jeecg.modules.wms.task.taskHeaderHistory.mapper.TaskHeaderHistoryMapper; import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskDetailHistoryService; import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskHeaderHistoryService; +import org.jeecg.utils.constant.QuantityConstant; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -112,4 +116,9 @@ public class TaskHeaderHistoryServiceImpl extends ServiceImpl<TaskHeaderHistoryM } } + + @Override + public List<ReportPerformanceAssessmentDto> getPerformanceAssessmentReport(String realName) { + return super.baseMapper.selectPerformanceAssessment(realName, QuantityConstant.TASK_INTENERTYPE_RECEIPT, QuantityConstant.TASK_INTENERTYPE_SHIPMENT); + } }