rsf-admin/src/page/stockManage/locRevise/LocReviseEdit.jsx
@@ -18,6 +18,8 @@ NumberField, required, useRecordContext, useGetRecordId, useGetOne, DeleteButton, } from 'react-admin'; import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting'; @@ -34,6 +36,10 @@ const LocReviseEdit = () => { const translate = useTranslate(); const [disabled, setDisabled] = useState(false); const orderId = useGetRecordId(); const {data, isPending} = useGetOne("locRevise", {id: orderId}); console.log(data); const FormToolbar = () => { return ( @@ -136,7 +142,7 @@ </Grid> </SimpleForm> </Edit > <ReviseLogList /> <ReviseLogList record = {data}/> </> ) } rsf-admin/src/page/stockManage/locRevise/LocReviseList.jsx
@@ -147,7 +147,7 @@ <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} /> <DelButton /> <CompleteButton /> </WrapperField> </StyledDatagrid> @@ -166,6 +166,13 @@ ) } const DelButton = () => { const record = useRecordContext(); return ( record?.exceStatus == 0 ? <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> : <></> ) } //完成单据 const CompleteButton = () => { const record = useRecordContext(); rsf-admin/src/page/stockManage/locRevise/LocsReviseDetl.jsx
@@ -101,6 +101,7 @@ const getData = async (matnr) => { setIsLoading(true) const res = await request.post(`/reviseLogItem/page`, { // const res = await request.post(`/locItem/page`, { locCode: record?.locCode, matnrCode: matnr, current: page?.page, @@ -153,7 +154,7 @@ backgroundColor: 'background.paper', zIndex: 1000 }}> {translate("common.action.newAddMats")} {translate("common.button.edit")} <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}> <DialogCloseButton onClose={handleClose} /> </Box> rsf-admin/src/page/stockManage/locRevise/ReviseLogList.jsx
@@ -33,6 +33,7 @@ DeleteButton, useGetRecordId, Button, useGetOne, } from 'react-admin'; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import MyCreateButton from "@/page/components/MyCreateButton"; @@ -85,7 +86,7 @@ />, ] const ReviseLogList = () => { const ReviseLogList = ({ record }) => { const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); const [item, setItem] = useState(); @@ -106,12 +107,12 @@ title={false} empty={false} filters={filters} filter={{ reviseId: orderId }} filter={{ reviseId: record?.id }} sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> <FilterButton /> <MyCreateButton onClick={() => { setCreateDialog(true); }} /> <CreateItemButton setCreateDialog={setCreateDialog} record={record} /> <SelectColumnsButton preferenceKey='check' /> </TopToolbar> )} @@ -145,14 +146,14 @@ <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"> <EditLocRevise setDrawerVal={setDrawerVal} setItem={setItem} /> <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} redirect={false} /> </WrapperField> <EditOperatate setDrawerVal={setDrawerVal} setItem={setItem} record={record} /> </WrapperField > </StyledDatagrid> </List> <SelectLocsRevise locRevise={orderId} open={createDialog} record={record} setOpen={setCreateDialog} /> <LocsReviseDetl @@ -166,6 +167,23 @@ export default ReviseLogList; const CreateItemButton = ({ setCreateDialog, record }) => { return ( record?.exceStatus < 2 ? <MyCreateButton onClick={() => { setCreateDialog(true); }} /> : <></> ) } const EditOperatate = ({ setDrawerVal, setItem, record }) => { return ( record?.exceStatus < 2 ? <> <EditLocRevise setDrawerVal={setDrawerVal} setItem={setItem} /> <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} redirect={false} /> </> : <></> ) } const EditLocRevise = ({ setDrawerVal, setItem }) => { const record = useRecordContext(); const editRevise = () => { rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/SyncOrderController.java
@@ -117,7 +117,6 @@ if (Objects.isNull(transferParams)) { throw new CoolException("参数不能为空!!"); } return receiveMsgService.syncTransfer(transferParams, getLoginUserId()); } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java
@@ -49,6 +49,7 @@ @ApiModelProperty(value= "主单ID") private Long locId; @ApiModelProperty("库位编码") private String locCode; rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ReviseLog.java
@@ -59,6 +59,7 @@ @ApiModelProperty(value= "库区ID") private Long areaId; /***库位编码*/ @ApiModelProperty("库位") private String locCode; rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java
@@ -19,6 +19,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @Service("reviseLogService") @@ -35,11 +36,13 @@ @Autowired private LocService locService; @Autowired private ReviseLogItemService reviseLogItemService; /** * 库存调整单明细添加 * * @param revise * @param loginUserId * @return @@ -62,11 +65,29 @@ .setReviseId(locRevise.getId()) .setCreateBy(loginUserId) .setUpdateBy(loginUserId) .setReviseCode(locRevise.getCode()) ; .setReviseCode(locRevise.getCode()); if (!reviseLogService.save(reviseLog)) { throw new CoolException("调整单明细保存失败!!"); } List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>() .eq(LocItem::getLocCode, item.getLocCode())); if (!locItems.isEmpty()) { locItems.forEach(ote -> { ReviseLogItem logItem = new ReviseLogItem(); BeanUtils.copyProperties(ote, logItem); logItem.setReviseLogId(reviseLog.getId()); if (!reviseLogItemService.save(logItem)) { throw new CoolException("明细保存失败!!"); } }); } Double sum = locItems.stream().mapToDouble(LocItem::getAnfme).sum(); locRevise.setAnfme(Math.round((sum + locRevise.getAnfme()) * 10000) / 10000.0); }); locRevise.setExceStatus(CommonExceStatus.COMMON_EXCE_STATUS_UN_EXCE.val); if (!locReviseService.updateById(locRevise)) { @@ -91,41 +112,34 @@ if (!revise.getExceStatus().equals(CommonExceStatus.COMMON_EXCE_STATUS_EXCE_ING.val)) { throw new CoolException("单据状态未执行或已完成,无法执行完成操作!!"); } ReviseLog logs = reviseLogService.getOne(new LambdaQueryWrapper<ReviseLog>().eq(ReviseLog::getReviseId, revise.getId())); if (Objects.isNull(logs)) { List<ReviseLog> logs = reviseLogService.list(new LambdaQueryWrapper<ReviseLog>().eq(ReviseLog::getReviseId, revise.getId())); if (logs.isEmpty()) { throw new CoolException("库存日志不存在!!"); } List<ReviseLogItem> logItems = reviseLogItemService.list(new LambdaQueryWrapper<ReviseLogItem>().eq(ReviseLogItem::getReviseLogId, logs.getId())); Set<Long> longs = logs.stream().map(ReviseLog::getId).collect(Collectors.toSet()); List<ReviseLogItem> logItems = reviseLogItemService.list(new LambdaQueryWrapper<ReviseLogItem>().in(ReviseLogItem::getReviseLogId, longs)); if (logItems.isEmpty()) { throw new CoolException("调整明细为空!!"); } Map<Long, List<ReviseLogItem>> listMap = logItems.stream().collect(Collectors.groupingBy(ReviseLogItem::getLocId)); listMap.keySet().forEach(items -> { Loc loc = locService.getById(items); if (Objects.isNull(loc)) { throw new CoolException("库位不存在!!"); } locItemService.remove(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId())); listMap.get(items).forEach(logItem -> { LocItem one = locItemService.getOne(new LambdaQueryWrapper<LocItem>() .eq(LocItem::getMatnrId, logItem.getMatnrId()) .eq(StringUtils.isNotBlank(logItem.getBatch()), LocItem::getBatch, logItem.getBatch()) .eq(StringUtils.isNotBlank(logItem.getFieldsIndex()), LocItem::getFieldsIndex, logItem.getFieldsIndex()) .eq(LocItem::getLocCode, logItem.getLocCode())); if (Objects.isNull(one)) { LocItem locDetl = new LocItem(); BeanUtils.copyProperties(logItem, locDetl); locDetl.setLocId(loc.getId()) .setType(OrderType.ORDER_REVISE.type) .setLocCode(loc.getCode()) .setAnfme(logItem.getReviseQty()) .setUpdateBy(loginUserId) .setId(null) .setCreateBy(loginUserId); if (!locItemService.save(locDetl)) { throw new CoolException("库存明细保存失败!!"); } } else { one.setAnfme(logItem.getReviseQty()); if (!locItemService.updateById(one)) { throw new CoolException("库存明细修改失败!!"); } LocItem locDetl = new LocItem(); BeanUtils.copyProperties(logItem, locDetl); locDetl.setLocId(loc.getId()) .setType(OrderType.ORDER_REVISE.type) .setLocCode(loc.getCode()) .setAnfme(logItem.getReviseQty()) .setUpdateBy(loginUserId) .setId(null) .setCreateBy(loginUserId); if (!locItemService.save(locDetl)) { throw new CoolException("库存明细保存失败!!"); } }); }); rsf-server/src/main/resources/application-dev.yml
@@ -14,7 +14,7 @@ # url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai # username: rsf username: root url: jdbc:mysql://192.168.4.151:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai password: 34821015 type: com.alibaba.druid.pool.DruidDataSource druid: