package com.zy.asrs.task.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.core.common.Cools; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.entity.U8Properties; import com.zy.asrs.entity.result.OrderRsult; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.service.OrderService; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.text.Format; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Objects; /** * @author pang.jiabao * @description 订单明细完成,定时上报u8 * @createDate 2025/9/19 9:50 */ @Slf4j @Component public class AutoReportingHandler { @Resource private U8Properties u8Properties; @Resource private OrderDetlService orderDetlService; @Resource private OrderService orderService; public void U8Reporting(OrderDetl orderDetl) { String orderNo = orderDetl.getOrderNo(); Order order = orderService.selectByNo(orderNo); if (order == null) { throw new CoolException("没有找到该订单号:" + orderNo); } OrderRsult orderRsult = new OrderRsult(); OrderRsult.Login login = new OrderRsult.Login(); OrderRsult.HeadTable headTable = new OrderRsult.HeadTable(); OrderRsult.BodyTable bodyTable = new OrderRsult.BodyTable(); login.setSAccID(u8Properties.getSAccID()); //账套号 固定 login.setSUserID(u8Properties.getSUserID());//U8登陆账号 固定 login.setSPassword(u8Properties.getSPassword());//U8登陆密码 固定 login.setSServer(u8Properties.getSServer());//U8服务器地址 固定 orderRsult.setLogin(login); orderRsult.setVerifier("sys");//单据类型  固定 orderRsult.setCommandType("关闭");//操作类型  固定 orderRsult.setVouchName("");//审核人 填写则自动审核 headTable.setCtvcode(orderNo);//调拨单号  默认 //时间 Date date = new Date(); Format formatter = new SimpleDateFormat("yyyy-MM-dd"); String format = formatter.format(date); headTable.setDtvdate(format);//单据日期 headTable.setCmaker("sys");//制单人名称 headTable.setVt_id("89");//模板号 默认 headTable.setCiwhcode("1");//转入仓库编码 headTable.setCowhcode("1");//转出仓库编码 headTable.setCordcode("");//出库类别编码 默认 headTable.setCirdcode("");//入库类别编码 默认 headTable.setCodepcode("");//转出部门编码 headTable.setCidepcode("");//转入部门编码 bodyTable.setOrderNo(orderDetl.getOrderNo()); // 单据号 bodyTable.setIrowno(orderDetl.getSku());//行号 bodyTable.setCinvcode(orderDetl.getMatnr());//存货编码 bodyTable.setCtvbatch(Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch());//批号(特殊说明) Double qty = orderDetl.getQty() - (Cools.isEmpty(orderDetl.getUnits()) ? 0 : orderDetl.getUnits()); bodyTable.setItvquantity(String.valueOf(qty));//完成件数 bodyTable.setCinposcode("1-1");//立库源货位 bodyTable.setCoutposcode("");//目标货位 bodyTable.setItrsid(orderDetl.getSku());//行主键 bodyTable.setEditprop("A");//状态 A 新增 ArrayList bodyTables = new ArrayList<>(); bodyTables.add(bodyTable); orderRsult.setBodyTable(bodyTables); ArrayList headTables = new ArrayList<>(); headTables.add(headTable); orderRsult.setHeadTable(headTables); String response = ""; boolean success = false; try { response = new HttpHandler.Builder() // .setHeaders(map) .setUri(u8Properties.getURL()) .setPath(u8Properties.getResultReportPath()) .setJson(JSON.toJSONString(orderRsult)) .build() .doPost(); log.info("orderNo:{},matnr:{},qty:{}订单明细完成上报u8原始返回:{}",orderNo ,orderDetl.getMatnr() ,qty , response); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger("code").equals(200)) { orderDetl.setUnits(qty + (Cools.isEmpty(orderDetl.getUnits()) ? 0 : orderDetl.getUnits())); if (Objects.equals(orderDetl.getQty(), orderDetl.getAnfme())) { orderDetl.setInspect(1); } orderDetlService.updateById(orderDetl); success = true; } else { log.error("订单明细完成上报u8失败!!!url:{};request:{};response:{}", u8Properties.getURL() + "/" + u8Properties.getResultReportPath(), JSON.toJSONString(orderRsult), response); } } catch (Exception e) { response = e.getMessage(); log.error("订单明细完成上报u8异常!!!url:{};request:{};response:{}", u8Properties.getURL() + "/" + u8Properties.getResultReportPath(), JSON.toJSONString(orderRsult), response); } finally { try { // 保存接口日志 ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class); apiLogService.save( "订单完成上报u8", u8Properties.getURL() + "/" + u8Properties.getResultReportPath(), "", "127.0.0.1", JSON.toJSONString(orderRsult), response, success ); } catch (Exception e) { log.error("订单完成上报u8接口日志保存异常", e); } } } }