skyouc
昨天 b110cc66907a093794b0887a6b2889e57c8c11fb
库存调整功能修改
9个文件已修改
97 ■■■■ 已修改文件
rsf-admin/src/page/stockManage/locRevise/LocReviseEdit.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/stockManage/locRevise/LocReviseList.jsx 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/stockManage/locRevise/LocsReviseDetl.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/stockManage/locRevise/ReviseLogList.jsx 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/SyncOrderController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ReviseLog.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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} />
                        <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
@@ -66,7 +69,25 @@
            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,24 +112,23 @@
        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())
@@ -120,12 +140,6 @@
                            .setCreateBy(loginUserId);
                    if (!locItemService.save(locDetl)) {
                        throw new CoolException("库存明细保存失败!!");
                    }
                } else {
                    one.setAnfme(logItem.getReviseQty());
                    if (!locItemService.updateById(one)) {
                        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: