自动化立体仓库 - WMS系统
zyx
2023-08-25 9b2838fd5b53ae5ef4aa7e082e2718cc0ccc4466
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -13,18 +13,18 @@
import com.zy.asrs.mapper.ReportQueryMapper;
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.WorkLogHandler;
import com.zy.asrs.utils.MatUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.utils.ListUtils;
import com.zy.common.utils.NodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by vincent on 2022/4/9
@@ -613,4 +613,164 @@
        return viewWorkInBeans;
    }
    @Transactional
    public boolean syncMat(MatInfoParam param) {
        if(!Cools.isEmpty(matService.selectByMatnr(param.getCinvcode()))){
            callApiLogSave(param, "/open/asrs/mat/v1", "接收ERP下发商品信息失败!!!商品已存在!!!", false);
            param.setType(false);
            param.setMemo("商品已存在!");
            return false;
        }
        Date now = new Date();
        Mat mat = new Mat();
        //物料号
        mat.setMatnr(param.getCinvcode());
        //物料名称
        mat.setMaktx(param.getCinvname());
        //规格型号
        mat.setSpecs(param.getCInvStd());
        //存货分类编码
        mat.setBrand(param.getCinvccode());
        //存货分类名称
        mat.setColor(param.getCInvCName());
        //计量单位
        mat.setUnit(param.getCComUnitName());
        //进项税
        mat.setPrice(param.getIImpTaxRate());
        //销项税
        mat.setUnits(param.getITaxRate());
        //启用日期
        mat.setDsDate(param.getDSDate());
        //建档人
        mat.setSupp(param.getCCreatePerson());
        //建档日期
        mat.setDInvCreateDatetime(param.getDInvCreateDatetime());
        //通用型号
        mat.setModel(param.getCinvdefine4());
        mat.setCreateTime(now);
        mat.setUpdateTime(now);
        if (matService.insert(mat)) {
            callApiLogSave(param, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true);
            param.setType(true);
        } else {
            callApiLogSave(param, "/open/asrs/mat/v1", "添加ERP下发商品信息失败!!!状态异常!!!", false);
            param.setType(false);
            param.setMemo("添加ERP下发商品信息失败!");
        }
        matService.insert(mat);
        return true;
    }
    @Transactional
    public boolean syncOrder(Map<String, Object> param) {
        if(Cools.isEmpty(param) || Cools.isEmpty(param.get("orderDetails"))){
            throw new CoolException("单据参数为空或者单据详情为空,无法生成单据信息");
        }
        if(!Cools.isEmpty(orderService.selectByNo(param.get("id").toString()))){
            throw new CoolException("该单据已存在,无法生成单据信息");
        }
        Order order = orderMapping(param);
        orderService.insert(order);
        List<Map<String, Object>> orderDetails = (List<Map<String, Object>>) param.get("orderDetails");
        orderDetails.forEach(odParam -> {
            OrderDetl od = orderDetlMapping(order.getOrderNo(),odParam);
            orderDetlService.insert(od);
        });
        return true;
    }
    @Transactional
    public boolean orderDelete(String orderNo) {
        Order order = orderService.selectByNo(orderNo);
        if(Cools.isEmpty(order)){
            throw new CoolException("单据不存在,无法删除单据");
        }
        if(order.getSettle() != 1){
            return false;
        }
        orderService.deleteById(order);
        orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_no",orderNo));
        return true;
    }
    private Order orderMapping(Map<String, Object> param){
        Date now = new Date();
        Order order = new Order();
        //uuid
        order.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
        //核算主体
        order.setItemName(param.get("account").toString());
        //单据唯一表示
        order.setOrderNo(param.get("id").toString());
        //业务类型
        order.setDefNumber(param.get("cBusType").toString());
        //单据类型
        DocType docType = docTypeService.selectOrAdd(param.get("cVouchType").toString(), Boolean.TRUE);
        order.setDocType(docType.getDocId());
        //单据日期
        order.setOrderTime(param.get("dDate").toString());
        //供应商/客户编码
        order.setCstmrName(param.get("ks").toString());
        //仓库
        order.setTel(param.get("cWhName").toString());
        //出入库类别
        order.setOperMemb(param.get("cRdName").toString());
        //部门
        order.setSalesman(param.get("cDepCode").toString());
        //备注
        order.setMemo(param.get("cMemo").toString());
        //制单人
        order.setShipCode(param.get("cMaker").toString());
        order.setCreateTime(now);
        order.setUpdateTime(now);
        //订单状态
        order.setSettle(1L);
        //状态
        order.setStatus(1);
        return order;
    }
    private OrderDetl orderDetlMapping(String orderId, Map<String, Object> odParam){
        OrderDetl od = new OrderDetl();
        od.setOrderNo(orderId);
        //行唯一标识
        od.setItemNum(odParam.get("autoId").toString());
        //存货编码
        od.setMatnr(odParam.get("cInvCode").toString());
        //存货名称
        od.setMaktx(odParam.get("cInvName").toString());
        //规格型号
        od.setSpecs(odParam.get("cInvStd").toString());
        //计量单位
        od.setUnit(odParam.get("cComUnitName").toString());
        //数量
        od.setAnfme(Double.parseDouble(odParam.get("iQuantity").toString()));
        //行号
        od.setBrand(odParam.get("irowno").toString());
        //销售订单号
        od.setColor(odParam.get("csocode").toString());
        //销售订单行号
        od.setOrigin(odParam.get("isoseq").toString());
        return od;
    }
    public void callApiLogSave(MatInfoParam matParam, String tableName, String response, Boolean bool) {
        apiLogService.save("ERP下发商品信息", tableName, "null", "10.10.10.1",
                "物料编码:" + matParam.getCinvcode() + "、物料名称:" + matParam.getCinvname() + "、规格:" + matParam.getCInvStd() + "、备注:" + matParam.getMemo(),
                response, bool);
    }
}