zjj
2025-04-30 d97d7346ec794ffa34077160bb13424f2f84bc57
Merge remote-tracking branch 'origin/devlop' into devlop
14个文件已修改
129 ■■■■■ 已修改文件
rsf-admin/src/App.jsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/core/chineseMessages.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/en.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/zh.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/outStock/OutOrderList.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/wave/WaveList.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/task/TaskList.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/App.jsx
@@ -44,6 +44,9 @@
  [
    { locale: "en", name: "English" },
    { locale: "zh", name: "简体中文" },
    // { locale: "zh", name: "简体中文" },
    // { locale: "zh", name: "简体中文" },
    // { locale: "zh", name: "简体中文" },
  ],
  {
    // msg in console
rsf-admin/src/i18n/core/chineseMessages.js
@@ -95,7 +95,7 @@
      delete_title: "删除 %{name} #%{id}",
      details: "Details",
      error: "A client error occurred and your request couldn't be completed.",
      invalid_form: "表单无效 请检查是否有错误!",
      loading: "Please wait",
      no: "No",
rsf-admin/src/i18n/en.js
@@ -1028,6 +1028,13 @@
        order: 'Orders',
    },
    request: {
        error: {
            stock: "Insufficient inventory to deliver !!"
        }
    }
};
export default customEnglishMessages;
rsf-admin/src/i18n/zh.js
@@ -1042,6 +1042,12 @@
        createWave: "生成波次",
        recover: "继续收货",
    },
    request: {
        error: {
            stock: "库存不足,无法提交!!"
        }
    }
};
export default customChineseMessages;
rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
@@ -66,9 +66,7 @@
    const notify = useNotify();
    const refresh = useRefresh();
    const [disabled, setDisabled] = useState(false)
    const [createDialog, setCreateDialog] = useState(false);
    const tableRef = useRef();
    useEffect(() => {
rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -51,7 +51,7 @@
import DictionarySelect from "../../components/DictionarySelect";
import ImportButton from "../../components/ImportButton";
import DetailsIcon from '@mui/icons-material/Details';
import CancelIcon from '@mui/icons-material/Cancel';
import CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';
import OutOrderCreate from "./OutOrderCreate";
import AddIcon from '@mui/icons-material/Add';
import OutOrderModal from "./OutOrderModal";
@@ -266,14 +266,12 @@
  return (
    <Button onClick={createByOrder} label={'toolbar.asnCreate'}> <AddIcon /> </Button>
  )
}
const CancelButton = () => {
  const record = useRecordContext();
  const notify = useNotify();
  const refresh = useRefresh();
  const cancelOrder = async () => {
    const { data: { code, data, msg } } = await request.get(`/outStock/cancel/${record?.id}`);
    if (code === 200) {
@@ -285,6 +283,6 @@
  }
  return (
    <ConfirmButton label={"toolbar.cancel"} startIcon={<CancelIcon />} onConfirm={cancelOrder} />
     record?.exceStatus == 0 ? <ConfirmButton label={"toolbar.cancel"} startIcon={<CancelOutlinedIcon />  } onConfirm={cancelOrder} /> : <></>
  )
}
rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx
@@ -133,7 +133,6 @@
                "orders": formData,
                "items": tabelData,
            }
            const res = await request.post(`/outStock/items/save`, parmas);
            if (res?.data?.code === 200) {
                setOpen(false);
rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx
@@ -150,7 +150,7 @@
                </DialogContent>
                <DialogActions>
                    <Toolbar sx={{ width: '100%', justifyContent: 'end' }} >
                        <GenerateTaskButton record={record?.id} dataSource={data} />
                        <GenerateTaskButton record={record?.id} dataSource={data} setOpen={setOpen}/>
                    </Toolbar>
                </DialogActions>
            </Dialog>
@@ -160,22 +160,32 @@
export default ItemToTaskModal;
const GenerateTaskButton = (record, dataSource) => {
const GenerateTaskButton = (record) => {
    const refresh = useRefresh();
    const notify = useNotify();
    const redirect = useRedirect();
    const translate = useTranslate();
    const { locs, setLocs } = useState([]);
    const generateTask = async () => {
        const params = {wave: record, waveItem: dataSource}
        console.log('---------->');
        console.log(record);
        const res = await request.post(`/wave/public/task`, { wave: record?.record, waveItem: record?.dataSource });
        if (res?.data?.code === 200) {
            notify(res.data.msg);
            redirect("/task")
        record?.dataSource.map(item => {
            const loc = JSON.parse(item.stockLocs);
            if (loc != undefined && loc.length > 0) {
                setLocs(...loc)
            }
        })
        if (locs == undefined || locs.length < 1) {
            notify(translate('request.error.stock'))
        } else {
            notify(res.data.msg);
            const res = await request.post(`/wave/public/task`, { wave: record?.record, waveItem: record?.dataSource });
            if (res?.data?.code === 200) {
                record.setOpen(false)
                notify(res.data.msg);
                redirect("/task")
            } else {
                notify(res.data.msg);
            }
            refresh();
        }
        refresh();
    }
    return (<Button variant="contained" label={"ra.action.save"} onClick={generateTask}></Button>)
}
rsf-admin/src/page/orders/wave/WaveList.jsx
@@ -184,11 +184,12 @@
    const notify = useNotify();
    const refresh = useRefresh();
    const redirect = useRedirect();
    const pubClick = async (event) => {
        setSelectIds(record);
        setDetailDialog(true);
    }
    return (
        <ConfirmButton label={"toolbar.createTask"} startIcon={<PublicIcon />} onConfirm={pubClick} />
        record?.exceStatus == 0 ? <ConfirmButton label={"toolbar.createTask"} startIcon={<PublicIcon /> } onConfirm={pubClick} size='small' /> : <></>
    );
}
rsf-admin/src/page/task/TaskList.jsx
@@ -103,7 +103,7 @@
                title={"menu.task"}
                empty={false}
                filters={filters}
                sort={{ field: "sort", order: "desc" }}
                sort={{ field: "create_time", order: "desc" }}
                actions={(
                    <TopToolbar>
                        <FilterButton />
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveController.java
@@ -12,8 +12,10 @@
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.Wave;
import com.vincent.rsf.server.manager.entity.WaveItem;
import com.vincent.rsf.server.manager.service.TaskItemService;
import com.vincent.rsf.server.manager.service.WaveService;
import com.vincent.rsf.server.system.controller.BaseController;
import io.swagger.annotations.ApiOperation;
@@ -30,6 +32,8 @@
    @Autowired
    private WaveService waveService;
    @Autowired
    private TaskItemService taskItemService;
    @PreAuthorize("hasAuthority('manager:wave:list')")
    @PostMapping("/wave/page")
@@ -85,6 +89,13 @@
    @OperationLog("Delete 波次单据")
    @PostMapping("/wave/remove/{ids}")
    public R remove(@PathVariable Long[] ids) {
        if (Objects.isNull(ids)) {
            throw new CoolException("参数不能为空!!");
        }
        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSourceId, ids));
        if (taskItems.isEmpty()) {
            throw new CoolException("有未完成任务,不可执行删除操作!!");
        }
        if (!waveService.removeByIds(Arrays.asList(ids))) {
            return R.error("Delete Fail");
        }
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
@@ -1,6 +1,5 @@
package com.vincent.rsf.server.manager.entity;
import com.baomidou.mybatisplus.annotation.TableLogic;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -10,12 +9,9 @@
import com.vincent.rsf.server.system.service.DictDataService;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -25,7 +21,6 @@
import com.vincent.rsf.server.system.service.UserService;
import com.vincent.rsf.server.system.entity.User;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
@Data
@@ -60,6 +55,12 @@
    @ApiModelProperty("源编码")
    private Long source;
    @ApiModelProperty("源单号")
    private String sourceCode;
    @ApiModelProperty("源主单ID")
    private Long sourceId;
    @ApiModelProperty("单据ID")
    private Long orderId;
@@ -99,6 +100,18 @@
    private Double anfme;
    /**
     * 执行数量
     */
    @ApiModelProperty("库存数量")
    private Double workQty;
    /**
     * 完成数量
     */
    @ApiModelProperty("完成数量")
    private Double qty;
    /**
     * 库存批次
     */
    @ApiModelProperty(value= "库存批次")
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -301,7 +301,7 @@
        double sum2 = orderItems.stream().mapToDouble(AsnOrderItem::getWorkQty).sum();
        if (!this.update(new LambdaUpdateWrapper<AsnOrder>()
                .set(AsnOrder::getWaveId, wave.getId())
                        .set(AsnOrder::getWorkQty, sum2)
                .set(AsnOrder::getWorkQty, sum2)
                .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val)
                .in(AsnOrder::getId, ids))) {
            throw new CoolException("执行状态修改修改失败!!");
@@ -310,10 +310,10 @@
    }
    /**
     * @author Ryan
     * @description 保存出库主单及明细
     * @param
     * @return
     * @author Ryan
     * @description 保存出库主单及明细
     * @time 2025/4/29 13:47
     */
    @Override
@@ -334,9 +334,9 @@
        if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) {
            throw new CoolException("编码规则错误:请检查「SYS_OUT_STOCK_CODE」是否设置正确!!");
        }
        orders.setCode(ruleCode)
                .setType(OrderType.ORDER_OUT.type)
                .setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
                .setUpdateBy(loginUserId)
                .setCreateBy(loginUserId);
        if (!this.save(orders)) {
@@ -347,7 +347,7 @@
        }
        params.setOrders(orders);
        try {
            svaeOrUpdateOrderItem(params,loginUserId);
            svaeOrUpdateOrderItem(params, loginUserId);
        } catch (Exception e) {
            throw new CoolException(e.getMessage());
        }
@@ -357,10 +357,10 @@
    /**
     * @author Ryan
     * @description 修改主单及明细
     * @param
     * @return
     * @author Ryan
     * @description 修改主单及明细
     * @time 2025/4/29 13:47
     */
    @Override
@@ -380,7 +380,7 @@
        }
        try {
            svaeOrUpdateOrderItem(params,loginUserId);
            svaeOrUpdateOrderItem(params, loginUserId);
        } catch (Exception e) {
            throw new CoolException(e.getMessage());
        }
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
@@ -68,7 +68,6 @@
        if (Objects.isNull(waves)) {
            throw new CoolException("波次数据不存在!!");
        }
//        List<Long> list = itemParams.stream().map(WaveItem::getWaveId).collect(Collectors.toList());
        List<WaveItem> waveItems = waveItemService.list(new LambdaQueryWrapper<WaveItem>().eq(WaveItem::getWaveId, waves.getId()));
        if (waveItems.isEmpty()) {
            throw new CoolException("波次明细不存在!!");
@@ -85,17 +84,12 @@
        // 3. 修改主单、波次执行数量
        // 4. 判断全仓出库或拣料出库
        List<Long> orderIds = waveItems.stream().map(WaveItem::getOrderId).collect(Collectors.toList());
//        List<AsnOrder> orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, orderIds));
        /**修改出库单状态*/
        if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>()
                .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val)
                .in(AsnOrder::getId, orderIds))) {
            throw new CoolException("出库单据状态修改失败!!");
        }
//        /**修改波次单据执行状态*/
//        if (!this.update(new LambdaUpdateWrapper<Wave>().set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK).eq(Wave::getId, waves.getId()))) {
//            throw new CoolException("波次状态修改失败!!");
//        }
        return R.ok();
    }
@@ -160,6 +154,12 @@
            if (Objects.isNull(loc)) {
                throw new CoolException("库位不存在!!");
            }
            List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSourceId, wave.getId()));
            if (items.isEmpty()) {
                throw new CoolException("波次任务已生成,不能重复生成!!");
            }
            task.setTaskCode(ruleCode)
                    .setTaskType(TaskType.TASK_TYPE_OUT.type)
                    .setTaskStatus(TaskStsType.GENERATE_OUT.id)
@@ -178,7 +178,10 @@
                TaskItem taskItem = new TaskItem();
                BeanUtils.copyProperties(item, taskItem);
                taskItem.setTaskId(task.getId())
                        .setAnfme(waveItem.getAnfme())
                        .setId(null)
                        .setSourceCode(wave.getCode())
                        .setSourceId(wave.getId())
                        .setSource(item.getWaveItemId());
                taskItems.add(taskItem);
            }