rsf-admin/src/page/basicInfo/loc/LocList.jsx
@@ -83,6 +83,17 @@ }, })); const LocList = () => { const translate = useTranslate(); const notify = useNotify(); const refresh = useRefresh(); const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); const [initDialog, setInitDialog] = useState(false); const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_loc_use_stas')) || []; const filters = [ <SearchInput source="condition" alwaysOn />, <ReferenceInput @@ -107,6 +118,15 @@ filterToQuery={(val) => ({ name: val })} /> </ReferenceInput>, <AutocompleteInput choices={dicts} optionText="label" label="table.field.loc.useStatus" source="useStatus" optionValue="value" parse={v => v} alwaysOn />, <TextInput source="code" label="table.field.loc.code" />, <TextInput source="type" label="table.field.loc.type" />, <TextInput source="name" label="table.field.loc.name" />, @@ -135,14 +155,6 @@ resettable />, ] const LocList = () => { const translate = useTranslate(); const notify = useNotify(); const refresh = useRefresh(); const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); const [initDialog, setInitDialog] = useState(false); return ( <Box display="flex"> rsf-admin/src/page/locItem/LocItemList.jsx
@@ -165,7 +165,7 @@ actions={( <TopToolbar> <FilterButton /> <SelectColumnsButton preferenceKey='loc' /> {/* <SelectColumnsButton preferenceKey='loc' /> */} </TopToolbar> )} perPage={DEFAULT_PAGE_SIZE} rsf-admin/src/page/task/TaskList.jsx
@@ -255,7 +255,7 @@ } } return ( ((record?.taskStatus < 98) || (record?.taskType >= 101 && record?.taskStatus < 198)) ? (<ConfirmButton label={"toolbar.complete"} color="secondary" startIcon={<TaskAltIcon />} onConfirm={clickComplete} />) : (<></>) ((record?.taskStatus < 98) || (record?.taskType >= 101 && record?.taskStatus < 198)) || (record?.taskType == 11 && record?.taskStatus == 101) ? (<ConfirmButton label={"toolbar.complete"} color="secondary" startIcon={<TaskAltIcon />} onConfirm={clickComplete} />) : (<></>) ) } rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx
@@ -222,13 +222,13 @@ width: 100, editable: false, }, { field: 'workQty', headerName: translate('table.field.locItem.workQty'), width: 100, type: 'number', editable: false, }, // { // field: 'workQty', // headerName: translate('table.field.locItem.workQty'), // width: 100, // type: 'number', // editable: false, // }, { field: 'matnrCode', headerName: translate('table.field.locItem.matnrCode'), rsf-admin/src/page/work/components/locItemInfoModal.jsx
@@ -172,7 +172,7 @@ { field: 'maktx', headerName: translate('table.field.locItem.maktx'), width: 300 }, { field: 'batch', headerName: translate('table.field.locItem.batch'), width: 100 }, { field: 'anfme', headerName: translate('table.field.locItem.anfme'), width: 100 }, { field: 'workQty', headerName: translate('table.field.locItem.workQty'), width: 100 }, // { field: 'workQty', headerName: translate('table.field.locItem.workQty'), width: 100 }, { field: 'unit', headerName: translate('table.field.locItem.unit'), width: 100 }, ]) rsf-admin/src/page/work/outBound/OutBoundList.jsx
@@ -183,12 +183,12 @@ } const http = async (sta, items) => { console.log(items); const filZores = items.filter(item => item.outQty <= 0.0); const filter = items.filter(item => (item.outQty + item.workQty) > item.anfme); if (filter.length > 0 || filZores.length > 0) { notify(translate('toolbar.request.error.out_stock_qty')) return } // const filZores = items.filter(item => item.outQty <= 0.0); // const filter = items.filter(item => (item.outQty + item.workQty) > item.anfme); // if (filter.length > 0 || filZores.length > 0) { // notify(translate('toolbar.request.error.out_stock_qty')) // return // } const { data: { code, data, msg } } = await request.post(`/locItem/generate/task`, { siteNo: sta, items: items }); if (code === 200) { notify(msg); @@ -232,13 +232,13 @@ width: 100, editable: false, }, { field: 'workQty', headerName: translate('table.field.locItem.workQty'), width: 100, type: 'number', editable: false, }, // { // field: 'workQty', // headerName: translate('table.field.locItem.workQty'), // width: 100, // type: 'number', // editable: false, // }, { field: 'locCode', headerName: translate('table.field.locItem.locCode'), rsf-admin/src/page/work/stockTransfer/stockTransferList.jsx
@@ -271,13 +271,13 @@ width: 100, editable: false, }, { field: 'workQty', headerName: translate('table.field.locItem.workQty'), width: 100, type: 'number', editable: false, }, // { // field: 'workQty', // headerName: translate('table.field.locItem.workQty'), // width: 100, // type: 'number', // editable: false, // }, { field: 'locCode', headerName: translate('table.field.locItem.locCode'), rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
@@ -1,9 +1,11 @@ package com.vincent.rsf.server.manager.controller; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.common.annotation.OperationLog; import com.vincent.rsf.server.common.domain.BaseParam; @@ -14,10 +16,12 @@ import com.vincent.rsf.server.manager.service.CompanysService; import com.vincent.rsf.server.manager.service.DeliveryItemService; import com.vincent.rsf.server.system.controller.BaseController; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.*; @@ -115,7 +119,29 @@ @PreAuthorize("hasAuthority('manager:deliveryItem:list')") @PostMapping("/deliveryItem/export") public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { ExcelUtil.build(ExcelUtil.create(deliveryItemService.list(), DeliveryItem.class), response); if (!Cools.isEmpty(map) && !Cools.isEmpty(map.get("ids"))) { throw new CoolException("参数不能为空!!"); } List<Long> jsonArray = JSONArray.parseArray(JSONArray.toJSONString(map.get("ids")), Long.class); // if (jsonArray.isEmpty()) { // ExcelUtil.build(ExcelUtil.create(deliveryItemService.getOne(new La), DeliveryItem.class), response); // } else { // ExcelUtil.build(ExcelUtil.create(deliveryItemService.list(), DeliveryItem.class), response); // } } @PostMapping("/deliveryItem/import") @ApiOperation("DO单导入接口") @PreAuthorize("hasAuthority('manager:asnOrderItem:update')") public R importExcel(@RequestParam(value = "file") MultipartFile file) throws Exception { if (Objects.isNull(file)) { return R.error("文件不能为空!!"); } Map<String, Object> hashMap = new HashMap<>(); return R.ok(); // return deliveryItemService.excelImport(file, hashMap, getLoginUserId()); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java
@@ -19,7 +19,7 @@ @Excel(name = "*DO单号") @ApiModelProperty(value= "*PO单号") @ExcelComment(value = "poCode", example = "PO25413975") private String poCode; private String doCode; @Excel(name = "*行号") @ApiModelProperty(value= "*行号") @@ -85,7 +85,7 @@ @Excel(name = "数量") @ApiModelProperty(value= "数量") @ExcelComment(value = "anfme", example = "75") private Double anfme; private String anfme; /** * 供应商编码 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -2,17 +2,24 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.utils.LocUtils; import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; import com.vincent.rsf.server.manager.enums.LocStsType; import com.vincent.rsf.server.manager.enums.TaskStsType; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.TaskType; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.manager.service.impl.LocServiceImpl; import com.vincent.rsf.server.system.constant.GlobalConfigCode; import com.vincent.rsf.server.system.entity.Config; import com.vincent.rsf.server.system.service.ConfigService; import com.vincent.rsf.server.system.utils.SystemAuthUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -39,6 +46,13 @@ private TaskItemLogService taskItemLogService; @Autowired private ConfigService configService; @Autowired private LocServiceImpl locService; @Value("${wcs-slave.doubleLocs}") private List<Integer> rows; @Autowired private LocItemService locItemService; /** * @param @@ -78,6 +92,65 @@ } /** * 任务自动下发 * @throws Exception */ // @Scheduled(cron = "0/5 * * * * ? ") @Transactional(rollbackFor = Exception.class) public void taskToWCS() throws Exception { Long loginUserId = SystemAuthUtils.getLoginUserId(); List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type); List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().in(Task::getTaskType, list).orderByDesc(Task::getSort)); for (Task task : tasks) { Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, task.getBarcode())); if (Objects.isNull(loc)) { continue; } //判断是否深库位 if (!LocUtils.isShallowLoc(loc.getCode())) { //获取深库位对应的浅库位 String shallowLoc = LocUtils.getShallowLoc(loc.getCode()); if (StringUtils.isBlank(shallowLoc)) { continue; } Loc shalloc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc)); if (Objects.isNull(shalloc) || !shalloc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { //如果浅库位不在库跳出循环 continue; } LocToTaskParams params = new LocToTaskParams(); params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + ""); //生成移库任务 locItemService.genMoveTask(params, loginUserId); } //TODO 调用下发任务接口 } } /** * 每五秒校验深库位是否为空,如果浅库位有货,将浅库位移至深库位 */ @Scheduled(cron = "0/35 * * * * ? ") @Transactional(rollbackFor = Exception.class) public void shallocToDeep() throws Exception { List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>() .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) .in(Loc::getRow, rows)); if (locs.isEmpty()) { return; } for (Loc loc : locs) { String shallowLoc = LocUtils.getShallowLoc(loc.getCode()); Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc)); if (Objects.isNull(one) || !one.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { continue; } taskService.moveToDeep(SystemAuthUtils.getLoginUserId(), shallowLoc); } } /** * @param * @return * @author Ryan rsf-server/src/main/java/com/vincent/rsf/server/manager/service/DeliveryItemService.java
@@ -1,8 +1,15 @@ package com.vincent.rsf.server.manager.service; import com.baomidou.mybatisplus.extension.service.IService; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.manager.entity.DeliveryItem; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.HashMap; import java.util.Map; public interface DeliveryItemService extends IService<DeliveryItem> { // R excelImport(MultipartFile file, Map<String, Object> hashMap, Long loginUserId) throws Exception; } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
@@ -28,4 +28,6 @@ Task taskToTop(Long id, Long loginUserId) throws Exception; Task operateComplete(Long id, Long loginUserId); void moveToDeep(Long loginUserId, String curLoc) throws Exception; } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -96,9 +96,6 @@ public synchronized R excelImport(MultipartFile file, HashMap<String, Object> hashMap, Long loginUserId) throws Exception { ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), AsnOrderTemplate.class, ExcelUtil.getDefaultImportParams()); if (result.getList().isEmpty()) { throw new CoolException("物料导入失败!!"); } if (result.getList().isEmpty()) { throw new CoolException("表格内容不能为空!!"); } List<AsnOrderTemplate> resultList = result.getList(); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java
@@ -1,12 +1,182 @@ package com.vincent.rsf.server.manager.service.impl; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; import com.vincent.rsf.server.manager.entity.excel.DeliveryTemplate; import com.vincent.rsf.server.manager.enums.CompanysType; import com.vincent.rsf.server.manager.enums.OrderType; import com.vincent.rsf.server.manager.enums.OrderWorkType; import com.vincent.rsf.server.manager.enums.QlyIsptResult; import com.vincent.rsf.server.manager.mapper.DeliveryItemMapper; import com.vincent.rsf.server.manager.entity.DeliveryItem; import com.vincent.rsf.server.manager.service.CompanysService; import com.vincent.rsf.server.manager.service.DeliveryItemService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vincent.rsf.server.manager.service.DeliveryService; import com.vincent.rsf.server.manager.service.MatnrService; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Service("deliveryItemService") public class DeliveryItemServiceImpl extends ServiceImpl<DeliveryItemMapper, DeliveryItem> implements DeliveryItemService { @Autowired private DeliveryService deliveryService; @Autowired private MatnrService matnrService; @Autowired private CompanysService companysService; @Autowired private DeliveryItemService deliveryItemService; // private /** * excel DO单导入 * * @param file * @param hashMap * @param loginUserId * @return */ // @Override // public R excelImport(MultipartFile file, Map<String, Object> hashMap, Long loginUserId) throws Exception { // ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), DeliveryTemplate.class, ExcelUtil.getDefaultImportParams()); // if (result.getList().isEmpty()) { // throw new CoolException("表格内容不能为空!!"); // } // List<DeliveryTemplate> resultList = result.getList(); // Map<String, List<DeliveryTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(DeliveryTemplate::getDoCode)); // StringBuffer sbFaild = new StringBuffer(); // for (String key : listMap.keySet()) { // if (StringUtils.isBlank(key)) { // throw new CoolException("单号不能为空!!"); // } // DeliveryTemplate template = listMap.get(key).stream().findFirst().get(); // Delivery order = deliveryService.getOne(new LambdaQueryWrapper<Delivery>().eq(Delivery::getCode, key)); // if (!Objects.isNull(order)) { // sbFaild.append(template.getDoCode()).append(",已添加!!"); // throw new CoolException(sbFaild.toString()); // } // order = new Delivery(); // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // Date date = dateFormat.parse(template.getArrTime()); // if (Objects.isNull(date)) { // throw new CoolException("时间格式错误!!"); // } // if (Objects.isNull((OrderType.getTypeVal(template.getType())))) { // sbFaild.append(template.getDoCode()).append(",单据状态不存在!!"); // throw new CoolException(sbFaild.toString()); // } // if (Objects.isNull((OrderWorkType.getWorkType(template.getWkType())))) { // sbFaild.append(template.getDoCode()).append(",业务状态不存在!!"); // throw new CoolException(sbFaild.toString()); // } // // order.setCode(template.getDoCode()) // .setPoCode(template.getPoCode()) // .setMemo(template.getMemo()) // .setArrTime(date) // .setUpdateBy(loginUserId) // .setLogisNo(template.getLogicNo()) // .setCreateBy(loginUserId) // .setType(OrderType.getTypeVal(template.getType())) // .setWkType(OrderWorkType.getWorkType(template.getWkType())); // if (!deliveryService.save(order)) { // throw new CoolException("单据保存失败!!"); // } // List<DeliveryItem> items = new ArrayList<>(); // for (DeliveryTemplate orderTemplate : listMap.get(key)) { // DeliveryItem orderItem = new DeliveryItem(); // if (StringUtils.isBlank(orderTemplate.getMatnrCode())) { // throw new CoolException(orderTemplate.getDoCode() + ":物料编码不能为空!!"); // } // if (StringUtils.isBlank(orderTemplate.getAnfme())) { // throw new CoolException(orderTemplate.getDoCode() + ":数量不能为空!!"); // } // if (StringUtils.isBlank(orderTemplate.getType())) { // throw new CoolException(orderTemplate.getDoCode() + ":单据类型不能为空!!"); // } // if (StringUtils.isBlank(orderTemplate.getWkType())) { // throw new CoolException(orderTemplate.getDoCode() + ":业务类型不能为空!!"); // } // // Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>() // .eq(Matnr::getCode, orderTemplate.getMatnrCode())); // if (Objects.isNull(matnr)) { // sbFaild.append(orderTemplate.getMatnrCode()).append("物料不存在"); // throw new CoolException(sbFaild.toString()); // } // String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, matnr); // orderItem.setDeliveryId(order.getId()) // .setDeliveryCode(order.getCode()) // .setSplrBatch(orderTemplate.getSplrBatch()) // .setPlatItemId(orderTemplate.getPlatItemId()) // .setAnfme(Double.parseDouble(orderTemplate.getAnfme())) // .setIsptResult(QlyIsptResult.getDescVal(orderTemplate.getIsptResult())) //// .setTrackCode(trackCode) // .setBarcode(trackCode) // .setPlatOrderCode(orderTemplate.getPlatOrderCode()) // .setPlatWorkCode(orderTemplate.getPlatWorkCode()) // .setProjectCode(orderTemplate.getProjectCode()) // .setPoCode(orderTemplate.getDoCode()) // .setPurUnit(matnr.getUnit()) // .setCreateBy(loginUserId) // .setUpdateBy(loginUserId) // .setSpec(matnr.getSpec()) // .setModel(matnr.getModel()) // .setMaktx(matnr.getName()) // .setMatnrCode(matnr.getCode()) // .setMatnrId(matnr.getId()) // .setStockUnit(matnr.getUnit()); // if (!Objects.isNull(orderTemplate.getSplrCode())) { // Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>() // .eq(Companys::getType, CompanysType.COMPANYS_TYPE_SUPPLIER.val) // .eq(Companys::getCode, orderTemplate.getSplrCode())); // if (!Objects.isNull(companys)) { // orderItem.setSplrCode(companys.getCode()).setSplrName(companys.getName()); // } else { // sbFaild.append("供应商:" + orderTemplate.getSplrCode()).append("不存在"); // throw new CoolException(sbFaild.toString()); // } // } else { // continue; // } // items.add(orderItem); // // if (!deliveryItemService.save(orderItem)) { // throw new CoolException("单据明细保存失败!!"); // } // } // if (!items.isEmpty()) { //// double qty = items.stream().mapToDouble(AsnOrderItem::getQty).sum(); // double anfme = items.stream().mapToDouble(DeliveryItem::getAnfme).sum(); // if (!deliveryService.update(new LambdaUpdateWrapper<Delivery>() //// .set(AsnOrder::getQty, qty) // .set(Delivery::getAnfme, anfme) // .eq(Delivery::getId, order.getId()))) { // throw new CoolException("单据数量修改失败!!"); // } // } // // // } // // // return null; // } } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -77,26 +77,11 @@ if (!locService.updateById(loc)) { throw new CoolException("库位状态更新失败!!"); } Task moveTask = new Task(); if (!LocUtils.isShallowLoc(loc.getCode())) { //获取深库位对应浅库位 String shallowLoc = LocUtils.getShallowLoc(loc.getCode()); Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc)); if (Objects.isNull(one)) { throw new CoolException("对应库位不存在!!"); } map.setOrgLoc(one.getCode()); //优先生成移库任务 if (!one.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { moveTask = genMoveTask(map, loginUserId); } } String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); task.setOrgLoc(loc.getCode()) .setTaskCode(ruleCode) .setParentId(moveTask.getId()) .setTargSite(siteNo) .setSort(Constants.TASK_SORT_DEFAULT_VALUE) .setUpdateBy(loginUserId) @@ -133,7 +118,6 @@ throw new CoolException("站点不支持拣料出库!!"); } task.setTaskType(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type).setWarehType(deviceSite.getDevice()); } else { //全板出库 DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() @@ -162,12 +146,40 @@ throw new CoolException("任务创建失败!!"); } if (!Objects.isNull(moveTask.getId())) { moveTask.setParentId(task.getId()); if (!taskService.saveOrUpdate(moveTask)) { throw new CoolException("任务信息修改失败!!"); if (!LocUtils.isShallowLoc(loc.getCode())) { //获取深库位对应浅库位 String shallowLoc = LocUtils.getShallowLoc(loc.getCode()); Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc)); if (Objects.isNull(one)) { throw new CoolException("对应库位不存在!!"); } Task workTask = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, one.getBarcode())); if (Objects.isNull(workTask)) { map.setOrgLoc(one.getCode()); //优先生成移库任务 if (one.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { moveTask = genMoveTask(map, loginUserId); task.setParentId(moveTask.getId()); if (!taskService.updateById(task)) { throw new CoolException("主任务关联失败!!"); } } } else { workTask.setSort(task.getSort() + 1).setParentId(task.getId()); if (!taskService.updateById(workTask)) { throw new CoolException("优先级修改失败!!"); } } } // if (!Objects.isNull(moveTask.getId())) { // moveTask.setParentId(task.getId()).setSort(moveTask.getSort() - 1); // if (!taskService.saveOrUpdate(moveTask)) { // throw new CoolException("任务信息修改失败!!"); // } // } List<TaskItem> taskItems = new ArrayList<>(); listMap.get(key).forEach(item -> { @@ -231,25 +243,22 @@ if (Objects.isNull(map.getOrgLoc()) || StringUtils.isBlank(map.getOrgLoc())) { throw new CoolException("源库位不能为空!"); } Loc orgLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, map.getOrgLoc())); if (Objects.isNull(orgLoc)) { throw new CoolException("源库位不存在!!"); } // if (orgLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_R.type) // || orgLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_S.type) // || orgLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_X.type ) ) { // throw new CoolException("源库位有任务正在执行中..."); // } orgLoc.setUseStatus(LocStsType.LOC_STS_TYPE_R.type); if (!locService.updateById(orgLoc)) { throw new CoolException("出库预约失败!!"); } Loc targetLoc = new Loc(); Loc targetLoc; if (Objects.isNull(map.getTarLoc()) || StringUtils.isBlank(map.getTarLoc())) { //目标库位为空,自动获取新库位 DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() @@ -264,7 +273,7 @@ .setSourceStaNo(Integer.parseInt(deviceSite.getSite())) .setLocType1(Integer.parseInt(orgLoc.getType()) ); InTaskMsgDto locNo = null; InTaskMsgDto locNo; try { locNo = wcsService.getLocNo(param); } catch (Exception e) { @@ -295,7 +304,7 @@ .setUpdateBy(loginUserId) .setSort(Constants.TASK_SORT_DEFAULT_VALUE) .setUpdateTime(new Date()) .setTaskStatus(TaskStsType.GENERATE_OUT.id) .setTaskStatus(TaskStsType.GENERATE_IN.id) .setBarcode(orgLoc.getBarcode()); if (!taskService.save(task)) { @@ -316,8 +325,8 @@ .setSourceCode(item.getLocCode()) .setSource(item.getId()) .setUpdateTime(new Date()) .setOrderType(OrderType.ORDER_OUT.type) .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)); .setOrderType(OrderType.ORDER_IN.type) .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)); taskItems.add(taskItem); } if (!taskItemService.saveBatch(taskItems)) { rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -455,10 +455,12 @@ } modiftyTaskSort(task, loginUserId); // // if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { // task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); // } else { task.setTaskStatus(task.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.COMPLETE_OUT.id); // } if (!this.updateById(task)) { throw new CoolException("完成任务失败"); } @@ -511,7 +513,18 @@ // // return moveTask; // } } else { } return task; } /** * 任务完成后,判断深库位是否为空,如果为空生成移库任务 * @param loginUserId * @param curLoc */ @Override @Transactional(rollbackFor = Exception.class) public void moveToDeep(Long loginUserId, String curLoc) throws Exception { //浅库位,判断深对应深库位是否为空,如果为空生成一个移库任务,将托盘送入深库位 String deepLoc = LocUtils.getDeepLoc(curLoc); if (StringUtils.isBlank(deepLoc)) { @@ -528,9 +541,6 @@ //生成移深库位任务 locItemService.genMoveTask(params, loginUserId); } } return task; } @Transactional(rollbackFor = Exception.class) @@ -719,7 +729,7 @@ } for (Task task : tasks) { //取消移库任务 if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type) && task.getTaskStatus().equals(TaskStsType.GENERATE_OUT.id)) { if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type) && task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id)) { if (!locService.update(new LambdaUpdateWrapper<Loc>() .eq(Loc::getCode, task.getOrgLoc()) .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type))) { @@ -742,11 +752,9 @@ outTask.setParentId(moveTask.getId()); if (!this.updateById(outTask)) { throw new CoolException("任务信息修改失败!!"); } } else { throw new CoolException("无法生成新的移库任务,取消失败!!"); // throw new CoolException("无法生成新的移库任务,取消失败!!"); } }