Commit 09e076dd5446ec46d009730d05772600a55a17c1

Authored by 肖超群
2 parents 688f8233 60baf7e4

Merge branch 'develop4' of http://www.huahengrobot.com:90/wms/wms4 into develop4

Showing 21 changed files with 372 additions and 77 deletions
ant-design-vue-jeecg/.env.development
... ... @@ -2,7 +2,7 @@ NODE_ENV=development
2 2 VUE_APP_ENV=development
3 3 outputDir=dist
4 4 VUE_APP_API_BASE_URL=http://localhost:8080/wms
5   -VUE_APP_CAS_BASE_URL=http://localhost:8443/cas
  5 +VUE_APP_CAS_BASE_URL=http://172.16.29.77:8443/cas
6 6 VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview
7 7  
8 8 # 微应用列表必须VUE_APP_SUB_开头,jeecg-app-1为子应用的项目名称,也是子应用的路由父路径
... ...
ant-design-vue-jeecg/src/cas/sso.js
... ... @@ -10,7 +10,7 @@ const init = (callback) => {
10 10 console.log("-------单点登录开始-------");
11 11 let token = Vue.ls.get(ACCESS_TOKEN);
12 12 let st = getUrlParam("ticket");
13   - let sevice = "http://" + window.location.host + "/";
  13 + let sevice = "http://" + window.location.host + "/wms/";
14 14 if (token) {
15 15 loginSuccess(callback);
16 16 } else {
... ... @@ -61,7 +61,7 @@ function validateSt(ticket, service, callback) {
61 61 if (res.success) {
62 62 loginSuccess(callback);
63 63 } else {
64   - let sevice = "http://" + window.location.host + "/";
  64 + let sevice = "http://" + window.location.host + "/wms/";
65 65 let serviceUrl = encodeURIComponent(sevice);
66 66 window.location.href = window._CONFIG['casPrefixUrl'] + "/login?service=" + serviceUrl;
67 67 }
... ...
ant-design-vue-jeecg/src/components/jeecgbiz/JButtonBizComponent/JSelectBizComponentModal.vue
... ... @@ -59,7 +59,7 @@
59 59 </a-card>
60 60 </a-col>
61 61 </a-row>
62   - <InventoryDetailList></InventoryDetailList>
  62 + <InventoryDetailSelectList></InventoryDetailSelectList>
63 63 </j-modal>
64 64 </template>
65 65  
... ... @@ -72,12 +72,13 @@ import JSelectBizQueryItem from &#39;./JSelectBizQueryItem&#39;
72 72 import {cloneDeep} from 'lodash'
73 73 import {stockTakeTask} from "../../../api/api";
74 74 import Utils from './util.js';
75   -import InventoryDetailList from "../../../views/system/inventory/InventoryDetailList";
  75 +import InventoryDetailSelectList from "../../../views/system/inventory/InventoryDetailSelectList";
  76 +
76 77  
77 78 export default {
78 79 name: 'JSelectBizComponentModal',
79 80 mixins: [JeecgListMixin],
80   - components: {Ellipsis, JSelectBizQueryItem,InventoryDetailList},
  81 + components: {Ellipsis, JSelectBizQueryItem,InventoryDetailSelectList},
81 82 props: {
82 83 value: {
83 84 type: Array,
... ... @@ -242,6 +243,7 @@ export default {
242 243 this.selectedTable.dataSource = val.map(key => {
243 244 for (let data of this.dataSource) {
244 245 if (data[this.rowKey] === key) {
  246 + Utils.$emit('methodA',data[this.valueKey]);
245 247 pushIfNotExist(this.innerValue, data[this.valueKey])
246 248 return data
247 249 }
... ... @@ -264,6 +266,7 @@ export default {
264 266 /** 关闭弹窗 */
265 267 close() {
266 268 this.$emit('update:visible', false)
  269 + this.handleDeleteSelected(this.selectedTable.dataSource,0);
267 270 },
268 271  
269 272 valueWatchHandler(val) {
... ... @@ -348,9 +351,11 @@ export default {
348 351 {
349 352 alert("至少选择一项")
350 353 }
  354 + this.handleDeleteSelected(this.selectedTable.dataSource,0);
351 355 },
352 356 /** 删除已选择的 */
353 357 handleDeleteSelected(record, index) {
  358 + Utils.$emit('methodA',10);
354 359 this.selectedRowKeys.splice(this.selectedRowKeys.indexOf(record[this.rowKey]), 1)
355 360 //update--begin--autor:wangshuai-----date:20200722------for:JSelectBizComponent组件切换页数值问题------
356 361 this.selectedTable.dataSource.splice(this.selectedTable.dataSource.indexOf(record), 1)
... ...
ant-design-vue-jeecg/src/components/jeecgbiz/JSelectMultiCycleCount.vue
... ... @@ -29,7 +29,7 @@ export default {
29 29 },
30 30 data() {
31 31 return {
32   - url: {list: '/inventory/inventoryHeader/list'},
  32 + url: {list: '/inventory/inventoryHeader/freeList'},
33 33 columns: [
34 34 {title: 'ID', align: 'center', width: '20%',widthRight: '70%', dataIndex: 'id'},
35 35 {title: '容器号', align: 'center', width: '25%', dataIndex: 'containerCode'},
... ...
ant-design-vue-jeecg/src/store/modules/user.js
... ... @@ -183,7 +183,7 @@ const user = {
183 183 //console.log('logoutToken: '+ logoutToken)
184 184 logout(logoutToken).then(() => {
185 185 if (process.env.VUE_APP_SSO == 'true') {
186   - let sevice = 'http://' + window.location.host + '/'
  186 + let sevice = 'http://' + window.location.host + '/wms/'
187 187 let serviceUrl = encodeURIComponent(sevice)
188 188 window.location.href = process.env.VUE_APP_CAS_BASE_URL + '/logout?service=' + serviceUrl
189 189 }
... ...
ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailSelectList.vue 0 → 100644
  1 +<template>
  2 + <a-card :bordered="false" :class="'cust-erp-sub-tab'">
  3 + <!-- 操作按钮区域 -->
  4 + <div class="table-operator" v-if="mainId">
  5 + <a-button v-has="'inventoryDetail:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
  6 + <a-button type="primary" icon="download" @click="handleExportXls('库存详情')">导出</a-button>
  7 + <a-upload
  8 + name="file"
  9 + :showUploadList="false"
  10 + :multiple="false"
  11 + :headers="tokenHeader"
  12 + :action="importExcelUrl"
  13 + @change="handleImportExcel">
  14 + <a-button type="primary" icon="import">导入</a-button>
  15 + </a-upload>
  16 +
  17 + </div>
  18 +
  19 + <!-- table区域-begin -->
  20 + <div>
  21 + <a-table
  22 + ref="table"
  23 + size="middle"
  24 + bordered
  25 + rowKey="id"
  26 + :scroll="{x:true}"
  27 + :columns="columns"
  28 + :dataSource="dataSource"
  29 + :pagination="ipagination"
  30 + :loading="loading"
  31 + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  32 + @change="handleTableChange">
  33 +
  34 + <span slot="companyCode" slot-scope="companyCode">
  35 + <a-tag :key="companyCode" color=blue>
  36 + {{ solutionCompany(companyCode) }}
  37 + </a-tag>
  38 + </span>
  39 +
  40 + <template slot="htmlSlot" slot-scope="text">
  41 + <div v-html="text"></div>
  42 + </template>
  43 + <template slot="imgSlot" slot-scope="text">
  44 + <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
  45 + <img v-else :src="getImgView(text)" height="25px" alt=""
  46 + style="max-width:80px;font-size: 12px;font-style: italic;"/>
  47 + </template>
  48 + <template slot="fileSlot" slot-scope="text">
  49 + <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
  50 + <a-button
  51 + v-else
  52 + :ghost="true"
  53 + type="primary"
  54 + icon="download"
  55 + size="small"
  56 + @click="downloadFile(text)">
  57 + 下载
  58 + </a-button>
  59 + </template>
  60 +
  61 +
  62 + </a-table>
  63 + </div>
  64 + <inventoryDetail-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></inventoryDetail-modal>
  65 + </a-card>
  66 +</template>
  67 +
  68 +<script>
  69 +
  70 +import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  71 +import InventoryDetailModal from './modules/InventoryDetailModal'
  72 +import {getCompanyList} from '@/api/api'
  73 +import {getAction} from '@/api/manage'
  74 +import Utils from "../../../components/jeecgbiz/JButtonBizComponent/util";
  75 +
  76 +export default {
  77 + name: "InventoryDetailSelectList",
  78 + mixins: [JeecgListMixin],
  79 + components: {InventoryDetailModal},
  80 + props: {
  81 + mainId: {
  82 + type: String,
  83 + default: '',
  84 + required: false
  85 + }
  86 + },
  87 + watch: {
  88 + mainId: {
  89 + immediate: true,
  90 + handler(val) {
  91 + if (!this.mainId) {
  92 + this.clearList()
  93 + } else {
  94 + this.queryParam['inventoryHeaderId'] = val
  95 + this.loadData(1);
  96 + }
  97 + }
  98 + }
  99 + },
  100 + data() {
  101 + return {
  102 + description: '库存表管理页面',
  103 + disableMixinCreated: true,
  104 + companyList: [],
  105 + // 表头
  106 + columns: [
  107 + {
  108 + title: '容器编码',
  109 + align: "center",
  110 + dataIndex: 'containerCode'
  111 + },
  112 + {
  113 + title: '库位编码',
  114 + align: "center",
  115 + dataIndex: 'locationCode'
  116 + },
  117 + {
  118 + title: '物料编码',
  119 + align: "center",
  120 + dataIndex: 'materialCode'
  121 + },
  122 + {
  123 + title: '物料名称',
  124 + align: "center",
  125 + dataIndex: 'materialName'
  126 + },
  127 + {
  128 + title: '物料规格',
  129 + align: "center",
  130 + dataIndex: 'materialSpec'
  131 + },
  132 + {
  133 + title: '物料单位',
  134 + align: "center",
  135 + dataIndex: 'materialUnit'
  136 + },
  137 + {
  138 + title: '数量',
  139 + align: "center",
  140 + dataIndex: 'qty'
  141 + },
  142 + {
  143 + title: '库存状态',
  144 + align: "center",
  145 + dataIndex: 'inventoryStatus_dictText',
  146 + },
  147 + {
  148 + title: '批次',
  149 + align: "center",
  150 + dataIndex: 'batch'
  151 + },
  152 + {
  153 + title: '入库日期',
  154 + align: "center",
  155 + dataIndex: 'receiptDate'
  156 + },
  157 + ],
  158 + url: {
  159 + list: "/inventory/inventoryHeader/listInventoryDetailByMainId",
  160 + delete: "/inventory/inventoryHeader/deleteInventoryDetail",
  161 + deleteBatch: "/inventory/inventoryHeader/deleteBatchInventoryDetail",
  162 + exportXlsUrl: "/inventory/inventoryHeader/exportInventoryDetail",
  163 + importUrl: "/inventory/inventoryHeader/importInventoryDetail",
  164 + },
  165 + dictOptions: {
  166 + containerStatus: [],
  167 + }
  168 + }
  169 + },
  170 + created() {
  171 + this.loadFrom();
  172 + },
  173 + mounted() {
  174 + let _this = this;
  175 + Utils.$on('methodA',(data)=> {
  176 + _this.methodA(data);
  177 + })
  178 + // var _this = this;
  179 + // setInterval(function () {
  180 + // if(_this.isLoad) {
  181 + // _this.loadDataList();
  182 + // }
  183 + // },1000)
  184 + },
  185 + computed: {
  186 + importExcelUrl() {
  187 + return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`;
  188 + }
  189 + },
  190 + methods: {
  191 +
  192 + methodA(data) {
  193 + var _this = this;
  194 + _this.loadDatas(data);
  195 + },
  196 +
  197 + loadDatas(record) {
  198 + this.loading = true
  199 + this.dataSource = []
  200 + getAction(this.url.list, {
  201 + inventoryHeaderId: record
  202 + }).then((res) => {
  203 + if (res.success) {
  204 + this.dataSource = res.result.records
  205 + }
  206 + }).finally(() => {
  207 + this.loading = false
  208 + })
  209 + },
  210 + loadFrom() {
  211 + getCompanyList().then((res) => {
  212 + if (res.success) {
  213 + this.companyList = res.result
  214 + }
  215 + });
  216 + },
  217 + solutionCompany(value) {
  218 + var actions = []
  219 + Object.keys(this.companyList).some((key) => {
  220 + if (this.companyList[key].code == ('' + value)) {
  221 + actions.push(this.companyList[key].name)
  222 + return true
  223 + }
  224 + })
  225 + return actions.join('')
  226 + },
  227 + clearList() {
  228 + this.dataSource = []
  229 + this.selectedRowKeys = []
  230 + this.ipagination.current = 1
  231 + }
  232 +
  233 + }
  234 +}
  235 +</script>
  236 +<style scoped>
  237 +@import '~@assets/less/common.less'
  238 +</style>
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/cas/util/CASServiceUtil.java
... ... @@ -19,9 +19,9 @@ import org.apache.http.impl.client.HttpClients;
19 19 public class CASServiceUtil {
20 20  
21 21 public static void main(String[] args) {
22   - String serviceUrl = "https://cas.8f8.com.cn:8443/cas/p3/serviceValidate";
23   - String service = "http://localhost:3003/user/login";
24   - String ticket = "ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3";
  22 + String serviceUrl = "http://172.16.29.77:8443/cas/";
  23 + String service = "http://localhost:8080/wms/sys/cas/client/validateLogin";
  24 + String ticket = "TGT-4-P-Usqyx62yy2fMVUL7iWlrww-yQ4ClsrhZn5bPgdHqjrOWYeGEs9VrdE-a9dm5FOB44localhost";
25 25 String res = getSTValidate(serviceUrl, ticket, service);
26 26  
27 27 System.out.println("---------res-----" + res);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/controller/ReceiptController.java
... ... @@ -32,23 +32,4 @@ public class ReceiptController extends HuahengBaseController {
32 32 @Resource
33 33 private IMobileService mobileService;
34 34  
35   - @AutoLog(value = "PDA入库-呼叫料盒")
36   - @ApiOperation(value = "PDA入库-呼叫料盒", notes = "创建空的补充入库任务,并返回任务id")
37   - @PostMapping("/callbox")
38   - @ResponseBody
39   - @ApiLogger(apiName = "PDA入库-呼叫料盒", from = "PDA")
40   - public Result<?> callBox(@RequestBody CallBoxBean bean, HttpServletRequest req) {
41   - String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
42   -
43   - // 补充入库类型
44   - bean.setType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT);
45   -
46   - Result<?> result = handleMultiProcess("callBox", new MultiProcessListener() {
47   - @Override
48   - public Result<?> doProcess() {
49   - return mobileService.callBox(bean, warehouseCode);
50   - }
51   - });
52   - return result;
53   - }
54 35 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/controller/ShipmentController.java
... ... @@ -32,23 +32,5 @@ public class ShipmentController extends HuahengBaseController {
32 32 @Resource
33 33 private IMobileService mobileService;
34 34  
35   - @AutoLog(value = "PDA出库-呼叫料盒")
36   - @ApiOperation(value = "PDA出库-呼叫料盒", notes = "创建空的分拣出库任务,并返回任务id")
37   - @PostMapping("/callbox")
38   - @ResponseBody
39   - @ApiLogger(apiName = "PDA出库-呼叫料盒", from = "PDA")
40   - public Result<TaskHeader> callBox(@RequestBody CallBoxBean bean, HttpServletRequest req) {
41   - String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
42 35  
43   - // 补充入库类型
44   - bean.setType(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT);
45   -
46   - Result result = handleMultiProcess("callBox", new MultiProcessListener() {
47   - @Override
48   - public Result doProcess() {
49   - return mobileService.callBox(bean, warehouseCode);
50   - }
51   - });
52   - return result;
53   - }
54 36 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/IContainerService.java
... ... @@ -21,6 +21,8 @@ public interface IContainerService extends IService&lt;Container&gt; {
21 21  
22 22 boolean updateStatus(String containerCode, String status, String wareohuseCode);
23 23  
  24 + boolean restoreContainer(String containerCode, String wareohuseCode);
  25 +
24 26 boolean updateLocationCodeAndStatus(String containerCode, String locationCode, String status, String warehouseCode);
25 27  
26 28 // 创建零时容器
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java
... ... @@ -72,12 +72,25 @@ public class ContainerServiceImpl extends ServiceImpl&lt;ContainerMapper, Container
72 72 if (container == null) {
73 73 return false;
74 74 }
  75 + container.setLastStatus(container.getStatus());
75 76 container.setStatus(status);
76 77 boolean result = this.updateById(container);
77 78 return result;
78 79 }
79 80  
80 81 @Override
  82 + public boolean restoreContainer(String containerCode, String wareohuseCode) {
  83 + Container container = this.getContainerByCode(containerCode, wareohuseCode);
  84 + if (container == null) {
  85 + return false;
  86 + }
  87 + container.setLastStatus(container.getStatus());
  88 + container.setStatus(container.getLastStatus());
  89 + boolean result = this.updateById(container);
  90 + return result;
  91 + }
  92 +
  93 + @Override
81 94 public boolean updateLocationCodeAndStatus(String containerCode, String locationCode, String status, String warehouseCode) {
82 95 Container container = getContainerByCode(containerCode, warehouseCode);
83 96 if (container == null) {
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/ApiLogAspect.java
... ... @@ -399,7 +399,7 @@ public class ApiLogAspect {
399 399 public static void setApiLogException(ApiLog log, Exception e) {
400 400 try {
401 401 String exception = ExceptionUtils.getFullStackTrace(e);
402   - String shortExpInfo = e.getMessage() + "\n" + org.apache.commons.lang3.StringUtils.left(exception, 1000) + "...";
  402 + String shortExpInfo = e.getMessage() + "\n" + org.apache.commons.lang3.StringUtils.left(exception, 2000) + "...";
403 403 log.setException(shortExpInfo);
404 404 } catch (Exception ex) {
405 405 ex.printStackTrace();
... ... @@ -409,7 +409,7 @@ public class ApiLogAspect {
409 409 public static void setApiLogThrowable(ApiLog log, Throwable e) {
410 410 try {
411 411 String exception = ExceptionUtils.getFullStackTrace(e);
412   - String shortExpInfo = e.getMessage() + "\n" + org.apache.commons.lang3.StringUtils.left(exception, 1000) + "...";
  412 + String shortExpInfo = e.getMessage() + "\n" + org.apache.commons.lang3.StringUtils.left(exception, 2000) + "...";
413 413 log.setException(shortExpInfo);
414 414 } catch (Exception ex) {
415 415 ex.printStackTrace();
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java
... ... @@ -73,14 +73,14 @@ public class HuahengBaseController {
73 73 log.info("[{}] 开始分布式事务 lockKey = {},获取锁耗时: {}ms", taskName, fullLockKey, endTime - startTime);
74 74 result = multiProcessListener.doProcess();
75 75 } catch (Exception e) {
76   - final long finishTime = SystemClock.now();
77   - throw new RuntimeException(StrUtil.format("[{}] 执行分布式事务失败 lockKey = {},事务耗时:{}ms", taskName, fullLockKey, finishTime - endTime), e);
  76 + String errorMessage = StrUtil.format("[{}] 执行分布式事务失败 lockKey = {},errorMessage = {}", taskName, fullLockKey, e.getCause());
  77 + log.error(errorMessage, e);
  78 + throw (RuntimeException)e;
78 79 } finally {
79 80 redissonDistributedLocker.unlock(fullLockKey);
80 81 final long finishTime = SystemClock.now();
81 82 log.info("[{}] 结束分布式事务 lockKey = {},事务耗时:{}ms", taskName, fullLockKey, finishTime - endTime);
82 83 }
83   -
84 84 return result;
85 85 }
86 86 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/controller/InventoryHeaderController.java
... ... @@ -12,6 +12,7 @@ import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
12 12 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader;
13 13 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
14 14 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService;
  15 +import org.jeecg.utils.constant.QuantityConstant;
15 16 import org.springframework.beans.factory.annotation.Autowired;
16 17 import org.springframework.web.bind.annotation.*;
17 18 import javax.servlet.http.HttpServletRequest;
... ... @@ -252,6 +253,29 @@ public class InventoryHeaderController extends JeecgController&lt;InventoryHeader,
252 253 }
253 254  
254 255 /**
  256 + * 有货非锁定列表查询
  257 + * @param inventoryHeader
  258 + * @param pageNo
  259 + * @param pageSize
  260 + * @param req
  261 + * @return
  262 + */
  263 + // @AutoLog(value = "库存表-分页列表查询")
  264 + @ApiOperation(value = "库存表-有货非锁定列表查询", notes = "库存表-有货非锁定列表查询")
  265 + @GetMapping(value = "/freeList")
  266 + public Result<IPage<InventoryHeader>> freeList(InventoryHeader inventoryHeader, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
  267 + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
  268 +
  269 +
  270 +
  271 + QueryWrapper<InventoryHeader> queryWrapper = QueryGenerator.initQueryWrapper(inventoryHeader, req.getParameterMap());
  272 + queryWrapper.eq("container_status", QuantityConstant.STATUS_CONTAINER_SOME);
  273 + Page<InventoryHeader> page = new Page<InventoryHeader>(pageNo, pageSize);
  274 + IPage<InventoryHeader> pageList = inventoryHeaderService.page(page, queryWrapper);
  275 + return Result.OK(pageList);
  276 + }
  277 +
  278 + /**
255 279 * 导入
256 280 * @return
257 281 */
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java
... ... @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
9 9 import lombok.extern.slf4j.Slf4j;
10 10 import org.jeecg.common.system.base.controller.JeecgController;
11 11 import org.jeecg.common.api.vo.Result;
  12 +import org.jeecg.modules.wms.api.mobile.entity.CallBoxBean;
12 13 import org.jeecg.modules.wms.api.mobile.entity.QuickReceiptBean;
13 14 import org.jeecg.modules.wms.api.mobile.service.IMobileService;
14 15 import org.jeecg.modules.wms.framework.aspectj.lang.annotation.ApiLogger;
... ... @@ -365,4 +366,17 @@ public class ReceiptHeaderController extends JeecgController&lt;ReceiptHeader, IRec
365 366 return mobileService.quickReceipt(bean, warehouseCode);
366 367  
367 368 }
  369 +
  370 + @AutoLog(value = "PDA入库-呼叫料盒")
  371 + @ApiOperation(value = "PDA入库-呼叫料盒", notes = "创建空的补充入库任务,并返回任务id")
  372 + @PostMapping("/callbox")
  373 + @ResponseBody
  374 + @ApiLogger(apiName = "PDA入库-呼叫料盒", from = "PDA")
  375 + public Result<?> callBox(@RequestBody CallBoxBean bean, HttpServletRequest req) {
  376 + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
  377 +
  378 + // 补充入库类型
  379 + bean.setType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT);
  380 + return mobileService.callBox(bean, warehouseCode);
  381 + }
368 382 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
... ... @@ -20,12 +20,17 @@ import org.jeecg.common.system.query.QueryGenerator;
20 20 import org.jeecg.common.system.vo.LoginUser;
21 21 import org.jeecg.common.util.oConvertUtils;
22 22 import org.jeecg.modules.wms.api.erp.service.IErpService;
  23 +import org.jeecg.modules.wms.api.mobile.entity.CallBoxBean;
  24 +import org.jeecg.modules.wms.api.mobile.service.IMobileService;
  25 +import org.jeecg.modules.wms.framework.aspectj.lang.annotation.ApiLogger;
  26 +import org.jeecg.modules.wms.framework.controller.HuahengBaseController;
23 27 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
24 28 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
25 29 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
26 30 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
27 31 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService;
28 32 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
  33 +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
29 34 import org.jeecg.utils.HuahengJwtUtil;
30 35 import org.jeecg.utils.constant.QuantityConstant;
31 36 import org.jeecgframework.poi.excel.ExcelImportUtil;
... ... @@ -60,6 +65,9 @@ import lombok.extern.slf4j.Slf4j;
60 65 @Slf4j
61 66 public class ShipmentHeaderController extends JeecgController<ShipmentHeader, IShipmentHeaderService> {
62 67  
  68 + @Resource
  69 + private IMobileService mobileService;
  70 +
63 71 @Autowired
64 72 private IShipmentHeaderService shipmentHeaderService;
65 73  
... ... @@ -355,4 +363,17 @@ public class ShipmentHeaderController extends JeecgController&lt;ShipmentHeader, IS
355 363 Result result = erpService.backShipment(shipmentHeader);
356 364 return result;
357 365 }
  366 +
  367 + @AutoLog(value = "PDA出库-呼叫料盒")
  368 + @ApiOperation(value = "PDA出库-呼叫料盒", notes = "创建空的分拣出库任务,并返回任务id")
  369 + @PostMapping("/callbox")
  370 + @ResponseBody
  371 + @ApiLogger(apiName = "PDA出库-呼叫料盒", from = "PDA")
  372 + public Result<TaskHeader> callBox(@RequestBody CallBoxBean bean, HttpServletRequest req) {
  373 + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
  374 +
  375 + // 补充入库类型
  376 + bean.setType(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT);
  377 + return mobileService.callBox(bean, warehouseCode);
  378 + }
358 379 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java
... ... @@ -4,6 +4,8 @@ import com.aliyun.oss.ServiceException;
4 4 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
5 5 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
6 6 import org.jeecg.common.api.vo.Result;
  7 +import org.jeecg.modules.wms.config.container.entity.Container;
  8 +import org.jeecg.modules.wms.config.container.service.impl.ContainerServiceImpl;
7 9 import org.jeecg.modules.wms.config.location.entity.Location;
8 10 import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl;
9 11 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
... ... @@ -32,6 +34,7 @@ import java.math.BigDecimal;
32 34 import java.util.Date;
33 35 import java.util.List;
34 36 import java.util.Collection;
  37 +import java.util.stream.Stream;
35 38  
36 39 /**
37 40 * @Description: 盘点明细表
... ... @@ -58,6 +61,8 @@ public class CycleCountDetailServiceImpl extends ServiceImpl&lt;CycleCountDetailMap
58 61 private TaskDetailServiceImpl taskDetailService;
59 62 @Resource
60 63 private CycleCountHeaderServiceImpl cycleCountHeaderService;
  64 + @Resource
  65 + private ContainerServiceImpl containerServiceImpl;
61 66  
62 67  
63 68 @Override
... ... @@ -119,21 +124,20 @@ public class CycleCountDetailServiceImpl extends ServiceImpl&lt;CycleCountDetailMap
119 124 inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getInventoryHeaderId,taskId);
120 125 List<InventoryDetail> inventoryDetails = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
121 126  
122   -// LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
123   -// locationLambdaQueryWrapper.eq(Location::getCode, inventoryDetails.get(0).getLocationCode())
124   -// .eq(Location::getWarehouseCode, inventoryDetails.get(0).getWarehouseCode())
125   -// .ne(Location::getStatus, QuantityConstant.STATUS_LOCATION_LOCK);
126   -// Location location = locationService.getOne(locationLambdaQueryWrapper);
127   -// if (StringUtils.isNull(location)) {
128   -// return Result.error("库位已锁定!");
129   -// }
  127 +
  128 + LambdaQueryWrapper<CycleCountDetail> cycleCountDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
  129 + cycleCountDetailLambdaQueryWrapper.eq(CycleCountDetail::getContainerCode,inventoryDetails.get(0).getContainerCode())
  130 + .ne(CycleCountDetail::getEnableStatus,QuantityConstant.CYCLECOUNT_STATUS_COMPLETED);
  131 + List<CycleCountDetail> cycleCountDetails = this.list(cycleCountDetailLambdaQueryWrapper);
  132 + if (cycleCountDetails.size() >0)
  133 + {
  134 + return Result.error("当前容器已经在盘点队列还没有完成 盘点单号"+cycleCountDetails.get(0).getCycleCountHeadCode());
  135 + }
130 136  
131 137 CycleCountDetail cycleCountDetail = new CycleCountDetail();
132 138 cycleCountDetail.setCycleCountHeadId(headerId);
133 139 cycleCountDetail.setContainerCode(inventoryDetails.get(0).getContainerCode());
134 140  
135   -
136   -
137 141 cycleCountDetail.setCycleCountHeadCode(code);
138 142 cycleCountDetail.setCompanyCode(inventoryDetails.get(0).getCompanyCode());
139 143 cycleCountDetail.setWarehouseCode(inventoryDetails.get(0).getWarehouseCode());
... ... @@ -198,14 +202,21 @@ public class CycleCountDetailServiceImpl extends ServiceImpl&lt;CycleCountDetailMap
198 202 }
199 203 Location location = locationService.getLocationByCode(
200 204 cycleCountDetail.getLocationCode(), warehouseCode);
201   - /*if(!loc.getStatus().equals(QuantityConstant.STATUS_EMPTY)){
202   - return AjaxResult.error(cycleCountDetail.getLocationCode() + "库位不在空闲状态,请先完成其他任务,操作失败!");
203   - }*/
  205 + if(!location.getStatus().equals(QuantityConstant.STATUS_LOCATION_EMPTY)){
  206 + return Result.error(cycleCountDetail.getLocationCode() + "库位不在空闲状态,请先完成其他任务,操作失败!");
  207 + }
204 208 if(StringUtils.isEmpty(location.getContainerCode())){
205 209 return Result.error(cycleCountDetail.getLocationCode() + "库位中没有容器,操作失败!");
206 210 }
  211 +
207 212 //生成任务同时锁定库位
208 213 locationService.updateStatus(location.getCode(), QuantityConstant.STATUS_LOCATION_LOCK,warehouseCode);
  214 +
  215 + //生成任务同时锁定容器
  216 + containerServiceImpl.updateStatus(location.getContainerCode(),QuantityConstant.STATUS_LOCATION_LOCK,warehouseCode);
  217 +
  218 +
  219 +
209 220 //每个明细单生成一张主任务,子单就是任务明细。
210 221 TaskHeader task = new TaskHeader();
211 222 task.setWarehouseCode(warehouseCode);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
... ... @@ -1725,6 +1725,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1725 1725 locationService.updateStatus(cycleCountDetail.getLocationCode(),
1726 1726 QuantityConstant.STATUS_LOCATION_EMPTY, taskHeader.getWarehouseCode());
1727 1727  
  1728 +
  1729 + //还原容器状态
  1730 + containerService.restoreContainer(cycleCountDetail.getLocationCode(),taskHeader.getWarehouseCode());
  1731 +
1728 1732 return Result.OK("完成盘点任务成功");
1729 1733 }
1730 1734  
... ...
huaheng-wms-core/src/main/resources/application-dev.yml
... ... @@ -191,7 +191,7 @@ jeecg:
191 191 #webapp文件路径
192 192 webapp: /opt/webapp
193 193 shiro:
194   - excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/**
  194 + excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/**,/sys/cas/client/validateLogin
195 195 #阿里云oss存储和大鱼短信秘钥配置
196 196 oss:
197 197 accessKey: ??
... ... @@ -269,14 +269,14 @@ jeecg:
269 269 enabled: true
270 270 #cas单点登录
271 271 cas:
272   - prefixUrl: http://cas.example.org:8443/cas
  272 + prefixUrl: http://cas.server.com:8443/cas
273 273 #Mybatis输出sql日志
274 274 logging:
275 275 level:
276   - org.jeecg.common: WARN
277   - org.jeecg.modules: WARN
  276 + org.jeecg.common: DEBUG
  277 + org.jeecg.modules: DEBUG
278 278 org.jeecg.modules.wms: DEBUG
279   - org.jeecg.config.shiro: INFO
  279 + org.jeecg.config.shiro: DEBUG
280 280 #swagger
281 281 knife4j:
282 282 #开启增强配置
... ...
huaheng-wms-core/src/main/resources/application-prod.yml
... ... @@ -189,7 +189,7 @@ jeecg:
189 189 #webapp文件路径
190 190 webapp: /opt/jeecg-boot/webapp
191 191 shiro:
192   - excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/**
  192 + excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/**,/sys/cas/client/validateLogin
193 193 #阿里云oss存储和大鱼短信秘钥配置
194 194 oss:
195 195 accessKey: ??
... ... @@ -258,7 +258,7 @@ jeecg:
258 258 enabled: true
259 259 #cas单点登录
260 260 cas:
261   - prefixUrl: http://cas.example.org:8443/cas
  261 + prefixUrl: http://172.16.29.77:8443/cas
262 262 #Mybatis输出sql日志
263 263 logging:
264 264 level:
... ...
huaheng-wms-core/src/main/resources/application-test.yml
... ... @@ -191,7 +191,7 @@ jeecg:
191 191 #webapp文件路径
192 192 webapp: /opt/webapp
193 193 shiro:
194   - excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/**
  194 + excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/**,/sys/cas/client/validateLogin
195 195 #阿里云oss存储和大鱼短信秘钥配置
196 196 oss:
197 197 accessKey: ??
... ... @@ -270,12 +270,12 @@ jeecg:
270 270 enabled: true
271 271 #cas单点登录
272 272 cas:
273   - prefixUrl: http://cas.example.org:8443/cas
  273 + prefixUrl: http://172.16.29.77:8443/cas
274 274 #Mybatis输出sql日志
275 275 logging:
276 276 level:
277   - org.jeecg.common: WARN
278   - org.jeecg.modules: WARN
  277 + org.jeecg.common: DEBUG
  278 + org.jeecg.modules: DEBUG
279 279 org.jeecg.modules.wms: DEBUG
280 280 org.jeecg.config.shiro: DEBUG
281 281 #swagger
... ...