From 2b35183407eb7b1b1524f7b101f1098d9caea042 Mon Sep 17 00:00:00 2001 From: verou <857149855@qq.com> Date: 星期三, 02 四月 2025 15:13:24 +0800 Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop --- rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java | 58 +++++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java | 16 ++ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java | 12 ++ rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java | 3 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java | 27 +++- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 3 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 31 ++++ rsf-admin/src/page/task/TaskList.jsx | 137 ++++++++++++++++++++-- rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/CheckObjDto.java | 6 + rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java | 6 + rsf-admin/src/i18n/zh.js | 3 rsf-admin/src/i18n/en.js | 3 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java | 13 ++ 14 files changed, 292 insertions(+), 28 deletions(-) diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js index b790701..3f3392d 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -784,6 +784,9 @@ siteInit: 'site init', batch: 'batch', confirm: 'confirm', + cancel: "cancel", + top: "top", + resort: "sort", subzone: 'subzone', bindmatnr: 'bind matnr', bindloc: 'bind loc', diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index e06766b..52264fc 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -796,6 +796,9 @@ siteInit: '绔欑偣鍒濆鍖�', batch: '鎵归噺鎿嶄綔', confirm: '纭', + cancel: "鍙栨秷", + top: "缃《", + resort: "鎺掑簭", subzone: '缁戝畾鍒嗗尯', bindmatnr: '缁戝畾鐗╂枡', bindloc: '缁戝畾搴撲綅', diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx index 5cd8e66..64b1462 100644 --- a/rsf-admin/src/page/task/TaskList.jsx +++ b/rsf-admin/src/page/task/TaskList.jsx @@ -31,6 +31,7 @@ ReferenceArrayInput, AutocompleteInput, DeleteButton, + Button, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -39,6 +40,10 @@ import EmptyData from "../components/EmptyData"; import MyCreateButton from "../components/MyCreateButton"; import MyExportButton from '../components/MyExportButton'; +import SwapVertIcon from '@mui/icons-material/SwapVert'; +import AlignVerticalTopIcon from '@mui/icons-material/AlignVerticalTop'; +import TaskAltIcon from '@mui/icons-material/TaskAlt'; +import CancelIcon from '@mui/icons-material/Cancel'; import PageDrawer from "../components/PageDrawer"; import MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; @@ -62,7 +67,6 @@ <SearchInput source="condition" alwaysOn />, <DateInput label='common.time.after' source="timeStart" alwaysOn />, <DateInput label='common.time.before' source="timeEnd" alwaysOn />, - <TextInput source="taskCode" label="table.field.task.taskCode" />, <NumberInput source="taskStatus" label="table.field.task.taskStatus" />, <NumberInput source="taskType" label="table.field.task.taskType" />, @@ -92,7 +96,6 @@ const TaskList = () => { const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); @@ -108,26 +111,33 @@ marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} title={"menu.task"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} + // empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} filters={filters} sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> + {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */} <SelectColumnsButton preferenceKey='task' /> - <MyExportButton /> + {/* <MyExportButton /> */} </TopToolbar> )} perPage={DEFAULT_PAGE_SIZE} > <StyledDatagrid preferenceKey='task' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + // bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + bulkActionButtons={ + <> + <BulkResortButton /> + <BulkCancelButton /> + <BulkDeleteButton mutationMode={OPERATE_MODE} /> + </> + } rowClick={(id, resource, record) => false} - expand={() => <TaskPanel />} - expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo']} + // expand={() => <TaskPanel />} + // expandSingle={true} + omit={['id', 'createTime', 'createBy', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'sort']} > <NumberField source="id" /> <TextField source="taskCode" label="table.field.task.taskCode" /> @@ -154,15 +164,17 @@ <BooleanField source="statusBool" label="common.field.status" sortable={false} /> <TextField source="memo" label="common.field.memo" sortable={false} /> <WrapperField cellClassName="opt" label="common.field.opt"> - <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> - <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + {/* <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> */} + <DoneButton sx={{ padding: '1px', fontSize: '.75rem' }} ></DoneButton> + <CancelButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + <SetTopButton sx={{ padding: '1px', fontSize: '.75rem' }} ></SetTopButton> </WrapperField> </StyledDatagrid> </List> - <TaskCreate + {/* <TaskCreate open={createDialog} setOpen={setCreateDialog} - /> + /> */} <PageDrawer title='Task Detail' drawerVal={drawerVal} @@ -174,3 +186,102 @@ } export default TaskList; +/** + * 瀹屾垚鎿嶄綔 + * @returns + */ +const DoneButton = () => { + const record = useRecordContext(); + const clickComplete = () => { + completeTask([record]) + }; + //瀹屾垚浠诲姟 + const completeTask = async (row) => { } + return ( + <Button + onClick={clickComplete} + label="toolbar.complete"> + <TaskAltIcon /> + </Button> + ) +} + +/** + * 鍙栨秷鎸夐挳 + * @returns + */ +const CancelButton = () => { + const record = useRecordContext(); + const clickCancel = () => { + cancleTask([record]) + }; + //鍙栨秷浠诲姟 + const cancleTask = async (row) => {} + return ( + <Button + onClick={clickCancel} + label="toolbar.cancel"> + <CancelIcon /> + </Button> + ) +} +/** + * 缃《鎿嶄綔 + * @returns + */ +const SetTopButton = () => { + const record = useRecordContext(); + const clickTop = () => { + topTask([record]) + }; + //缃《浠诲姟 + const topTask = async (row) => { } + return ( + <Button + onClick={clickTop} + label="toolbar.top"> + <AlignVerticalTopIcon /> + </Button> + ) +} + +/** + * 鎵归噺鍙栨秷 + * @returns + */ +const BulkCancelButton = () => { + const record = useRecordContext(); + const clickCancel = () => { + cancleTask([record]) + }; + //鍙栨秷浠诲姟 + const cancleTask = async (row) => {} + return ( + <Button + onClick={clickCancel} + label="toolbar.cancel"> + <CancelIcon /> + </Button> + ) +} + +/** + * 鎵归噺鎺掑簭 + * @returns + */ +const BulkResortButton = () => { + const record = useRecordContext(); + const bulkResort = () => { + resortTask([record]) + }; + //鎵归噺鎺掑簭 + const resortTask = async (row) => { } + return ( + <Button + onClick={bulkResort} + label="toolbar.resort"> + <SwapVertIcon /> + </Button> + ) + +} \ No newline at end of file diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java index ac02aaa..5d55a19 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java @@ -89,7 +89,6 @@ return mobileService.receiptToWarehouse(params); } - @PreAuthorize("hasAuthority('manager:asnOrder:list')") @PostMapping("/orders/other") @ApiOperation("鍏跺畠鎵爜鏀惰揣") @@ -186,6 +185,7 @@ return mobileService.confirmIspt(id); } + @ApiOperation("蹇�熻川妫�淇℃伅") @PreAuthorize("hasAuthority('manager:qlyInspect:list')") @PostMapping("/inspect/query") public R checkObjs(@RequestBody CheckObjParams params) { @@ -196,6 +196,7 @@ } + @ApiOperation("蹇甫璐ㄦ") @PreAuthorize("hasAuthority('manager:qlyInspect:update')") @PostMapping("/inspect/check/update") public R checkUpdate(@RequestBody QlyIsptItem params) { diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/CheckObjDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/CheckObjDto.java index ead8f00..241379c 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/CheckObjDto.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/CheckObjDto.java @@ -14,6 +14,8 @@ private static final long serialVersionUID = 1L; + @ApiModelProperty("ID") + private Long id; @ApiModelProperty("璐ㄦ鍗�") private String isptCode; @ApiModelProperty("鐗╂枡缂栫爜") @@ -28,12 +30,16 @@ private String splrBatch; @ApiModelProperty("鏀惰揣鏁伴噺") private Double rcptQty; + @ApiModelProperty("閫佽揣鏁伴噺") + private Double dlyQty; @ApiModelProperty("鍚堟牸鏁伴噺") private Double safeQty; @ApiModelProperty("涓嶅悎鏍兼暟閲�") private Double disQty; @ApiModelProperty("鍥剧墖璺緞") private String picPath; + @ApiModelProperty("璐ㄦ缁撴灉") + private String isptResult; @ApiModelProperty("澶囨敞") private String memo; } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java index e53bd94..90a66e0 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java @@ -522,10 +522,13 @@ CheckObjDto objDto = new CheckObjDto(); objDto.setIsptCode(inspect.getCode()) .setAsnCode(inspect.getAsnCode()) + .setId(isptItem.getId()) .setMatnrCode(isptItem.getMatnrCode()) .setMaktx(isptItem.getMaktx()) .setDisQty(isptItem.getDisQty()) + .setDlyQty(isptItem.getDlyQty()) .setRcptQty(isptItem.getRcptQty()) + .setIsptResult(isptItem.getIsptResult()) .setSplrBatch(isptItem.getSplrBatch()) .setSplrName(isptItem.getSplrName()) .setPicPath(isptItem.getPicPath()) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java index 2805e07..ced3cec 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java @@ -4,6 +4,7 @@ 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,6 +15,7 @@ import com.vincent.rsf.server.manager.service.TaskItemService; import com.vincent.rsf.server.manager.service.TaskService; import com.vincent.rsf.server.system.controller.BaseController; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; @@ -121,4 +123,15 @@ ExcelUtil.build(ExcelUtil.create(taskService.list(), Task.class), response); } + + @PreAuthorize("hasAuthority('manager:task:update')") + @ApiOperation("瀹屾垚浠诲姟") + @GetMapping("/task/complete/{id}") + public R completeTask(@PathVariable String id) { + if (Objects.isNull(id)) { + throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + return taskService.completeTask(id); + } + } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java index 0c29bfe..4a674b5 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java @@ -11,8 +11,10 @@ import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; +import com.vincent.rsf.server.manager.entity.TaskItem; import com.vincent.rsf.server.manager.entity.WaitPakin; import com.vincent.rsf.server.manager.entity.WaitPakinItem; +import com.vincent.rsf.server.manager.service.TaskItemService; import com.vincent.rsf.server.manager.service.TaskService; import com.vincent.rsf.server.manager.service.WaitPakinItemService; import com.vincent.rsf.server.manager.service.WaitPakinService; @@ -22,10 +24,12 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.*; +import java.util.stream.Collectors; @Api(tags = "缁勬嫋閫氱煡妗�") @RestController @@ -39,6 +43,8 @@ @Autowired private TaskService taskService; + @Autowired + private TaskItemService taskItemService; @PreAuthorize("hasAuthority('manager:waitPakin:list')") @PostMapping("/waitPakin/page") @@ -100,15 +106,23 @@ @PreAuthorize("hasAuthority('manager:waitPakin:remove')") @OperationLog("Delete 缁勬嫋妗�") @PostMapping("/waitPakin/remove/{ids}") + @Transactional(rollbackFor = Exception.class) public R remove(@PathVariable Long[] ids) { List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>() .in(WaitPakinItem::getPakinId, ids)); if (!pakinItems.isEmpty()) { - return R.error("缁勬嫋妗f湁鏄庣粏浠诲姟"); + List<Long> list = pakinItems.stream().map(WaitPakinItem::getId).collect(Collectors.toList()); + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSource, list)); + if (!taskItems.isEmpty()) { + return R.error("缁勬嫋妗f湁鏄庣粏浠诲姟"); + } } if (!waitPakinService.removeByIds(Arrays.asList(ids))) { return R.error("Delete Fail"); } + if (!waitPakinItemService.removeByIds(pakinItems)) { + throw new CoolException("鏄庣粏鍒犻櫎澶辫触锛侊紒"); + } return R.ok("Delete Success").add(ids); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java index fef2580..edd0274 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java @@ -4,12 +4,15 @@ 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; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; +import com.vincent.rsf.server.manager.entity.TaskItem; import com.vincent.rsf.server.manager.entity.WaitPakinItem; +import com.vincent.rsf.server.manager.service.TaskItemService; import com.vincent.rsf.server.manager.service.WaitPakinItemService; import com.vincent.rsf.server.system.controller.BaseController; import io.swagger.annotations.Api; @@ -26,6 +29,8 @@ @Autowired private WaitPakinItemService waitPakinItemService; + @Autowired + private TaskItemService taskItemService; @PreAuthorize("hasAuthority('manager:waitPakinItem:list')") @PostMapping("/waitPakinItem/page") @@ -83,6 +88,13 @@ @OperationLog("Delete 缁勬嫋妗f槑缁�") @PostMapping("/waitPakinItem/remove/{ids}") public R remove(@PathVariable Long[] ids) { + if (Objects.isNull(ids) || ids.length < 1) { + return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSource, ids)); + if (!taskItems.isEmpty()) { + throw new CoolException("鏈変换鍔℃槑缁嗘湭瀹屾垚"); + } if (!waitPakinItemService.removeByIds(Arrays.asList(ids))) { return R.error("Delete Fail"); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java index 7abbf6c..f9860c8 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java @@ -35,6 +35,12 @@ private Long id; /** + * 浠诲姟鏄庣粏ID + */ + @ApiModelProperty("浠诲姟鏄庣粏ID") + private Long taskItemId; + + /** * 搴撳瓨澶栭敭鏍囪瘑 */ @ApiModelProperty(value= "搴撳瓨澶栭敭鏍囪瘑") 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 new file mode 100644 index 0000000..4ce0193 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java @@ -0,0 +1,58 @@ +package com.vincent.rsf.server.manager.schedules; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.vincent.rsf.framework.exception.CoolException; +import com.vincent.rsf.server.api.entity.enums.TaskStsType; +import com.vincent.rsf.server.manager.entity.Task; +import com.vincent.rsf.server.manager.entity.TaskItem; +import com.vincent.rsf.server.manager.service.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author Ryan + * 浠诲姟宸ヤ綔妗� + */ +@Component +public class TaskSchedules { + + @Autowired + private TaskService taskService; + @Autowired + private TaskItemService taskItemService; + @Autowired + private StockItemService stockItemService; + @Autowired + private StockService stockService; + @Autowired + private LocService locService; + /** + * @author Ryan + * @description 瀹屾垚鍏ュ簱锛屾洿鏂板簱瀛� + * @param + * @return + * @time 2025/4/2 12:37 + */ + @Scheduled(cron = "0 0/05 * * * ? ") + @Transactional(rollbackFor = Exception.class) + public void completeInStock() { + List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)); + if (tasks.isEmpty()) { + return; + } + List<Long> list = tasks.stream().map(Task::getId).collect(Collectors.toList()); + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, list)); + if (taskItems.isEmpty()) { + throw new CoolException("浠诲姟鏄庣粏涓虹┖锛侊紒"); + } + taskItems.forEach(item -> { + + }); + } + +} 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 8051c06..b2ee0b1 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 @@ -10,4 +10,6 @@ public interface TaskService extends IService<Task> { R generateTasks(List<WaitPakin> waitPakin, Long loginUserId); + + R completeTask(String id); } 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 cd40c71..69a060d 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 @@ -1,6 +1,7 @@ package com.vincent.rsf.server.manager.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.server.api.entity.enums.OrderType; import com.vincent.rsf.server.api.entity.enums.TaskStsType; import com.vincent.rsf.framework.common.R; @@ -12,11 +13,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vincent.rsf.server.manager.utils.LocManageUtil; import com.vincent.rsf.server.system.constant.SerialRuleCode; +import com.vincent.rsf.server.system.enums.LocStsType; import com.vincent.rsf.server.system.utils.SerialRuleUtils; 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; import java.util.ArrayList; import java.util.List; @@ -32,6 +35,9 @@ private TaskItemService taskItemService; @Autowired private WaitPakinItemService waitPakinItemService; + @Autowired + private LocService locService; + @@ -44,7 +50,8 @@ * @time 2025/3/29 15:59 */ @Override - public R generateTasks(List<WaitPakin> waitPakin, Long loginUserId) { + @Transactional(rollbackFor = Exception.class) + public synchronized R generateTasks(List<WaitPakin> waitPakin, Long loginUserId) { if (Objects.isNull(waitPakin) || waitPakin.isEmpty()) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } @@ -73,6 +80,11 @@ if (!this.save(task)) { throw new CoolException("浠诲姟淇濆瓨澶辫触锛侊紒"); } + if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getCode, pakin.getCode()) + .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type).set(Loc::getBarcode, pakin.getBarcode()))) { + throw new CoolException("搴撲綅棰勭害澶辫触锛侊紒"); + } + /**鑾峰彇缁勬嫋鏄庣粏**/ List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, pakin.getId())); if (waitPakinItems.isEmpty()) { @@ -93,14 +105,23 @@ if (!taskItemService.saveBatch(taskItems)) { throw new CoolException("浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒"); } - - - }); - //TODO 浠诲姟鐢熸垚瀹屾垚闇�淇敼浠诲姟ASN璁㈠崟鐘舵�佷负鎵ц涓紝缁勬嫋鍒犻櫎闇�鍒ゆ柇鏄惁鏈夊瓙浠诲姟鍦ㄦ墽琛� return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�"); } + /** + * @author Ryan + * @description 瀹屾垚浠诲姟 + * @param + * @return + * @time 2025/4/2 11:15 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R completeTask(String id) { + return null; + } + } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java index 81875e9..cc8f42a 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java @@ -5,20 +5,15 @@ import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.PakinItem; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; -import com.vincent.rsf.server.manager.entity.AsnOrder; -import com.vincent.rsf.server.manager.entity.AsnOrderItem; -import com.vincent.rsf.server.manager.entity.WaitPakinItem; +import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.mapper.WaitPakinMapper; -import com.vincent.rsf.server.manager.entity.WaitPakin; -import com.vincent.rsf.server.manager.service.AsnOrderItemService; -import com.vincent.rsf.server.manager.service.AsnOrderService; -import com.vincent.rsf.server.manager.service.WaitPakinItemService; -import com.vincent.rsf.server.manager.service.WaitPakinService; +import com.vincent.rsf.server.manager.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.security.core.parameters.P; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -40,6 +35,8 @@ private WaitPakinService waitPakinService; @Autowired private WaitPakinItemService waitPakinItemService; + @Autowired + private LocService locService; /** * @author Ryan @@ -58,6 +55,20 @@ throw new CoolException("鍙傛暟閿欒锛氭墭鐩樼爜涓虹┖锛侊紒"); } + List<WaitPakin> list = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, waitPakin.getBarcode())); + if (!list.isEmpty()) { + List<String> stringList = list.stream().map(WaitPakin::getCode).collect(Collectors.toList()); + String join = StringUtils.join(stringList, ","); + throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶缁勬嫋鍗曪細" + join + "浣跨敤锛侊紒"); + } + + List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, waitPakin.getBarcode())); + if (!locs.isEmpty()) { + List<String> locCodes = locs.stream().map(Loc::getCode).collect(Collectors.toList()); + String join = StringUtils.join(locCodes, ","); + throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶搴撲綅锛�" + join + "浣跨敤锛侊紒"); + } + double sum = waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum(); WaitPakin pakin = new WaitPakin(); -- Gitblit v1.9.1