rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
@@ -206,18 +206,22 @@ return pdaOutStockService.containerRebinding(param,getLoginUserId()); } @PostMapping("/orderOut/buffStore/callEmpty") @ApiOperation("灌桶入库呼叫空桶") public R buffStoreCallEmpty(@RequestBody PdaGeneralParam param) { param.getSta1(); return R.ok(); @PostMapping("/orderOut/getOrderItem") @ApiOperation("灌桶入库呼叫新料") public R getOrderItem(@RequestBody PdaGeneralParam param) { return pdaOutStockService.getOrderItem(param); } @PostMapping("/orderOut/buffStore/callNewMat") @PostMapping("/orderOut/getStationArea") @ApiOperation("灌桶入库呼叫新料") public R buffStoreCallNewMat(@RequestBody PdaGeneralParam param) { param.getSta2(); return R.ok(); public R getStationArea(@RequestBody PdaGeneralParam param) { return pdaOutStockService.getStationArea(param); } @PostMapping("/orderOut/productionDirectDelivery") @ApiOperation("生产直送") public R productionDirectDelivery(@RequestBody PdaGeneralParam param) { return pdaOutStockService.productionDirectDelivery(param,getLoginUserId()); } } rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/PdaGeneralParam.java
@@ -2,6 +2,7 @@ import com.vincent.rsf.server.manager.entity.LocItem; import com.vincent.rsf.server.manager.entity.TaskItem; import com.vincent.rsf.server.manager.entity.WkOrderItem; import lombok.Data; import lombok.experimental.Accessors; @@ -11,6 +12,11 @@ @Accessors(chain = true) public class PdaGeneralParam { //生产直送 private String orderNo; private Long stationAreaId; private List<WkOrderItem> wkOrderItems; // 容器号 private String containerNo; // 接驳站号 rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java
@@ -21,5 +21,11 @@ R containerRebinding(PdaGeneralParam param,Long loginUserId); R taskItemList(PdaGeneralParam param, Long loginUserId); R getOrderItem(PdaGeneralParam param); R getStationArea(PdaGeneralParam param); R productionDirectDelivery(PdaGeneralParam param,Long loginUserId); } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -16,10 +16,12 @@ import com.vincent.rsf.server.manager.enums.*; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.manager.service.impl.BasContainerServiceImpl; import com.vincent.rsf.server.manager.service.impl.BasStationAreaServiceImpl; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import lombok.Synchronized; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -56,6 +58,8 @@ private WaitPakinService waitPakinService; @Autowired private WaitPakinItemService waitPakinItemService; @Autowired private BasStationAreaServiceImpl basStationAreaService; @Override public R getOutStockTaskItem(String barcode) { @@ -321,6 +325,102 @@ } @Override public R getOrderItem(PdaGeneralParam param) { WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>() .eq(WkOrder::getCode, param.getOrderNo()) .eq(WkOrder::getType,OrderType.ORDER_OUT.type) ); if (null == order) { throw new CoolException("未找到对应订单"); } if (!order.getExceStatus().equals(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val) && !order.getExceStatus().equals(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val) ) { throw new CoolException("当前订单不在可执行状态"); } List<WkOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() .eq(WkOrderItem::getOrderId, order.getId()) .apply("anfme <> work_qty") ); return R.ok(list); } @Override public R getStationArea(PdaGeneralParam param) { return R.ok(basStationAreaService.list()); } @Override @Transactional(rollbackFor = Exception.class) public R productionDirectDelivery(PdaGeneralParam param,Long loginUserId) { WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>() .eq(WkOrder::getCode, param.getOrderNo()) .eq(WkOrder::getType,OrderType.ORDER_OUT.type) ); if (null == order) { throw new CoolException("未找到对应订单"); } ArrayList<String> arrayList = new ArrayList<>(); arrayList.add(param.getStationAreaId().toString()); Task task = new Task(); String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); task.setTaskCode(ruleCode) .setOrgSite(param.getSta1()) .setSort(Constants.TASK_SORT_DEFAULT_VALUE) .setUpdateBy(loginUserId) .setCreateBy(loginUserId) .setCreateTime(new Date()) .setUpdateTime(new Date()) .setTaskStatus(TaskStsType.MISSION_INITIAL.id) .setBarcode(param.getContainerNo()) .setTargSiteArea(arrayList) .setTaskType(TaskType.TASK_TYPE_PDD.type); if (!taskService.save(task)) { throw new CoolException("任务创建失败!!"); } List<TaskItem> taskItems = new ArrayList<>(); param.getWkOrderItems().forEach(item -> { TaskItem taskItem = new TaskItem(); BeanUtils.copyProperties(item, taskItem); taskItem.setTaskId(task.getId()) .setAnfme(item.getDemandQty()) .setWorkQty(0D) .setBatch(item.getBatch()) .setUpdateBy(loginUserId) .setCreateBy(loginUserId) .setCreateTime(new Date()) .setUpdateTime(new Date()) .setSplrBatch(item.getBatch()) .setPlatWorkCode(item.getPlatWorkCode()) .setPlatItemId(item.getPlatItemId()) .setOrderType(OrderType.ORDER_OUT.type) .setWkType(Short.parseShort(order.getWkType())) .setSourceCode(order.getCode()) .setSourceId(order.getId()); taskItems.add(taskItem); item.setWorkQty(item.getWorkQty()+item.getDemandQty()); }); if (!taskItemService.saveBatch(taskItems)) { throw new CoolException("任务明细生成失败!!"); } if (!order.getExceStatus().equals(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val)) { order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val); order.setUpdateBy(loginUserId); order.setUpdateTime(new Date()); if (!asnOrderService.updateById(order)){ throw new CoolException("单据状态更新失败!!"); } } if (!asnOrderItemService.updateBatchById(param.getWkOrderItems())) { throw new CoolException("单据明细更新失败!!"); } return R.ok(); } @Override public R getWaveListItem(String barcode) { LambdaQueryWrapper<Wave> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(!Cools.isEmpty(barcode), Wave::getCode, barcode); rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.fasterxml.jackson.annotation.JsonFormat; import com.vincent.rsf.server.manager.enums.TaskType; import com.vincent.rsf.server.system.constant.DictTypeCode; import com.vincent.rsf.server.system.entity.DictData; import com.vincent.rsf.server.system.service.DictDataService; @@ -315,17 +316,7 @@ } public String getTaskType$() { if (Cools.isEmpty(this.taskType)) { return null; } DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); DictData dictDatas = dictDataService.getOne(new LambdaQueryWrapper<DictData>() .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_TASK_TYPE) .eq(DictData::getValue, this.taskType)); if (Objects.isNull(dictDatas) || Objects.isNull(dictDatas.getLabel())) { return null; } return dictDatas.getValue() + "." + dictDatas.getLabel(); return TaskType.getTypeDesc(taskType); } public String getStartTime$(){ rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskType.java
@@ -21,6 +21,7 @@ TASK_TYPE_CHECK_OUT("107", "盘点出库"), TASK_TYPE_CROSS_DOCKING_OUT("109", "备货"), TASK_TYPE_EMPTY_OUT("110", "空板出库"), TASK_TYPE_PDD("111", "生产直送"), ; public Integer type; public String desc; @@ -46,6 +47,12 @@ return TaskType.TASK_TYPE_MERGE_IN.desc; } else if (TaskType.TASK_TYPE_CHECK_IN.type.equals(type)) { return TaskType.TASK_TYPE_CHECK_IN.desc; } else if (TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type.equals(type)) { return TaskType.TASK_TYPE_CROSS_DOCKING_OUT.desc; } else if (TaskType.TASK_TYPE_EMPTY_OUT.type.equals(type)) { return TaskType.TASK_TYPE_EMPTY_OUT.desc; }else if (TaskType.TASK_TYPE_PDD.type.equals(type)) { return TaskType.TASK_TYPE_PDD.desc; } return null; rsf-server/src/main/java/com/vincent/rsf/server/system/controller/MenuController.java
@@ -10,6 +10,7 @@ import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.common.service.RedisService; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.common.utils.NodeUtils; import com.vincent.rsf.server.system.entity.Menu; @@ -24,8 +25,14 @@ @RestController public class MenuController extends BaseController { private static final String MENU_TREE_CACHE_FLAG = "MENU_TREE"; private static final String MENU_TREE_CACHE_KEY = "FULL_TREE"; private static final int MENU_TREE_CACHE_TTL_SECONDS = 300; @Autowired private MenuService menuService; @Autowired private RedisService redisService; @PreAuthorize("hasAuthority('system:menu:list')") @PostMapping("/menu/page") @@ -48,8 +55,7 @@ // QueryWrapper<Menu> wrapper = param.buildWrapper(true, queryWrapper -> queryWrapper.orderByAsc("sort")); // List<Menu> menus = menuService.list(wrapper); // return R.ok().add(Utils.toTreeData(menus, 0L, Menu::getParentId, Menu::getId, Menu::setChildren)); List<Menu> menuList = menuService.list(new LambdaQueryWrapper<Menu>().orderByAsc(Menu::getSort)); List<Menu> treeData = Utils.toTreeData(menuList, 0L, Menu::getParentId, Menu::getId, Menu::setChildren); List<Menu> treeData = getMenuTreeData(); if (!Cools.isEmpty(map.get("condition"))) { Utils.treeRemove(treeData, String.valueOf(map.get("condition")), Menu::getName, Menu::getChildren); Utils.treeRemove(treeData, String.valueOf(map.get("condition")), Menu::getName, Menu::getChildren); @@ -94,6 +100,7 @@ if (!menuService.save(menu)) { return R.error("Save Fail"); } evictMenuTreeCache(); return R.ok("Save Success").add(menu); } @@ -120,6 +127,7 @@ if (!menuService.updateById(menu)) { return R.error("Update Fail"); } evictMenuTreeCache(); return R.ok("Update Success").add(menu); } @@ -130,6 +138,7 @@ if (!menuService.removeByIds(Arrays.asList(ids))) { return R.error("Delete Fail"); } evictMenuTreeCache(); return R.ok("Delete Success").add(ids); } @@ -153,5 +162,20 @@ ExcelUtil.build(ExcelUtil.create(menuService.list(), Menu.class), response); } private List<Menu> getMenuTreeData() { List<Menu> treeData = redisService.get(MENU_TREE_CACHE_FLAG, MENU_TREE_CACHE_KEY); if (treeData != null) { return treeData; } List<Menu> menuList = menuService.list(new LambdaQueryWrapper<Menu>().orderByAsc(Menu::getSort)); treeData = Utils.toTreeData(menuList, 0L, Menu::getParentId, Menu::getId, Menu::setChildren); redisService.set(MENU_TREE_CACHE_FLAG, MENU_TREE_CACHE_KEY, treeData, MENU_TREE_CACHE_TTL_SECONDS); return treeData; } private void evictMenuTreeCache() { redisService.delete(MENU_TREE_CACHE_FLAG, MENU_TREE_CACHE_KEY); } } rsf-server/src/main/java/com/vincent/rsf/server/system/entity/Menu.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.SpringUtils; import com.vincent.rsf.server.system.service.TenantService; @@ -187,6 +188,7 @@ } } @JsonIgnore public String getTenantId$(){ TenantService service = SpringUtils.getBean(TenantService.class); Tenant tenant = service.getById(this.tenantId); @@ -203,6 +205,7 @@ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); } @JsonIgnore public String getCreateBy$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.getById(this.createBy); @@ -219,6 +222,7 @@ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); } @JsonIgnore public String getUpdateBy$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.getById(this.updateBy);