自动化立体仓库 - WMS系统
#
zjj
2024-08-31 c31bf5a8902485b750b5814a0d1c54ecc65d2c96
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,11 +1,15 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.sun.org.apache.xpath.internal.operations.Or;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.InOutCountDto;
@@ -14,25 +18,34 @@
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.DetlDto;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.NodeUtils;
import com.zy.system.entity.User;
import com.zy.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.text.ParseException;
import java.util.*;
/**
 * Created by vincent on 2022/4/9
 */
@Slf4j
@Service
@Service("OpenService")
public class OpenServiceImpl implements OpenService {
    @Value("${u8.url}")
    private String url;
    @Value("${u8.path}")
    private String orderReportPath;
    @Autowired
    private OrderService orderService;
@@ -66,6 +79,10 @@
    private ReportQueryMapper reportQueryMapper;
    @Autowired
    private UserService userService;
    @Autowired
    private PlaService plaService;
    @Autowired
    private ApiLogService apiLogService;
    @Override
    @Transactional
@@ -207,13 +224,13 @@
                param.getCCode(),    // 订单编号
                DateUtils.convert(now),    // 单据日期
                docType.getDocId(),    // 单据类型
                null,    // 项目编号
                1L,    // 项目编号
                null,    //
                null,    // 调拨项目编号
                null,    // 初始票据号
                null,    // 票据号
                param.getCAccount(),    // 主体
                null,    // 客户编号
                param.getCAccount(),    // 客户
                param.getCCusName(),    // 客户
                null,    // 联系方式
                param.getCMaker(),    // 操作人员
                null,    // 合计金额
@@ -390,8 +407,18 @@
    @Override
    @Transactional
    public void syncMat(MatSyncParam param) {
        if (Cools.isEmpty(param.getMatDetails()) || param.getMatDetails().size() <= 0) {
            throw new CoolException("商品数据为空");
        }
        //删除存货档案
        if(param.deleteFlag == 1){
            for (MatSyncParam.MatParam matParam : param.getMatDetails()){
                matService.deleteById(matParam.getMatnr());
            }
            return;
        }
        for (MatSyncParam.MatParam matParam : param.getMatDetails()) {
@@ -486,14 +513,15 @@
                }
                if (!matService.insert(mat)) {
                    throw new CoolException("服务器内部错误,请联系管理员");
                } else {
                    log.info("同步新物料[商品编号:{}]", mat.getMatnr());
                }
                log.info("同步新物料[商品编号:{}]", mat.getMatnr());
            } else {
                mat.sync(param);
                //mat.sync(param);
                mat.setMaktx(matParam.getMaktx());
                if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr", matParam.getMatnr()))) {
                    throw new CoolException("更新已存在商品信息失败,请联系管理员");
                }
                log.info("同步更新物料[商品编号:{}]", mat.getMatnr());
            }
        }
@@ -538,4 +566,164 @@
        return digitalTwin;
    }
    @Override
    public int pakinReportErp(JSONObject json) throws ParseException {
        JSONArray jsonArray = JSONArray.parseArray(json.getJSONArray("pla").toJSONString());
        List<OpenOrderPakoutParam> list = new ArrayList<>();
        for (Object o : jsonArray){
            JSONObject jsonObject = (JSONObject)o;
            String brand = jsonObject.get("brand").toString();
            String batch = jsonObject.get("batch").toString();
            Integer packageNo = Integer.parseInt(jsonObject.get("packageNo").toString());
            Pla pla = plaService.selectByBatchAndPackageNo(batch, packageNo, brand);
            Mat mat = matService.selectByMaktx(pla.getBrand());
            //当生产单号不一致时,需要新建一个param
            if(list.size() == 0 || checkOrder(list,pla.getProOrderNo()) == null){
                OpenOrderPakoutParam param = new OpenOrderPakoutParam();
                param.setcMaker(json.get("user").toString());
                String type = Cools.isEmpty(pla.getProOrderNo()) ? "调拨入库单" : "产成品入库";
                param.setcCode(Cools.isEmpty(pla.getProOrderNo()) ? (new Date().getTime()) + "" : pla.getProOrderNo());
                param.setcAccount(pla.getWorkshop());
                param.setdDate(Utils.getDateStr(new Date()));
                param.setType(type);
                List<OpenOrderPakoutParam.Body> bodyList = new ArrayList<>();
                OpenOrderPakoutParam.Body body = new OpenOrderPakoutParam.Body();
                body.setcInvCode(mat.getMatnr());
                body.setiQuantity(pla.getWeightAnfme());
                body.setcBatch("");
                body.setCbMemo(pla.getMemo());
                bodyList.add(body);
                param.setaDDBody(bodyList);
                list.add(param);
            }else {
                OpenOrderPakoutParam param = checkOrder(list, pla.getProOrderNo());
                List<OpenOrderPakoutParam.Body> bodyList = param.getADDBody();
                OpenOrderPakoutParam.Body body = checkOrderDetl(bodyList, mat.getMatnr());
                //有新的牌号则添加新的orderDetl,否则累加
                if(body == null){
                    body = new OpenOrderPakoutParam.Body();
                    body.setcInvCode(mat.getMatnr());
                    body.setiQuantity(pla.getWeightAnfme());
                    body.setCbMemo(pla.getMemo());
                    bodyList.add(body);
                }else {
                    body.setiQuantity(body.getIQuantity() + pla.getWeightAnfme());
                }
            }
        }
        for (OpenOrderPakoutParam param : list){
            doHttpRequest(param, "入库单上报", url, orderReportPath, null, "127.0.0.1");
        }
        return 200;
        //return doHttpRequest(list, "入库单上报", url, orderReportPath, null, "127.0.0.1");
    }
    @Override
    public List<String> selectOrderInformation(Map<String, String> param) {
        ArrayList<String> list = new ArrayList<>();
        String name = param.get("name");
        User user = userService.selectOne(new EntityWrapper<User>().eq("username", name));
        if (Cools.isEmpty(user)){
            return list;
        }
        List<Order> orderList = orderService.selectList(new EntityWrapper<Order>().eq("create_by", user.getId()));
        if (Cools.isEmpty(orderList)){
            return list;
        }
        for (Order order : orderList){
            if (order.getSettle() ==1 || order.getSettle() ==2){
                list.add(order.getOrderNo());
            }
        }
        return list;
    }
    private OpenOrderPakoutParam checkOrder(List<OpenOrderPakoutParam> list, String orderNo){
        for (OpenOrderPakoutParam param : list){
            if(Cools.eq("调拨入库单",param.getType()) && Cools.isEmpty(orderNo)){
                return param;
            }
            //判断是否包含重复的订单号
            if(Cools.eq(param.getCCode(),orderNo)){
                return param;
            }
        }
        return null;
    }
    private OpenOrderPakoutParam.Body checkOrderDetl(List<OpenOrderPakoutParam.Body> bodyList, String matnr){
        for (OpenOrderPakoutParam.Body param : bodyList){
            //判断是否包含重复的订单号
            if(Cools.eq(param.getCInvCode(),matnr)){
                return param;
            }
        }
        return null;
    }
    private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip){
        String response = "";
        boolean success = false;
        try {
            response = new HttpHandler.Builder()
                    .setUri(url)
                    .setPath(path)
                    .setJson(JSONObject.toJSONString(requestParam))
                    .build()
                    .doPost();
            response = response.replace("\\", "");
            response = response.substring(1,response.length()-1);
            JSONObject jsonObject = JSON.parseObject(response);
            JSONArray jsonArray = (JSONArray)jsonObject.get("");
            JSONObject jsonResult = (JSONObject) jsonArray.get(0);
            if(Cools.isEmpty(jsonResult.get("ErrorCode"))){
                throw new CoolException(jsonResult.get("errorMsg").toString());
            }
            int code = Integer.parseInt(jsonResult.get("ErrorCode").toString());
            if(code != 1){
                throw new CoolException(jsonResult.get("errorMsg").toString());
            }
            success = true;
            return code;
        }catch (Exception e){
            log.error(e.getMessage());
            throw new CoolException(e.getMessage());
        }finally {
            apiLogService.save(
                    namespace,
                    url + path,
                    appkey,
                    ip,
                    JSON.toJSONString(JSONObject.toJSONString(requestParam)),
                    response,
                    success
            );
        }
    }
}