浏览代码

【迈迪杰MES对接】

wuyx 2 周之前
父节点
当前提交
ad4e50c5de

+ 0 - 4
src/main/java/com/uas/eis/controller/BaseController.java

@@ -1,4 +0,0 @@
-package com.uas.eis.controller;
-
-public class BaseController {
-}

+ 7 - 11
src/main/java/com/uas/eis/controller/ERPController.java

@@ -1,31 +1,27 @@
 package com.uas.eis.controller;
 
-import com.uas.eis.sdk.dto.QueryIOListReq;
-import com.uas.eis.sdk.dto.QueryStockListReq;
+import com.uas.eis.sdk.dto.QueryReq;
 import com.uas.eis.beans.result.Result;
 import com.uas.eis.service.ERPService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Map;
+
 /**
  * @author wuyx
  * @email wuyx@usoftchina.com
- * @date 2025-04-25
+ * @date 2025-11-14
  */
 @RestController
 public class ERPController {
     @Autowired
     private ERPService erpService;
 
-    @RequestMapping(value="/api/getStockList",method=RequestMethod.POST)
-    @ResponseBody
-    public Result getStockList(@RequestBody QueryStockListReq queryStockListReq){
-        return erpService.getStockList(queryStockListReq);
-    }
-    @RequestMapping(value="/api/getIOList",method=RequestMethod.POST)
+    @RequestMapping(value="/mesapi/dev/query",method=RequestMethod.POST)
     @ResponseBody
-    public Result getIOList(@RequestBody QueryIOListReq queryIOListReq){
-        return erpService.getIOList(queryIOListReq);
+    public Map<String,Object> getStockList(@RequestBody QueryReq queryReq){
+        return erpService.getList(queryReq,"dev");
     }
 
 }

+ 0 - 44
src/main/java/com/uas/eis/controller/LoginController.java

@@ -1,44 +0,0 @@
-package com.uas.eis.controller;
-
-import com.uas.eis.beans.result.Result;
-import com.uas.eis.config.PDMConfig;
-import com.uas.eis.core.support.TokenHandler;
-import com.uas.eis.core.support.TokenProperties;
-import com.uas.eis.entity.ErrorMessage;
-import com.uas.eis.exception.ApiSystemException;
-import com.uas.eis.sdk.dto.UserReq;
-import com.uas.eis.sdk.entity.ApiResult;
-import com.uas.eis.service.UserService;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@RestController
-public class LoginController {
-    private static Map<String,String> tokenConfig = TokenProperties.getAllProperty();
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
-    @Autowired
-    private UserService userService;
-
-    @PostMapping("/login")
-    public Result login(@RequestBody UserReq userReq){
-        Map<String, String> map = new HashMap();
-        String username = userReq.getUsername();
-        String password = userReq.getPassword();
-        userService.checkUser(username, password);
-        String token = TokenHandler.createToken(username,password);
-        logger.info("login: username {} password {} token {} expiresIn {}",username,password,token,tokenConfig.get("KEEP"));
-        map.put("code", "200");
-        map.put("token", token);
-        map.put("msg", "请求成功");
-        map.put("expiresIn", tokenConfig.get("KEEP"));
-        return Result.success(map);
-    }
-}

+ 1 - 1
src/main/java/com/uas/eis/core/WebAppConfig.java

@@ -33,7 +33,7 @@ public class WebAppConfig extends WebMvcConfigurationSupport{
 	@Override
 	public void addInterceptors(InterceptorRegistry registry){
 		registry.addInterceptor(interceptorConfig()).addPathPatterns("/api/**","/mes/**")
-				.excludePathPatterns("/login", "/erp/**");
+				.excludePathPatterns("/login", "/erp/**", "/mesapi/**");
 		registry.addInterceptor(new DataSourceInterceptor()).addPathPatterns("/*/**");
 	}
 	

+ 23 - 0
src/main/java/com/uas/eis/sdk/dto/QueryReq.java

@@ -0,0 +1,23 @@
+package com.uas.eis.sdk.dto;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class QueryReq {
+    @JsonProperty("FormId")
+    private String formId; //表单名称
+    @JsonProperty("FieldKeys")
+    private String fieldKeys; //字段名
+    @JsonProperty("FilterString")
+    private String filterString; //过滤条件
+    @JsonProperty("OrderString")
+    private String orderString; //排序条件
+    @JsonProperty("TopRowCount")
+    private Integer topRowCount = 0; //返回记录行数,0 不限制
+    @JsonProperty("StartRow")
+    private Integer startRow = 0; //起始行数(分页显示用) 0 默认从第一行记录
+    @JsonProperty("Limit")
+    private Integer limit = 2000; //最多行数 默认2000
+}

+ 0 - 16
src/main/java/com/uas/eis/sdk/dto/QueryStockListReq.java

@@ -1,16 +0,0 @@
-package com.uas.eis.sdk.dto;
-
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@NoArgsConstructor
-public class QueryStockListReq {
-    private Integer pageNum;//当前页数
-    private Integer pageSize;//每页条数
-    private String materialNo;//物料编号 对应字段:pr_code
-    private String materialName;//物料名称 对应字段: pr_detail
-    private String specs;//物料规格 对应字段: pr_spec
-    private String specsRules;//物料规格描述规则 对应ERP字段: pr_specrule
-    private String warehouse;//仓库编号 对应字段: pw_whcode
-}

+ 4 - 4
src/main/java/com/uas/eis/service/ERPService.java

@@ -1,17 +1,17 @@
 package com.uas.eis.service;
 
 
-import com.uas.eis.sdk.dto.QueryIOListReq;
-import com.uas.eis.sdk.dto.QueryStockListReq;
+import com.uas.eis.sdk.dto.QueryReq;
 import com.uas.eis.beans.result.Result;
 
+import java.util.Map;
+
 /**
  * @author wuyx
  * @email wuyx@usoftchina.com
  * @date 2025-04-25
  */
 public interface ERPService {
-    Result getStockList(QueryStockListReq queryStockListReq);
+    Map<String,Object> getList(QueryReq queryReq, String ev);
 
-    Result getIOList(QueryIOListReq queryIOListReq);
 }

+ 43 - 97
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -1,9 +1,11 @@
 package com.uas.eis.service.Impl;
 
+import com.uas.eis.core.config.SpObserver;
 import com.uas.eis.dao.*;
 import com.uas.eis.sdk.dto.*;
 import com.uas.eis.beans.result.Result;
 import com.uas.eis.service.ERPService;
+import com.uas.eis.utils.CollectionUtil;
 import com.uas.eis.utils.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -12,7 +14,9 @@ import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -27,110 +31,52 @@ public class ERPServiceImpl implements ERPService {
     private BaseDao baseDao;
 
     @Override
-    public Result getStockList(QueryStockListReq queryStockListReq) {
-        ListResp<StockListDTO> listResp = new ListResp<>();
-        listResp.setPageNum(queryStockListReq.getPageNum());
-        listResp.setPageSize(queryStockListReq.getPageSize());
-        int page = queryStockListReq.getPageNum();
-        int pageSize = queryStockListReq.getPageSize();
-        int start = ((page - 1) * pageSize + 1);
-        int end = page * pageSize;
-        StringBuffer cond_sql = new StringBuffer();
-        if(StringUtil.hasText(queryStockListReq.getMaterialNo())){
-            cond_sql.append(" and upper(pw_prodcode) like '%").append(queryStockListReq.getMaterialNo().toUpperCase()).append("%' ");
-        }
-        if(StringUtil.hasText(queryStockListReq.getMaterialName())){
-            cond_sql.append(" and upper(pr_detail) like '%").append(queryStockListReq.getMaterialName().toUpperCase()).append("%' ");
-        }
-        if(StringUtil.hasText(queryStockListReq.getSpecs())){
-            cond_sql.append(" and upper(pr_spec) like '%").append(queryStockListReq.getSpecs().toUpperCase()).append("%' ");
-        }
-        if(StringUtil.hasText(queryStockListReq.getSpecsRules())){
-            cond_sql.append(" and upper(pr_specrule) like '%").append(queryStockListReq.getSpecsRules().toUpperCase()).append("%' ");
-        }
-        if(StringUtil.hasText(queryStockListReq.getWarehouse())){
-            cond_sql.append(" and upper(pw_whcode) like '%").append(queryStockListReq.getWarehouse().toUpperCase()).append("%' ");
+    public Map<String,Object> getList(QueryReq queryReq,String ev) {
+        Map<String,Object> resMap = new HashMap<>();
+        if(!"prod".equals(ev)){
+            SpObserver.putSp("N_DGMT_TEST");
         }
+        String formId = queryReq.getFormId(); //表单名称
+        String fieldKeys = queryReq.getFieldKeys(); //字段名
+        String filterString = queryReq.getFilterString(); //字段名
+        String orderString = queryReq.getOrderString(); //排序条件
 
-        //获取总数
-        StringBuffer searchSql = new StringBuffer();
-        searchSql.append("select pw_avprice,pr_location,pw_prodcode,pr_orispeccode,pr_brand,pr_spec,pr_specrule pr_spec_rule,pw_prodid,pr_unit,pw_id,pw_whcode,pw_onhand,pw_movedate,pr_buyername,pw_amount,pr_serial,wh_description,pw_lastdate,pr_detail,pr_speccs")
-                .append(" ,purc_inprogress, po_qty, ma_qty, pick_qty, made_qty, wip_qty  ")
-                .append(" from productWH tab left join warehouse on pw_whcode=wh_code LEFT JOIN USER_PDMAPI_VIEW on pw_prodcode=pr_code left join (select pr_code prcode,pr_speccs from product ) on prcode = pr_code " )
-                .append("WHERE nvl(pw_onhand,0) > 0 ").append(cond_sql);
-        StringBuffer countSql = new StringBuffer("select count(1) from ( ");
-        countSql.append(searchSql);
-        countSql.append(" )");
-//        logger.info("countSql:{}",countSql.toString());
-        Integer total = baseDao.getJdbcTemplate().queryForObject(countSql.toString(), Integer.class);
-        listResp.setTotal(total);
-        List<StockListDTO> stockListDTOS = new ArrayList<>();
-        if(total > 0){
-            StringBuffer querySql = new StringBuffer("select * from (select TT.*, ROWNUM rn from ( ");
-            querySql.append(searchSql)
-                    .append("order by pw_id desc");
-            querySql.append(" )TT where ROWNUM <= ");
-            querySql.append(end);
-            querySql.append(") where rn >= ");
-            querySql.append(start);
-//            logger.info("querySql:{}",querySql.toString());
-            stockListDTOS = baseDao.getJdbcTemplate().query(querySql.toString(),
-                    new BeanPropertyRowMapper<>(StockListDTO.class));
-        }
-        listResp.setList(stockListDTOS);
-        return Result.success(listResp);
-    }
-
-    @Override
-    public Result getIOList(QueryIOListReq queryIOListReq) {
-        ListResp<IOListDTO> listResp = new ListResp<>();
-        listResp.setPageNum(queryIOListReq.getPageNum());
-        listResp.setPageSize(queryIOListReq.getPageSize());
-        int page = queryIOListReq.getPageNum();
-        int pageSize = queryIOListReq.getPageSize();
+        Integer topRowCount = queryReq.getTopRowCount(); //返回记录行数,0 不限制
+        Integer page = queryReq.getStartRow(); //起始行数(分页显示用) 0 默认从第一行记录
+        Integer pageSize = queryReq.getLimit(); //最多行数 默认2000
+        page = (page == 0) ? 1 : page;
+        pageSize = (pageSize == 0) ? 2000 : pageSize;
         int start = ((page - 1) * pageSize + 1);
         int end = page * pageSize;
-        StringBuffer cond_sql = new StringBuffer("1=1");
-        if(StringUtil.hasText(queryIOListReq.getMaterialNo())){
-            cond_sql.append(" and pd_prodcode ='").append(queryIOListReq.getMaterialNo()).append("' ");
-//        }else {
-//            return Result.success(listResp);
-        }
-        if(StringUtil.hasText(queryIOListReq.getStartDate())){
-            cond_sql.append(" and pi_date >= to_date('").append(queryIOListReq.getStartDate()).append(" 00:00:00','YYYY-MM-DD HH24:mi:ss') ");
+
+        List<Map<String, Object>> dataList = new ArrayList<>();
+        if(!StringUtil.hasText(formId)){
+            resMap.put("Code","1001");
+            resMap.put("Msg","请传入FormId");
+            return resMap;
         }
-        if(StringUtil.hasText(queryIOListReq.getEndDate())){
-            cond_sql.append(" and pi_date <= to_date('").append(queryIOListReq.getEndDate()).append(" 23:59:59','YYYY-MM-DD HH24:mi:ss') ");
+        String sql_ = baseDao.queryForObject("select max(sql_) from MES_QUERYSQL_CONFIG WHERE FORMID ='"+formId+"'",String.class);
+        if(!StringUtil.hasText(sql_)){
+            resMap.put("Code","1002");
+            resMap.put("Msg","FormId:"+formId+",不存在。");
+            return resMap;
         }
-        if(StringUtil.hasText(queryIOListReq.getWarehouse())){
-            cond_sql.append(" and pd_whcode ='").append(queryIOListReq.getWarehouse()).append("' ");
+        sql_= "SELECT "+(StringUtil.hasText(fieldKeys) ? fieldKeys:"*")+" from "+sql_ ;
+        if(StringUtil.hasText(filterString)){
+            sql_ = sql_+" where "+ filterString;
         }
-        //获取总数
-        StringBuffer searchSql = new StringBuffer();
-        searchSql.append("SELECT pd_id,pi_inoutno,pi_class,to_char(pi_date,'yyyy-mm-dd hh24:mi:ss') pi_date,pd_pdno,pd_prodcode,pr_detail,pr_spec,pr_unit,pd_outqty,pd_inqty,pd_whcode,pd_whname,pd_batchcode,pd_ordercode,pi_status,pi_purpose,pi_type,pi_departmentname,pi_cardcode,pi_title" +
-                        ",to_char(pi_date1,'yyyy-mm-dd hh24:mi:ss') pi_date1,pi_recordman" +
-                        ",pi_vouchercode,nvl(pd_seller,pi_sellername) sellername,nvl(pd_sellercode,pi_sellercode) sellercode ")
-                .append(" from ProdInOut inner join ProdIODetail on pd_piid=pi_id left join Product on pr_code=pd_prodcode " )
-                .append("WHERE ").append(cond_sql);
-        StringBuffer countSql = new StringBuffer("select count(1) from ( ");
-        countSql.append(searchSql);
-        countSql.append(" )");
-//        logger.info("countSql:{}",countSql.toString());
-        Integer total = baseDao.getJdbcTemplate().queryForObject(countSql.toString(), Integer.class);
-        listResp.setTotal(total);
-        List<IOListDTO> ioListDTOS = new ArrayList<>();
-        if(total > 0){
-            StringBuffer querySql = new StringBuffer("select * from (select TT.*, ROWNUM rn from ( ");
-            querySql.append(searchSql).append(" ORDER BY PI_DATE DESC,pi_id desc,pd_pdno");
-            querySql.append(" )TT where ROWNUM <= ");
-            querySql.append(end);
-            querySql.append(") where rn >= ");
-            querySql.append(start);
-//            logger.info("querySql:{}",querySql.toString());
-            ioListDTOS = baseDao.getJdbcTemplate().query(querySql.toString(),
-                    new BeanPropertyRowMapper<>(IOListDTO.class));
+        if(StringUtil.hasText(orderString)){
+            sql_ = sql_+" order by "+ orderString;
         }
-        listResp.setList(ioListDTOS);
-        return Result.success(listResp);
+        StringBuffer querySql = new StringBuffer("select * from (select TT.*, ROWNUM rn from ( ");
+        querySql.append(sql_);
+        querySql.append(" )TT where ROWNUM <= ");
+        querySql.append(end);
+        querySql.append(") where rn >= ");
+        querySql.append(start);
+        logger.info("querySql:{}",querySql.toString());
+        dataList = baseDao.queryForList(querySql.toString());
+        resMap.put("Msg",dataList);
+        return resMap;
     }
 }

+ 2 - 2
src/main/resources/application-prod.yml

@@ -2,7 +2,7 @@ spring:
     datasource:
         type: com.alibaba.druid.pool.DruidDataSource
         driverClassName: oracle.jdbc.OracleDriver
-        username: STW_TEST
+        username: N_DGMT
         password: select!#%*(
         url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
         initialSize: 1
@@ -22,7 +22,7 @@ server:
     tomcat:
         uri_encoding: UTF-8
     context-path:
-        /PDMEIS
+        /API
     port: 8186
 action:
     api_action: /EIS/api,/EIS/mes,/EIS/erp

+ 256 - 14
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -1,30 +1,272 @@
 package com.uas.eis;
 
-
-import com.uas.eis.beans.result.Result;
-import com.uas.eis.dao.*;
-import com.uas.eis.sdk.dto.QueryStockListReq;
-import com.uas.eis.service.ERPService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializeConfig;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.uas.eis.beans.result.CrmQueryResult;
+import com.uas.eis.beans.result.Goods;
+import com.uas.eis.entity.HQPODATALIST;
+import com.uas.eis.entity.HQPO_INFO;
+import com.uas.eis.entity.HQVendPurExecplanReq;
+import com.uas.eis.exception.AccessTokenException;
+import com.uas.eis.listener.UasProdInOutListener;
+import com.uas.eis.manager.CustomerManager;
+import com.uas.eis.manager.ProductManager;
+import com.uas.eis.sdk.core.HttpRequest;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.List;
+import java.util.Map;
+
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+
+import com.alibaba.fastjson.JSONObject;
+
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = {UasEisApplication.class})
 public class UasEisApplicationTests {
 	@Autowired
-	private ERPService erpService;
+	private UasProdInOutListener uasProdInOutListener;
+
+	@Autowired
+	private ProductManager productManager;
+
+	@Autowired
+	private CustomerManager customerManager;
+
+	@Test
+	public void testHQPOInfoSerialization() {
+		System.out.println("FastJSON版本: " + com.alibaba.fastjson.JSON.VERSION);
+
+		// 直接测试HQPO_INFO类的序列化
+		HQPO_INFO hqpoInfo = new HQPO_INFO();
+		hqpoInfo.setORIGIN_PO_NO("STOCK");
+
+		// 添加WriteNonStringKeyAsString特性
+		String json = JSON.toJSONString(hqpoInfo,
+				SerializerFeature.WriteMapNullValue,
+				SerializerFeature.PrettyFormat,
+				SerializerFeature.DisableCircularReferenceDetect,
+				SerializerFeature.WriteNonStringKeyAsString);  // 这个特性很重要
+
+		System.out.println("使用完整特性序列化: " + json);
+
+		// 手动构建JSON对象 - 这是一个更可靠的备选方案
+		JSONObject manualJson = new JSONObject();
+		manualJson.put("AAA", hqpoInfo.getORIGIN_PO_NO());
+		String manualJsonString = manualJson.toJSONString();
+		System.out.println("手动构建JSON: " + manualJsonString);
+
+	}
+	
+	@Test
+	public void testHQVendPurExecplanManualJson() {
+		// 创建对象
+		HQVendPurExecplanReq hqVendPurExecplanReq = new HQVendPurExecplanReq();
+		hqVendPurExecplanReq.setVENDOR_NAME("睿智科技发展有限公司");
+		hqVendPurExecplanReq.setVENDOR_CODE("19149");
+		
+		HQPODATALIST hqPODATALIST = new HQPODATALIST();
+		hqPODATALIST.setOU_NAME("华勤通讯香港有限公司");
+		hqPODATALIST.setPO_NUMBER("110306037");
+		hqPODATALIST.setPO_LINE("1.1");
+		hqPODATALIST.setHQ_PN("HQ11430351000");
+		hqPODATALIST.setORDERED_QUANTITY(12000.0);
+		hqPODATALIST.setREQUIRE_DATE("2025/08/01");
+		
+		HQPO_INFO hqpoInfo = new HQPO_INFO();
+		hqpoInfo.setORIGIN_PO_NO("STOCK");
+		
+		// 手动构建完整的JSON结构
+		JSONObject root = new JSONObject();
+		root.put("VENDOR_NAME", hqVendPurExecplanReq.getVENDOR_NAME());
+		root.put("VENDOR_CODE", hqVendPurExecplanReq.getVENDOR_CODE());
+		
+		JSONArray podatalistArray = new JSONArray();
+		JSONObject podatalistObj = new JSONObject();
+		podatalistObj.put("OU_NAME", hqPODATALIST.getOU_NAME());
+		podatalistObj.put("PO_NUMBER", hqPODATALIST.getPO_NUMBER());
+		podatalistObj.put("PO_LINE", hqPODATALIST.getPO_LINE());
+		podatalistObj.put("HQ_PN", hqPODATALIST.getHQ_PN());
+		podatalistObj.put("ORDERED_QUANTITY", hqPODATALIST.getORDERED_QUANTITY());
+		podatalistObj.put("REQUIRE_DATE", hqPODATALIST.getREQUIRE_DATE());
+		
+		JSONArray originInfoArray = new JSONArray();
+		JSONObject originInfoObj = new JSONObject();
+		originInfoObj.put("AAA", hqpoInfo.getORIGIN_PO_NO()); // 这里直接设置为"AAA"
+		originInfoArray.add(originInfoObj);
+		
+		podatalistObj.put("ORIGIN_MANUFACTURER_PO_INFO", originInfoArray);
+		podatalistArray.add(podatalistObj);
+		
+		root.put("PODATALIST", podatalistArray);
+		
+		String manualFullJson = root.toJSONString();
+		System.out.println("手动构建完整JSON: " + manualFullJson);
+	}
+
+
+	@Test
+	public void TestHQ() {
+		// 请求URL
+		String url = "https://editst.huaqin.com:10443/httpsync/agent-vendor-api/poData";
+		String userName = "19149";
+		String pwd = "f7E]Rb(9Ce";
+		// JSON请求体
+		HQVendPurExecplanReq hqVendPurExecplanReq = new HQVendPurExecplanReq();
+		hqVendPurExecplanReq.setVENDOR_NAME("睿智科技发展有限公司");
+		hqVendPurExecplanReq.setVENDOR_CODE("19149");
+		List<HQPODATALIST> PODATALIST = new ArrayList<>();
+		HQPODATALIST hqPODATALIST = new HQPODATALIST();
+		hqPODATALIST.setOU_NAME("华勤通讯香港有限公司");
+		hqPODATALIST.setPO_NUMBER("110306037");
+		hqPODATALIST.setPO_LINE("1.1");
+		hqPODATALIST.setHQ_PN("HQ11430351000");
+		hqPODATALIST.setORDERED_QUANTITY(12000.0);
+		hqPODATALIST.setREQUIRE_DATE("2025/08/01");
+
+		List<HQPO_INFO> hqPO_INFOS = new ArrayList<>();
+		HQPO_INFO hqpoInfo = new HQPO_INFO();
+		hqpoInfo.setORIGIN_PO_NO("STOCK");
+//		hqpoInfo.setORIGIN_PO_LINE("1");
+//		hqpoInfo.setMANUFACTURER_PN("BF1109-A2R4NCCT/LF");
+//		hqpoInfo.setHQ_PN("HQ11430351000");
+//		hqpoInfo.setSUPPLIER_ORDER_DATE("2999/12/31");
+//		hqpoInfo.setQUANTITY(12000.0);
+//		hqpoInfo.setESTIMATE_SHIP_DATE("2025/08/01");
+		hqPO_INFOS.add(hqpoInfo);
+		hqPODATALIST.setORIGIN_MANUFACTURER_PO_INFO(hqPO_INFOS);
+
+		PODATALIST.add(hqPODATALIST);
+		hqVendPurExecplanReq.setPODATALIST(PODATALIST);
+
+		// 使用SerializeConfig强制配置HQPO_INFO的序列化器
+		SerializeConfig config = new SerializeConfig();
+		// 确保使用Fastjson的ASM序列化器
+		config.put(HQPO_INFO.class, config.createASMSerializer(HQPO_INFO.class));
+		config.put(HQPODATALIST.class, config.createASMSerializer(HQPODATALIST.class));
+		config.put(HQVendPurExecplanReq.class, config.createASMSerializer(HQVendPurExecplanReq.class));
+
+		String jsonBody = JSON.toJSONString(hqVendPurExecplanReq, config,
+				SerializerFeature.WriteMapNullValue,
+				SerializerFeature.PrettyFormat,
+				SerializerFeature.DisableCircularReferenceDetect,
+				SerializerFeature.WriteNonStringKeyAsString).replace("null","\"\"");
+				//"{\"key1\":\"value1\",\"key2\":\"value2\"}";
+		System.out.println("jsonBody: "+jsonBody);
+		try {
+//			String response = sendPostRequest(url,userName,pwd, jsonBody);
+//			System.out.println("响应结果: " + response);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static String sendPostRequest(String url,String userName,String pwd, String jsonBody) throws Exception {
+		// 创建URL对象
+		URL obj = new URL(url);
+		HttpURLConnection connection = (HttpURLConnection) obj.openConnection();
+
+		// 设置请求方法
+		connection.setRequestMethod("POST");
+
+		// 设置Basic Auth认证头
+		String auth = userName+":"+pwd;
+		String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8));
+		String authHeader = "Basic " + encodedAuth;
+		connection.setRequestProperty("Authorization", authHeader);
+
+		// 设置请求头
+		connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
+		connection.setRequestProperty("Accept", "application/json");
+
+		// 启用输出流,用于发送请求体
+		connection.setDoOutput(true);
 
+		// 发送JSON请求体
+		try (OutputStream os = connection.getOutputStream()) {
+			byte[] input = jsonBody.getBytes(StandardCharsets.UTF_8);
+			os.write(input, 0, input.length);
+		}
+
+		// 获取响应码
+		int responseCode = connection.getResponseCode();
+		System.out.println("响应码: " + responseCode);
+
+		// 读取响应
+		StringBuilder response = new StringBuilder();
+		try (BufferedReader br = new BufferedReader(
+				new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
+			String responseLine;
+			while ((responseLine = br.readLine()) != null) {
+				response.append(responseLine.trim());
+			}
+		}
+
+		// 断开连接
+		connection.disconnect();
+
+		return response.toString();
+	}
 
 	@Test
-	public void testQuery(){
-		QueryStockListReq queryStockListReq = new QueryStockListReq();
-		queryStockListReq.setPageNum(1);
-		queryStockListReq.setPageSize(100);
-		queryStockListReq.setMaterialNo("14-004");
-		Result result = erpService.getStockList(queryStockListReq);
-		System.out.println(result.toString());
+	public void Test() {
+
+		//客户下载
+		List<String> field_values = new ArrayList<>();
+        field_values.add("1641895200000");
+
+		//商品新增
+		/*List<Map<String,Object>> sku = new ArrayList<>();
+		Map<String,Object> map = new HashMap<>();
+		List spec_and_value = new ArrayList();
+		map.put("spec_and_value",spec_and_value);
+		map.put("product_status","1");
+		map.put("unit","PCS");
+		sku.add(map);
+		Goods goods = new Goods();
+		goods.setDataObjectApiName("SPUObj");
+		goods.setUnit("PCS");
+		goods.setIs_spec(false);
+		goods.setStandard_price(2.26);
+		goods.setProduct_line("1");
+		goods.setName("测试新增202201210077");
+		goods.setCategory("6");
+		//新增时
+		//goods.setSku(sku);*/
+
+		//修改时必要参数
+		//goods.set_id("61ea66a4f6c2910001540093");
+		try {
+			CrmQueryResult crmQueryResult = customerManager.queryCustomer(field_values);
+			Map<String, Object> data = crmQueryResult.getData();
+			List<Map<String,Object>> dataList = (List<Map<String,Object>>) data.get("dataList");
+			Object name = dataList.get(0).get("name");
+			Object id = dataList.get(0).get("_id");
+			System.out.println(name);
+			System.out.println(id);
+			//productManager.addGoods(goods);
+			//productManager.updateGoods(goods);
+		}catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
-}
+
+
+}