From 553ffd71e38c1fcae9c678dae1106e820bbd5127 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期三, 04 六月 2025 08:10:47 +0800 Subject: [PATCH] 任务执行优化修改 --- rsf-admin/src/page/work/components/locItemInfoModal.jsx | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java | 65 +++-- rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx | 14 rsf-admin/src/page/work/stockTransfer/stockTransferList.jsx | 14 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java | 73 +++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java | 28 ++ rsf-admin/src/page/basicInfo/loc/LocList.jsx | 114 ++++++----- rsf-admin/src/page/work/outBound/OutBoundList.jsx | 26 +- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 60 +++-- rsf-admin/src/page/locItem/LocItemList.jsx | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/DeliveryItemService.java | 7 rsf-admin/src/page/task/TaskList.jsx | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java | 3 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java | 4 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java | 172 +++++++++++++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java | 12 16 files changed, 451 insertions(+), 147 deletions(-) diff --git a/rsf-admin/src/page/basicInfo/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx index c93cee0..3b945f5 100644 --- a/rsf-admin/src/page/basicInfo/loc/LocList.jsx +++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx @@ -83,58 +83,7 @@ }, })); -const filters = [ - <SearchInput source="condition" alwaysOn />, - <ReferenceInput - source="warehouseId" - label="table.field.loc.warehouseId" - reference="warehouse" - > - <AutocompleteInput - label="table.field.loc.warehouseId" - optionText="name" - filterToQuery={(val) => ({ name: val })} - /> - </ReferenceInput>, - <ReferenceInput - source="areaId" - label="table.field.loc.areaId" - reference="warehouseAreas" - > - <AutocompleteInput - label="table.field.loc.areaId" - optionText="name" - filterToQuery={(val) => ({ name: val })} - /> - </ReferenceInput>, - <TextInput source="code" label="table.field.loc.code" />, - <TextInput source="type" label="table.field.loc.type" />, - <TextInput source="name" label="table.field.loc.name" />, - <NumberInput source="flagLogic" label="table.field.loc.flagLogic" />, - <TextInput source="fucAtrrs" label="table.field.loc.fucAtrrs" />, - <TextInput source="barcode" label="table.field.loc.barcode" />, - <TextInput source="unit" label="table.field.loc.unit" />, - <TextInput source="size" label="table.field.loc.size" />, - <NumberInput source="row" label="table.field.loc.row" />, - <NumberInput source="col" label="table.field.loc.col" />, - <NumberInput source="lev" label="table.field.loc.lev" />, - <NumberInput source="channel" label="table.field.loc.channel" />, - <NumberInput source="maxParts" label="table.field.loc.maxParts" />, - <NumberInput source="maxPack" label="table.field.loc.maxPack" />, - <NumberInput source="flagLabelMange" label="table.field.loc.flagLabelMange" />, - <TextInput source="locAttrs" label="table.field.loc.locAttrs" />, - <TextInput label="common.field.memo" source="memo" />, - <SelectInput - label="common.field.status" - source="status" - choices={[ - { id: '1', name: 'common.enums.statusTrue' }, - { id: '0', name: 'common.enums.statusFalse' }, - ]} - resettable - />, -] const LocList = () => { const translate = useTranslate(); @@ -143,6 +92,69 @@ 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 + source="warehouseId" + label="table.field.loc.warehouseId" + reference="warehouse" + > + <AutocompleteInput + label="table.field.loc.warehouseId" + optionText="name" + filterToQuery={(val) => ({ name: val })} + /> + </ReferenceInput>, + <ReferenceInput + source="areaId" + label="table.field.loc.areaId" + reference="warehouseAreas" + > + <AutocompleteInput + label="table.field.loc.areaId" + optionText="name" + 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" />, + <NumberInput source="flagLogic" label="table.field.loc.flagLogic" />, + <TextInput source="fucAtrrs" label="table.field.loc.fucAtrrs" />, + <TextInput source="barcode" label="table.field.loc.barcode" />, + <TextInput source="unit" label="table.field.loc.unit" />, + <TextInput source="size" label="table.field.loc.size" />, + <NumberInput source="row" label="table.field.loc.row" />, + <NumberInput source="col" label="table.field.loc.col" />, + <NumberInput source="lev" label="table.field.loc.lev" />, + <NumberInput source="channel" label="table.field.loc.channel" />, + <NumberInput source="maxParts" label="table.field.loc.maxParts" />, + <NumberInput source="maxPack" label="table.field.loc.maxPack" />, + <NumberInput source="flagLabelMange" label="table.field.loc.flagLabelMange" />, + <TextInput source="locAttrs" label="table.field.loc.locAttrs" />, + + <TextInput label="common.field.memo" source="memo" />, + <SelectInput + label="common.field.status" + source="status" + choices={[ + { id: '1', name: 'common.enums.statusTrue' }, + { id: '0', name: 'common.enums.statusFalse' }, + ]} + resettable + />, + ] return ( <Box display="flex"> diff --git a/rsf-admin/src/page/locItem/LocItemList.jsx b/rsf-admin/src/page/locItem/LocItemList.jsx index 5051b92..8cce6c2 100644 --- a/rsf-admin/src/page/locItem/LocItemList.jsx +++ b/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} diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx index 5d40fac..52dd7e2 100644 --- a/rsf-admin/src/page/task/TaskList.jsx +++ b/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} />) : (<></>) ) } diff --git a/rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx b/rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx index d48c170..d28751b 100644 --- a/rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx +++ b/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'), diff --git a/rsf-admin/src/page/work/components/locItemInfoModal.jsx b/rsf-admin/src/page/work/components/locItemInfoModal.jsx index 3f7d883..9061c88 100644 --- a/rsf-admin/src/page/work/components/locItemInfoModal.jsx +++ b/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 }, ]) diff --git a/rsf-admin/src/page/work/outBound/OutBoundList.jsx b/rsf-admin/src/page/work/outBound/OutBoundList.jsx index 391ca1d..2a6494e 100644 --- a/rsf-admin/src/page/work/outBound/OutBoundList.jsx +++ b/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'), diff --git a/rsf-admin/src/page/work/stockTransfer/stockTransferList.jsx b/rsf-admin/src/page/work/stockTransfer/stockTransferList.jsx index 66e82eb..5c4bce0 100644 --- a/rsf-admin/src/page/work/stockTransfer/stockTransferList.jsx +++ b/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'), diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java index e4a9178..adf0cba 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java +++ b/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()); } } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java index 86e8297..69ccd27 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java +++ b/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; /** * 渚涘簲鍟嗙紪鐮� diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java index 13b453f..e63a975 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java +++ b/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 diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/DeliveryItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/DeliveryItemService.java index 5c5ec62..1abc71d 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/DeliveryItemService.java +++ b/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; } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java index 1d20247..ee9b819 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java @@ -12,12 +12,12 @@ R generateTasks(GenerateTaskParams waitPakin, Long loginUserId); - R generateFlatWarehouseTasks(WaitPakin waitPakins,String locCode, Long loginUserId); + R generateFlatWarehouseTasks(WaitPakin waitPakins, String locCode, Long loginUserId); - R generateAGVTasks(WaitPakin waitPakins,String locCode,String orgSta, Long loginUserId); + R generateAGVTasks(WaitPakin waitPakins, String locCode, String orgSta, Long loginUserId); -// R completeTask(String id); - void completeTask(List<Task> task) throws Exception; + // R completeTask(String id); + void completeTask(List<Task> task) throws Exception; R removeTask(Long[] ids, Long loginUserId); @@ -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; +} \ No newline at end of file diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java index 22ee73d..a24f52f 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java +++ b/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(); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java index 2e4ae68..7e59d53 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java +++ b/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; +// } } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java index 43a083b..5fbaf0b 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java +++ b/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("婧愬簱浣嶆湁浠诲姟姝e湪鎵ц涓�..."); // } - 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)) { diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java index 2b3e618..9ad72a4 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java +++ b/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,26 +513,34 @@ // // return moveTask; // } - } else { - //娴呭簱浣嶏紝鍒ゆ柇娣卞搴旀繁搴撲綅鏄惁涓虹┖锛屽鏋滀负绌虹敓鎴愪竴涓Щ搴撲换鍔★紝灏嗘墭鐩橀�佸叆娣卞簱浣� - String deepLoc = LocUtils.getDeepLoc(curLoc); - if (StringUtils.isBlank(deepLoc)) { - throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛橈紒"); - } - Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, deepLoc)); - if (Objects.isNull(loc)) { - throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒"); - } - //鍒ゆ柇娣卞簱浣嶆槸鍚︿负绌� - if (loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { - LocToTaskParams params = new LocToTaskParams(); - params.setOrgLoc(curLoc).setTarLoc(deepLoc); - //鐢熸垚绉绘繁搴撲綅浠诲姟 - locItemService.genMoveTask(params, loginUserId); - } } - 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)) { + throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛橈紒"); + } + Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, deepLoc)); + if (Objects.isNull(loc)) { + throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒"); + } + //鍒ゆ柇娣卞簱浣嶆槸鍚︿负绌� + if (loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { + LocToTaskParams params = new LocToTaskParams(); + params.setOrgLoc(curLoc).setTarLoc(deepLoc); + //鐢熸垚绉绘繁搴撲綅浠诲姟 + locItemService.genMoveTask(params, loginUserId); + } } @Transactional(rollbackFor = Exception.class) @@ -708,8 +718,8 @@ @Transactional(rollbackFor = Exception.class) public R removeTask(Long[] ids, Long loginUserId) { List<Integer> longs = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id); - List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type,TaskType.TASK_TYPE_PICK_AGAIN_OUT.type, - TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_EMPITY_IN.type, TaskType.TASK_TYPE_LOC_MOVE.type, + List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_PICK_AGAIN_OUT.type, + TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_EMPITY_IN.type, TaskType.TASK_TYPE_LOC_MOVE.type, TaskType.TASK_TYPE_EMPITY_OUT.type, TaskType.TASK_TYPE_MERGE_OUT.type); List<Task> tasks = this.list(new LambdaQueryWrapper<Task>() .in(Task::getTaskType, list) @@ -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("鏃犳硶鐢熸垚鏂扮殑绉诲簱浠诲姟锛屽彇娑堝け璐ワ紒锛�"); } } -- Gitblit v1.9.1