//package com.hzya.frame.plugin.lets.plugin.transfer;
//
//import cn.hutool.core.date.DateField;
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.lang.Assert;
//import cn.hutool.json.JSONArray;
//import cn.hutool.json.JSONUtil;
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.hzya.frame.base.PluginBaseEntity;
//import com.hzya.frame.plugin.lets.constant.OverallConstant;
//import com.hzya.frame.plugin.lets.constant.ProfilesActiveConstant;
//import com.hzya.frame.plugin.lets.ofsvo.QueryOfsTransferOrderRequestVO;
//import com.hzya.frame.plugin.lets.u8cdto.BillVO;
//import com.hzya.frame.plugin.lets.u8cdto.ReusltStrDto;
//import com.hzya.frame.plugin.lets.u8cdto.SoSaleResultRootDto;
//import com.hzya.frame.plugin.lets.util.PushDataByU8cUtil;
//import com.hzya.frame.plugin.lets.util.SaveOrUpdateBusinessLogUtil;
//import com.hzya.frame.sysnew.integtationTaskLivingDetails.dao.IIntegrationTaskLivingDetailsDao;
//import com.hzya.frame.sysnew.integtationTaskLivingDetails.entity.IntegrationTaskLivingDetailsEntity;
//import com.hzya.frame.ttxofs.basics.ReturnMessageBasics;
//import com.hzya.frame.ttxofs.dto.InterfaceParamDto;
//import com.hzya.frame.ttxofs.dto.ofsTransferOrderSearch.OFSTranseferOrderSearchResponse;
//import com.hzya.frame.ttxofs.service.OfsUnifiedService;
//import com.hzya.frame.ttxofs.util.UrlTransUtil;
//import com.hzya.frame.web.entity.JsonResultEntity;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClients;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import java.math.BigDecimal;
//import java.util.*;
//import java.util.concurrent.locks.ReentrantLock;
//
///**
// * OFS->U8C调拨订单 新增，修改，删除
// * add by zyd 20240802
// */
//public class TransferPluginInitializer extends PluginBaseEntity {
//
//    Logger logger = LoggerFactory.getLogger(TransferPluginInitializer.class);
//
//    private static final ReentrantLock LOCK = new ReentrantLock(true);
//
//    @Override
//    public void initialize() {
//        logger.info(getPluginLabel() + "執行初始化方法initialize()");
//    }
//
//    @Override
//    public void destroy() {
//        logger.info(getPluginLabel() + "執行銷毀方法destroy()");
//    }
//
//    @Override
//    public String getPluginId() {
//        return "com.hzya.frame.plugin.lets.plugin.transfer.TransferPluginInitializer";
//    }
//
//    @Override
//    public String getPluginName() {
//        return "丽知：OFS调拨订单--->U8C调拨订单(保存及签字)";
//    }
//
//    @Override
//    public String getPluginLabel() {
//        return "丽知：OFS调拨订单--->U8C调拨订单(保存及签字)";
//    }
//
//    @Override
//    public String getPluginType() {
//        return "1";
//    }
//
//    @Autowired
//    private IIntegrationTaskLivingDetailsDao iIntegrationTaskLivingDetailsDao;
//    @Autowired
//    private PushDataByU8cUtil pushDataByU8cUtil;
//    @Autowired
//    private SaveOrUpdateBusinessLogUtil saveOrUpdateBusinessLogUtil;
//
//    @Autowired
//    private OfsUnifiedService ofsUnifiedService;
//
//    @Override
//    public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception {
//        return null;
//    }
//
//
//    /**
//     * 默认推送
//     */
//    public void start() {
//        try {
//            //获取当前时间
//            Date currentDate = new Date();
//            Date startTime = DateUtil.offset(currentDate, DateField.MINUTE, -10);
//            Date endTime = DateUtil.offset(currentDate, DateField.MINUTE, -2);
//            String startTimeStr = DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss");
//            String endTimeStr = DateUtil.format(endTime, "yyyy-MM-dd HH:mm:ss");
//
//            QueryOfsTransferOrderRequestVO queryOfsTransferOrderRequestVO = new QueryOfsTransferOrderRequestVO();
//            queryOfsTransferOrderRequestVO.setCreated_start(startTimeStr);
//            queryOfsTransferOrderRequestVO.setCreated_end(endTimeStr);
//            queryOfsTransferOrderRequestVO.setCompanyCode("SHXM");//U8c&ofs对接群:好的，我跟技术聊了，就按照这个方     式来，赋值就按照赋值的货主来查，不赋值就查所有的货主数据
////            queryOfsTransferOrderRequestVO.setStatus("900");//状态 100订单池 200待出库 300已出库 400待入库 900已入库 250出库中 450入库中
//            queryOfsTransferOrderRequestVO.setPageNo(1L);
//            queryOfsTransferOrderRequestVO.setPageSize(50L);
//            List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> ofsTranseferOrders = queryOfsTransderOrder(queryOfsTransferOrderRequestVO);
//            if (ofsTranseferOrders == null || ofsTranseferOrders.size() == 0) {
//                return;
//            }
//            System.out.println(ofsTranseferOrders);
//            //过滤日志
//            List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> filterOfsTranseferOrders = filterData(ofsTranseferOrders);
//            if (filterOfsTranseferOrders.size() == 0) {
//                return;
//            }
//
//            //推送
//            implement(filterOfsTranseferOrders);
//
//
//        } catch (Exception e) {
//            logger.error("丽知：OFS调拨订单--->U8C调拨订单(保存及签字),start()方法报错：", e);
//        }
//    }
//
//    /**
//     * 按调拨订单号
//     */
//    public void start(String transeferNo) {
//        try {
//            QueryOfsTransferOrderRequestVO queryOfsTransferOrderRequestVO = new QueryOfsTransferOrderRequestVO();
//            queryOfsTransferOrderRequestVO.setCompanyCode("SHXM");//U8c&ofs对接群:好的，我跟技术聊了，就按照这个方式来，赋值就按照赋值的货主来查，不赋值就查所有的货主数据
////            queryOfsTransferOrderRequestVO.setStatus("100");//状态 100订单池 200待出库 300已出库 400待入库 900已入库 250出库中 450入库中
//            queryOfsTransferOrderRequestVO.setCode(transeferNo);
//
//            queryOfsTransferOrderRequestVO.setCreated_start("2024-08-08 00:00:00");
//            queryOfsTransferOrderRequestVO.setCreated_end("2024-08-12 23:59:59");
//
//            queryOfsTransferOrderRequestVO.setPageNo(1L);
//            queryOfsTransferOrderRequestVO.setPageSize(500L);
//            List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> ofsTranseferOrders = queryOfsTransderOrder(queryOfsTransferOrderRequestVO);
//            if (ofsTranseferOrders == null || ofsTranseferOrders.size() == 0) {
//                Assert.state(false, "中台：查询OFS调拨订单：{}，不存在，请检查OFS调拨订单号。", transeferNo);
//            }
//
//            //过滤日志
//            List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> filterOfsTranseferOrders = filterData(ofsTranseferOrders);
//            if (filterOfsTranseferOrders.size() == 0) {
//                Assert.state(false, "中台：查询OFS调拨订单：{}，过滤成功日志时已被过滤，请勿重新推送。", transeferNo);
//            }
//
//            //推送
//            implement(filterOfsTranseferOrders);
//
//        } catch (Exception e) {
//            logger.error("丽知：OFS调拨订单--->U8C调拨订单(保存及签字),start(String transeferNo)方法报错：", e);
//        }
//
//    }
//
//    /**
//     * 按时间区间
//     */
//    public void start(String startTime, String endTime) {
//        try {
//            Date business_start = DateUtil.parse(startTime);
//            Date business_end = DateUtil.parse(endTime);
//            String start = DateUtil.format(business_start, "yyyy-MM-dd") + " 00:00:00`";
//            String end = DateUtil.format(business_end, "yyyy-MM-dd") + " 23:59:59";
//            QueryOfsTransferOrderRequestVO queryOfsTransferOrderRequestVO = new QueryOfsTransferOrderRequestVO();
//            queryOfsTransferOrderRequestVO.setCreated_start(start);
//            queryOfsTransferOrderRequestVO.setCreated_end(end);
//            queryOfsTransferOrderRequestVO.setCompanyCode("SHXM");//U8c&ofs对接群:好的，我跟技术聊了，就按照这个方     式来，赋值就按照赋值的货主来查，不赋值就查所有的货主数据
////            queryOfsTransferOrderRequestVO.setStatus("900");//状态 100订单池 200待出库 300已出库 400待入库 900已入库 250出库中 450入库中
//            queryOfsTransferOrderRequestVO.setPageNo(1L);
//            queryOfsTransferOrderRequestVO.setPageSize(50L);
//            List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> ofsTranseferOrders = queryOfsTransderOrder(queryOfsTransferOrderRequestVO);
//            if (ofsTranseferOrders == null || ofsTranseferOrders.size() == 0) {
//                Assert.state(false, "中台：查询OFS调拨订单,按日期：{} - {}，未查询OFS调拨订单。", startTime,endTime);
//            }
//            //过滤日志
//            List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> filterOfsTranseferOrders = filterData(ofsTranseferOrders);
//            if (filterOfsTranseferOrders.size() == 0) {
//                Assert.state(false, "中台：查询OFS调拨订单,按日期：{} - {}，已被推送,请查询OFS调拨订单。", startTime,endTime);
//            }
//
//            //推送
//            implement(filterOfsTranseferOrders);
//
//
//        } catch (Exception e) {
//            logger.error("丽知：OFS调拨订单--->U8C调拨订单(保存及签字),start(String startTime, String endTime)方法报错：", e);
//        }
//    }
//
//
//    /**
//     * 过滤成功日志
//     *
//     * @param ofsTranseferOrders
//     * @return
//     */
//    public List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> filterData(List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> ofsTranseferOrders) {
//        List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> filterOfsTranseferOrders = new ArrayList<>();
//        for (OFSTranseferOrderSearchResponse.OFSTranseferOrder ofsTranseferOrder : ofsTranseferOrders) {
//            OFSTranseferOrderSearchResponse.OFSTranseferOrder.OFSTranseferH header = ofsTranseferOrder.getHeader();
//            //OFS调拨订单号
//            String rootAppPk = header.getCode();
//            boolean isExis = true;
//            IntegrationTaskLivingDetailsEntity integrationTaskLivingDetailsEntity = new IntegrationTaskLivingDetailsEntity();
//            integrationTaskLivingDetailsEntity.setRootAppPk(rootAppPk);
//            integrationTaskLivingDetailsEntity.setNewState(ProfilesActiveConstant.LOG_STATUS_Y);
//            integrationTaskLivingDetailsEntity.setPluginId(getPluginId());
//            List<IntegrationTaskLivingDetailsEntity> integrationTaskLivingDetailsEntities = iIntegrationTaskLivingDetailsDao.query(integrationTaskLivingDetailsEntity);
//            if (integrationTaskLivingDetailsEntities == null || integrationTaskLivingDetailsEntities.size() == 0) {
//                isExis = false;
//            }
//            if (!isExis) {
//                filterOfsTranseferOrders.add(ofsTranseferOrder);
//            }
//        }
//        return filterOfsTranseferOrders;
//    }
//
//    /**
//     * 推送u8c调拨订单
//     *
//     * @param filterOfsTranseferOrders
//     */
//    public void implement(List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> filterOfsTranseferOrders) {
//        for (OFSTranseferOrderSearchResponse.OFSTranseferOrder ofsTranseferOrder : filterOfsTranseferOrders) {
//            BillVO billVO = new BillVO();
//
//            String mapStr = "";
//            String format="";
//            String response="";
//            String ofsCode="";
//            try {
//
//                //主表
//                OFSTranseferOrderSearchResponse.OFSTranseferOrder.OFSTranseferH ofsHeader = ofsTranseferOrder.getHeader();
//                BillVO.Parentvo parentvo = new BillVO.Parentvo();
//
//                ofsCode=ofsHeader.getCode();
//
//                //创建日期
//                Date created = ofsHeader.getCreated();
//                format = DateUtil.format(created, "yyyy-MM-dd HH:mm:ss");
//
//                //dbilldate 单据日期
//                parentvo.setDbilldate(format);
//                //dauditdate 审批日期
//                parentvo.setDauditdate(format);
//                //coperatorid 制单人
//                parentvo.setCoperatorid("tbadmin");
//
//                //cbiztypeid 业务流程编码
//                parentvo.setCbiztypeid("to01");
//
//                //coutcbid 调出组织编码 对应OFS->原库存地点公司
//                parentvo.setCoutcbid(ofsHeader.getCompanyCode());
//                parentvo.setCoutcbid("SHLZ");
//
//                //coutcorpid 调出公司编码 对应OFS->原库存地点公司
//                parentvo.setCoutcorpid(ofsHeader.getCompanyCode());
//                parentvo.setCoutcorpid("SHLZ");
//
//                //coutwhid 调出仓库编码 对应OFS->原库存地点
//                parentvo.setCoutwhid(ofsHeader.getFacilityCode());
//                parentvo.setCoutwhid("01");
//
//                //cincbid 调入组织编码 对应OFS->目标库存地点公司
//                parentvo.setCincbid("SHXM");
//
//                //cincorpid 调入公司编码 对应OFS->目标库存地点公司
//                parentvo.setCincorpid("SHXM");
//
//                //cinwhid 调入仓库编码 对应OFS->目标库存地点
//                parentvo.setCinwhid("01");
//
//                //vnote 备注
//                parentvo.setVnote(ofsHeader.getNotes());
//
//
//
//                //子表
//                List<OFSTranseferOrderSearchResponse.OFSTranseferOrder.OFSTranseferB> ofsDetails = ofsTranseferOrder.getDetails();
//                List<BillVO.Childrenvo> childrenvo = new ArrayList<>();
//                for (OFSTranseferOrderSearchResponse.OFSTranseferOrder.OFSTranseferB ofsDetail : ofsDetails) {
//                    System.out.println(ofsDetail);
//                    BillVO.Childrenvo children = new BillVO.Childrenvo();
//                    //表体
//                    //cinvbasid 存货基本档案
//                    children.setCinvbasid(ofsDetail.getSkuCode());
//                    children.setCinvbasid("6973391730617");
//                    //nnum 数量
//                    children.setNnum(BigDecimal.valueOf(ofsDetail.getShipQty()));
//                    childrenvo.add(children);
//                }
//                billVO.setParentvo(parentvo);
//                billVO.setChildrenvo(childrenvo);
//                String jsonStr = JSONUtil.toJsonStr(billVO);
//                mapStr = "{\"billvo\":"+jsonStr+"}";
//                response = pushDataByU8cUtil.pushU8CByCode(OverallConstant.getOverAllValue("approveqz"), mapStr);
//                System.out.println(response);
//                boolean isSuccess = false;
//                String vcode="";
//                if (response != null && !"".equals(response)) {
//                    ReusltStrDto reusltStrDto = JSON.parseObject(response, ReusltStrDto.class);
//                    if ("success".equals(reusltStrDto.getStatus())) {
//                        isSuccess = true;
//                        String data = reusltStrDto.getData();
//                        BillVO billVO1 = resultDataHandle(data);
//                        System.out.println(billVO1);
//                        vcode = billVO1.getParentvo().getVcode();
//                    }
//                }
//                if (!isSuccess) {
//                    Assert.state(false, "推送U8C--> 丽知：OFS调拨订单--->U8C调拨订单(保存及签字) 失败 接口返回结果：{} 接口入参:{}", response, jsonStr);
//                }
//
//                //成功
//                IntegrationTaskLivingDetailsEntity integrationTaskLivingDetailsEntity = new IntegrationTaskLivingDetailsEntity();
//                integrationTaskLivingDetailsEntity.setNewState(ProfilesActiveConstant.LOG_STATUS_Y);
//                integrationTaskLivingDetailsEntity.setRootAppNewData(mapStr);
//                integrationTaskLivingDetailsEntity.setNewTransmitInfo(response);
//                integrationTaskLivingDetailsEntity.setNewPushDate(new Date());
//                integrationTaskLivingDetailsEntity.setBusinessDate(format);
//                integrationTaskLivingDetailsEntity.setRootAppPk(ofsCode);
//                integrationTaskLivingDetailsEntity.setRootAppBill(vcode);//u8c调拨订单号
//                integrationTaskLivingDetailsEntity.setPluginId(getPluginId());
//                saveOrUpdateBusinessLogUtil.saveOrUpdate(integrationTaskLivingDetailsEntity);
//
//
//            } catch (Exception e) {
//                e.printStackTrace();
//                logger.error("丽知：OFS调拨订单--->U8C调拨订单(保存及签字)失败，失败原因：" + e);
//
//                //失败
//                IntegrationTaskLivingDetailsEntity integrationTaskLivingDetailsEntity = new IntegrationTaskLivingDetailsEntity();
//                integrationTaskLivingDetailsEntity.setNewState(ProfilesActiveConstant.LOG_STATUS_N);
//                integrationTaskLivingDetailsEntity.setRootAppNewData(mapStr);
//                integrationTaskLivingDetailsEntity.setNewTransmitInfo(response);
//                integrationTaskLivingDetailsEntity.setNewPushDate(new Date());
//                integrationTaskLivingDetailsEntity.setBusinessDate(format);
//                integrationTaskLivingDetailsEntity.setRootAppPk(ofsCode);
//                integrationTaskLivingDetailsEntity.setRootAppBill(null);//u8c调拨订单号
//                integrationTaskLivingDetailsEntity.setPluginId(getPluginId());
//                saveOrUpdateBusinessLogUtil.saveOrUpdate(integrationTaskLivingDetailsEntity);
//            }
//
//        }
//
//    }
//
//
//    /**
//     * 开始与结束时间必须小于或等于7天
//     *
//     * @param queryOfsTransferOrderRequestVO
//     * @throws Exception
//     */
//    public List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> queryOfsTransderOrder(QueryOfsTransferOrderRequestVO queryOfsTransferOrderRequestVO) throws Exception {
//
//        InterfaceParamDto interfaceParamDto = new InterfaceParamDto();
//        interfaceParamDto.setApi("ofs.transferOrder.search");
//        queryOfsTransferOrderRequestVO.setClientCode("LETS");
//        interfaceParamDto.setData(JSON.toJSONString(queryOfsTransferOrderRequestVO));
//        OFSTranseferOrderSearchResponse ofsTranseferOrderSearchResponse = (OFSTranseferOrderSearchResponse) ofsUnifiedService.unified(interfaceParamDto);
//        System.out.println(ofsTranseferOrderSearchResponse);
//        if (ofsTranseferOrderSearchResponse.getData().size() == 0) {
//            return null;
//        } else {
//            List<OFSTranseferOrderSearchResponse.OFSTranseferOrder> data = ofsTranseferOrderSearchResponse.getData();
//            return data;
//        }
//    }
//    private BillVO resultDataHandle(String resultData) {
//        try {
//            if (resultData != null && !"".equals(resultData)) {
//                if (resultData.contains("[")) {
//                    resultData = resultData.substring(1, resultData.length() - 1);
//                }
//                return JSON.parseObject(resultData, BillVO.class);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("解析返回参数失败的错误", e);
//            //如果解析失败，记录原因，但是不能影响结果的记录
//        }
//        return null;
//    }
//
//}
