skyouc
3 天以前 5074c51d978a490a1d0e9dc116a874d33ddeb16c
DO单excel导入功能
任务工作档优化
14个文件已修改
491 ■■■■■ 已修改文件
rsf-admin/src/page/orders/delivery/DeliveryList.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/task/TaskList.jsx 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Delivery.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/DeliveryItemService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java 242 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/delivery/DeliveryList.jsx
@@ -40,6 +40,7 @@
import MyCreateButton from "../../components/MyCreateButton";
import MyExportButton from '../../components/MyExportButton';
import ImportButton from "../../components/ImportButton";
import BillStatusField from "../../components/BillStatusField";
import PageDrawer from "../../components/PageDrawer";
import MyField from "../../components/MyField";
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
@@ -103,13 +104,13 @@
                    marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
                }}
                title={"menu.delivery"}
                empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
                empty={false}
                filters={filters}
                sort={{ field: "create_time", order: "desc" }}
                actions={(
                    <TopToolbar>
                        <FilterButton />
                        <MyCreateButton onClick={() => { setCreateDialog(true) }} />
                        {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
                        <SelectColumnsButton preferenceKey='delivery' />
                        <ImportButton value={'delivery'} />
                        {/* <MyExportButton /> */}
@@ -141,7 +142,8 @@
                    <DateField source="updateTime" label="common.field.updateTime" showTime />
                    <TextField source="createBy$" label="common.field.createBy" />
                    <DateField source="createTime" label="common.field.createTime" showTime />
                    <BooleanField source="statusBool" label="common.field.status" sortable={false} />
                    <BillStatusField cellClassName="status" source="exceStatus" label="table.field.asnOrder.exceStatus" />
                    {/* <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' }} />
rsf-admin/src/page/task/TaskList.jsx
@@ -267,8 +267,7 @@
    const record = useRecordContext();
    const notify = useNotify();
    const refresh = useRefresh();
    const clickCancel = (event) => {
        event.stopPropagation();
    const clickCancel = () => {
        cancleTask(record)
    };
    //取消任务
@@ -284,11 +283,11 @@
    }
    return (
        (record.taskStatus == 1 || record.taskStatus == 101) && (record.taskType == 1 || record.taskType == 101 || record.taskType == 10 || record.taskType == 103 || record.taskType == 11) ?
            <Button
                onClick={clickCancel}
                label="toolbar.cancel">
                <CancelIcon />
            </Button>
            <ConfirmButton
                onConfirm={clickCancel}
                startIcon={<CancelIcon />}
                label={"toolbar.cancel"}>
            </ConfirmButton>
            :
            <></>
    )
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java
@@ -1,25 +1,35 @@
package com.vincent.rsf.server.manager.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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;
import com.vincent.rsf.server.common.domain.KeyValVo;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.entity.Delivery;
import com.vincent.rsf.server.manager.entity.DeliveryItem;
import com.vincent.rsf.server.manager.entity.excel.DeliveryTemplate;
import com.vincent.rsf.server.manager.enums.OrderType;
import com.vincent.rsf.server.manager.enums.OrderWorkType;
import com.vincent.rsf.server.manager.service.CompanysService;
import com.vincent.rsf.server.manager.service.DeliveryItemService;
import com.vincent.rsf.server.manager.service.DeliveryService;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.controller.BaseController;
import com.vincent.rsf.server.system.service.SerialRuleService;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
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.*;
@@ -29,6 +39,8 @@
    @Autowired
    private DeliveryService deliveryService;
    @Autowired
    private DeliveryItemService deliveryItemService;
    @PreAuthorize("hasAuthority('manager:delivery:list')")
    @PostMapping("/delivery/page")
@@ -121,7 +133,71 @@
    @PreAuthorize("hasAuthority('manager:delivery:list')")
    @PostMapping("/delivery/export")
    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
        ExcelUtil.build(ExcelUtil.create(deliveryService.list(), Delivery.class), response);
        if (!Cools.isEmpty(map) && !Cools.isEmpty(map.get("ids"))) {
            throw new CoolException("参数不能为空!!");
        }
        List<Delivery> orders = new ArrayList<>();
        if (!Objects.isNull(map.get("ids"))) {
            List<Long> ids = JSONArray.parseArray(JSONObject.toJSONString(map.get("ids")), Long.class);
            if (!ids.isEmpty()) {
                orders = deliveryService.list(new LambdaQueryWrapper<Delivery>().in(Delivery::getId, ids));
            } else {
                orders = deliveryService.list(new LambdaQueryWrapper<>());
            }
        } else {
            orders = deliveryService.list();
        }
        List<DeliveryTemplate> orderTemplates = new ArrayList<>();
        for (Delivery order : orders) {
            List<DeliveryItem> orderItems = deliveryItemService.list(new LambdaQueryWrapper<DeliveryItem>().eq(DeliveryItem::getDeliveryId, order.getId()));
            for (DeliveryItem item : orderItems) {
                if (Objects.isNull(item)) {
                    continue;
                }
                DeliveryTemplate template = new DeliveryTemplate();
                template.setDoCode(order.getCode())
                        .setType(OrderType.getValType(order.getType()))
                        .setWkType(OrderWorkType.getWorkDesc(order.getWkType()))
                        .setAnfme(item.getAnfme() + "")
                        .setMaktx(item.getMaktx())
                        .setMemo(item.getMemo())
                        .setMatnrCode(item.getMatnrCode())
                        .setPlatItemId(item.getPlatItemId())
                        .setSplrBatch(item.getSplrBatch())
                        .setSplrName(item.getSplrName())
                        .setSplrCode(item.getSplrCode());
                orderTemplates.add(template);
            }
        }
        ExcelUtil.build(ExcelUtil.create(orderTemplates, DeliveryTemplate.class), response);
    }
    @PostMapping("/delivery/import")
    @ApiOperation("DO单导入接口")
    @PreAuthorize("hasAuthority('manager:delivery: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("导入成功").add(deliveryItemService.excelImport(file, hashMap, getLoginUserId()));
    }
    /**
     * @author Ryan
     * @description 下载模板
     * @param
     * @return
     * @time 2025/4/18 08:17
     */
    @PostMapping("/delivery/template/download")
    @ApiOperation("下载收货单模板")
    @PreAuthorize("hasAuthority('manager:delivery:update')")
    public void downloadTemplate(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
        DeliveryTemplate template = ExcelUtil.mockData(DeliveryTemplate.class);
        List<DeliveryTemplate> list = Arrays.asList(template);
        ExcelUtil.build(ExcelUtil.create(list, DeliveryTemplate.class, true), response);
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
@@ -1,6 +1,7 @@
package com.vincent.rsf.server.manager.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.Cools;
@@ -11,15 +12,20 @@
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.Companys;
import com.vincent.rsf.server.manager.entity.DeliveryItem;
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.OrderType;
import com.vincent.rsf.server.manager.enums.OrderWorkType;
import com.vincent.rsf.server.manager.service.CompanysService;
import com.vincent.rsf.server.manager.service.DeliveryItemService;
import com.vincent.rsf.server.manager.service.impl.DeliveryServiceImpl;
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.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -31,10 +37,10 @@
    @Autowired
    private DeliveryItemService deliveryItemService;
    @Autowired
    private CompanysService companysService;
    @Autowired
    private DeliveryServiceImpl deliveryService;
    @PreAuthorize("hasAuthority('manager:deliveryItem:list')")
    @PostMapping("/deliveryItem/page")
@@ -115,33 +121,4 @@
        );
        return R.ok().add(vos);
    }
    @PreAuthorize("hasAuthority('manager:deliveryItem:list')")
    @PostMapping("/deliveryItem/export")
    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
        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());
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
@@ -101,9 +101,9 @@
    }
    @PreAuthorize("hasAuthority('manager:task:remove')")
    @OperationLog("Delete 任务工作档")
    @OperationLog("取消/删除工作极档")
    @ApiOperation("取消/删除工作极档")
    @PostMapping("/task/remove/{ids}")
    @Transactional(rollbackFor = Exception.class)
    public R remove(@PathVariable Long[] ids) {
        if (Objects.isNull(ids) || ids.length < 1) {
            return R.error("参数不能为空!!");
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Delivery.java
@@ -8,10 +8,14 @@
import com.vincent.rsf.server.system.constant.DictTypeCode;
import com.vincent.rsf.server.system.entity.DictData;
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.TableLogic;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
@@ -28,10 +32,12 @@
import com.vincent.rsf.framework.common.SpringUtils;
import com.vincent.rsf.server.system.service.UserService;
import com.vincent.rsf.server.system.entity.User;
import java.io.Serializable;
import java.util.Date;
@Data
@Accessors(chain = true)
@TableName("man_delivery")
public class Delivery implements Serializable {
@@ -113,10 +119,14 @@
    private Date endTime;
    /**
     * 状态 1: 已完成  0: 待执行   2:  未完成
     * 状态 1: 正常  0: 禁用
     */
    @ApiModelProperty(value= "状态 1: 已完成  0: 待执行   2:  未完成  ")
    @ApiModelProperty(value = "状态 1: 正常  0: 禁用")
    private Integer status;
    @ApiModelProperty(value = "状态 1: 执行中  0: 未执行   2:  部分完成 3:已完成  ")
    private Short exceStatus;
    /**
     * 是否删除 1: 是  0: 否  
@@ -165,7 +175,8 @@
    @ApiModelProperty(value= "备注")
    private String memo;
    public Delivery() {}
    public Delivery() {
    }
    public Delivery(String code,String platId,String type,String wkType,String source,Double anfme,Double qty,Double workQty,String platCode,Date startTime,Date endTime,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
        this.code = code;
@@ -212,6 +223,20 @@
//    );
    public String getExceStatus$() {
        if (Cools.isEmpty(this.exceStatus)) {
            return null;
        }
        DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
        DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>()
                .eq(DictData::getDictTypeCode, DictTypeCode.SYS_PO_EXCE_STATUS)
                .eq(DictData::getValue, this.exceStatus));
        if (Objects.isNull(dictData)) {
            return null;
        }
        return dictData.getLabel();
    }
    public String getType$(){
        if (Cools.isEmpty(this.type)){
            return "";
@@ -251,7 +276,9 @@
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        if (null == this.status) {
            return null;
        }
        switch (this.status){
            case 1:
                return "已完成";
@@ -297,9 +324,10 @@
    }
    public Boolean getStatusBool(){
        if (null == this.status){ return null; }
        if (null == this.status) {
            return null;
        }
        switch (this.status){
            case 1:
                return true;
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.vincent.rsf.server.manager.service.TaskService;
import com.vincent.rsf.server.system.constant.DictTypeCode;
import com.vincent.rsf.server.system.entity.DictData;
import com.vincent.rsf.server.system.service.DictDataService;
@@ -247,6 +248,16 @@
//            null    // 备注
//    );
//    public String getParentId$() {
//        if (Cools.isEmpty(this.parentId)) {
//            return null;
//        }
//        TaskService taskService = SpringUtils.getBean(TaskService.class);
//        Task task = taskService.getById(this.parentId);
//        return task.getTaskCode();
//    }
    public String getTaskStatus$(){
        if (Cools.isEmpty(this.taskStatus)) {
            return null;
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java
@@ -17,8 +17,8 @@
    private static final long serialVersionUID = 1L;
    @Excel(name = "*DO单号")
    @ApiModelProperty(value= "*PO单号")
    @ExcelComment(value = "poCode", example = "PO25413975")
    @ApiModelProperty(value= "*DO单号")
    @ExcelComment(value = "doCode", example = "DO25413975")
    private String doCode;
    @Excel(name = "*行号")
@@ -76,7 +76,7 @@
    @Excel(name = "物料名称")
    @ApiModelProperty(value= "物料名称")
    @ExcelComment(value = "matnrName", example = "TC-03128寸连体内上托")
    private String matnrName;
    private String maktx;
    /**
@@ -103,6 +103,14 @@
    @ExcelComment(value = "splrBatch", example = "20250401")
    private String splrBatch;
    /**
     * 供应商名称
     */
    @Excel(name = "供应商名称")
    @ApiModelProperty(value= "供应商名称")
    @ExcelComment(value = "splrName", example = "中扬立库技术有限公司")
    private String splrName;
    @Excel(name = "预计送达时间")
    @ApiModelProperty("预计送达时间")
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -95,7 +95,7 @@
     * 任务自动下发
     * @throws Exception
     */
//    @Scheduled(cron = "0/5 * * * * ?  ")
    @Scheduled(cron = "0/5 * * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
    public void taskToWCS() throws Exception {
        Long loginUserId = SystemAuthUtils.getLoginUserId();
@@ -121,7 +121,11 @@
                LocToTaskParams params = new LocToTaskParams();
                params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + "");
                //生成移库任务
                locItemService.genMoveTask(params, loginUserId);
                Task moveTask = locItemService.genMoveTask(params, loginUserId);
                moveTask.setSort(task.getSort() + 1);
                if (!taskService.updateById(moveTask)) {
                    throw new Exception("任务优先级更新失败!!");
                }
            }
            //TODO 调用下发任务接口
        }
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/DeliveryItemService.java
@@ -11,5 +11,5 @@
public interface DeliveryItemService extends IService<DeliveryItem> {
//    R excelImport(MultipartFile file, Map<String, Object> hashMap, Long loginUserId) throws Exception;
    R excelImport(MultipartFile file, Map<String, Object> hashMap, Long loginUserId) throws Exception;
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java
@@ -10,10 +10,7 @@
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.enums.*;
import com.vincent.rsf.server.manager.mapper.DeliveryItemMapper;
import com.vincent.rsf.server.manager.service.CompanysService;
import com.vincent.rsf.server.manager.service.DeliveryItemService;
@@ -44,7 +41,6 @@
    @Autowired
    private DeliveryItemService deliveryItemService;
//    private
    /**
     * excel DO单导入
     *
@@ -53,130 +49,114 @@
     * @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;
//    }
    @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())
                    .setType(OrderType.getTypeVal(template.getType()))
                    .setWkType(OrderWorkType.getWorkType(template.getWkType()))
                    .setMemo(template.getMemo())
                    .setSource(OrderSourceType.ORDER_SOURCE_TYPE_ERP.desc)
                    .setAnfme(Double.parseDouble(template.getAnfme()))
                    .setUpdateBy(loginUserId)
                    .setCreateBy(loginUserId);
            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());
                }
                orderItem.setDeliveryId(order.getId())
                        .setDeliveryCode(order.getCode())
                        .setSplrBatch(orderTemplate.getSplrBatch())
                        .setPlatItemId(orderTemplate.getPlatItemId())
                        .setAnfme(Double.parseDouble(orderTemplate.getAnfme()))
                        .setUnit(matnr.getUnit())
                        .setCreateBy(loginUserId)
                        .setUpdateBy(loginUserId)
                        .setSplrBatch(orderTemplate.getSplrBatch())
                        .setMaktx(matnr.getName())
                        .setMatnrCode(matnr.getCode())
                        .setMatnrId(matnr.getId());
                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 anfme = items.stream().mapToDouble(DeliveryItem::getAnfme).sum();
                if (!deliveryService.update(new LambdaUpdateWrapper<Delivery>()
                        .set(Delivery::getAnfme, anfme)
                        .eq(Delivery::getId, order.getId()))) {
                    throw new CoolException("单据数量修改失败!!");
                }
            }
        }
        return null;
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -138,10 +138,8 @@
                if (Objects.isNull(deviceSite)) {
                    throw new CoolException("当前站点不支持盘点出库!!");
                }
                task.setTaskType(TaskType.TASK_TYPE_CHECK_OUT.type).setWarehType(deviceSite.getDevice());
            }
            if (!taskService.save(task)) {
                throw new CoolException("任务创建失败!!");
            }
@@ -159,10 +157,6 @@
                    //优先生成移库任务
                    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());
@@ -172,14 +166,16 @@
                }
            }
//            if (!Objects.isNull(moveTask.getId())) {
//                moveTask.setParentId(task.getId()).setSort(moveTask.getSort() - 1);
//                if (!taskService.saveOrUpdate(moveTask)) {
//                    throw new CoolException("任务信息修改失败!!");
//                }
//            }
            if (!Objects.isNull(moveTask.getId())) {
                moveTask.setParentId(task.getId()).setSort(moveTask.getSort() + 1);
                if (!taskService.saveOrUpdate(moveTask)) {
                    throw new CoolException("任务信息修改失败!!");
                }
                task.setParentId(moveTask.getId());
                if (!taskService.updateById(task)) {
                    throw new CoolException("主任务关联失败!!");
                }
            }
            List<TaskItem> taskItems = new ArrayList<>();
            listMap.get(key).forEach(item -> {
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -753,8 +753,6 @@
                    if (!this.updateById(outTask)) {
                        throw new CoolException("任务信息修改失败!!");
                    }
                } else {
//                    throw new CoolException("无法生成新的移库任务,取消失败!!");
                }
            }
rsf-server/src/main/resources/application.yml
@@ -25,7 +25,7 @@
  #  global-config:
  #    field-strategy: 0
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
    cache-enabled: true
    call-setters-on-nulls: true