Selaa lähdekoodia

完成定时同步iBOSS商品编码

sh4wmoo 3 vuotta sitten
vanhempi
commit
f7741f43f0

+ 8 - 3
src/main/java/com/dk/mnls_mp/infrastructure/convert/IBOSSGoodsCodeConvert.java

@@ -1,6 +1,7 @@
 package com.dk.mnls_mp.infrastructure.convert;
 
-import com.dk.mnls_mp.model.dto.FacCodeDetailDto;
+import com.dk.mnls_mp.model.dto.FacCodeDetailDTO;
+import com.dk.mnls_mp.model.vo.IBOSSGoodsCodeVO;
 import com.dk.mnls_mp.model.pojo.mnls.IBOSSGoodsCode;
 import org.apache.commons.lang.StringUtils;
 import org.mapstruct.Mapper;
@@ -22,7 +23,7 @@ public interface IBOSSGoodsCodeConvert {
      * @author : 张潇木
      * @date : 2022-6-29 11:25
      */
-    List<IBOSSGoodsCode> facDTO2IBOSSGoodsCodePO(List<FacCodeDetailDto> facCodeDetailDtoList);
+    List<IBOSSGoodsCode> facDTO2IBOSSGoodsCodePO(List<FacCodeDetailDTO> facCodeDetailDTOList);
 
     @Mappings({
             @Mapping(expression = "java(facCodeDetailDto.getItemId())", target = "itemId"),
@@ -35,7 +36,7 @@ public interface IBOSSGoodsCodeConvert {
             @Mapping(expression = "java(facCodeDetailDto.getCatName())", target = "seriesName"),
             @Mapping(expression = "java(getVarietyName(facCodeDetailDto.getMidClassName(),facCodeDetailDto.getSmallClassName()))", target = "varietyName"),
     })
-    IBOSSGoodsCode facDTO2IBOSSGoodsCodePO (FacCodeDetailDto facCodeDetailDto);
+    IBOSSGoodsCode facDTO2IBOSSGoodsCodePO (FacCodeDetailDTO facCodeDetailDto);
 
     default String getKindName(String big){
         if(StringUtils.isNotEmpty(big)){
@@ -54,4 +55,8 @@ public interface IBOSSGoodsCodeConvert {
         return "-";
     }
 
+    IBOSSGoodsCodeVO goodsCodePO2IBOSSVO(IBOSSGoodsCode IBOSSGoodsCode);
+
+    List<IBOSSGoodsCodeVO> goodsCodePO2IBOSSVO(List<IBOSSGoodsCode> list);
+
 }

+ 64 - 47
src/main/java/com/dk/mnls_mp/infrastructure/web/Scheduler.java

@@ -1,13 +1,19 @@
 package com.dk.mnls_mp.infrastructure.web;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.dk.mnls_mp.constant.Constant;
 import com.dk.mnls_mp.infrastructure.base.ResponseCodeEnum;
-import com.dk.mnls_mp.mapper.basic.CodeFacRecordMapper;
-import com.dk.mnls_mp.mapper.basic.CustomerMapper;
-import com.dk.mnls_mp.mapper.basic.WCFinfoMapper;
+import com.dk.mnls_mp.infrastructure.convert.IBOSSGoodsCodeConvert;
+import com.dk.mnls_mp.mapper.basic.*;
+import com.dk.mnls_mp.mapper.mnls.IBOSSGoodsCodeMapper;
+import com.dk.mnls_mp.model.pojo.basic.Customer;
+import com.dk.mnls_mp.model.pojo.basic.SynchStatus;
+import com.dk.mnls_mp.model.pojo.mnls.IBOSSGoodsCode;
+import com.dk.mnls_mp.model.vo.IBOSSGoodsCodeVO;
 import com.dk.mnls_mp.service.basic.SynchFacService;
 import com.dk.mnls_mp.service.iboss.PullIbossDataService;
 import com.dk.mnls_mp.service.mnls.PullFacGoodsCodeService;
+import com.dk.mnls_mp.service.pullDetail.PullOrderDetailService;
 import com.dk.mnls_mp.service.synchCode.SynchCodeService;
 import com.dongke.base.exceptionHandler.ResponseResultVO;
 import lombok.extern.slf4j.Slf4j;
@@ -19,12 +25,16 @@ import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Slf4j
 @Component
 public class Scheduler {
     @Autowired
+    PullOrderDetailService pullOrderDetailService;
+
+    @Autowired
     PullFacGoodsCodeService pullFacGoodsCodeService;
 
     @Autowired
@@ -36,71 +46,78 @@ public class Scheduler {
     @Autowired
     PullIbossDataService pullIbossDataService;
 
+    @Autowired
+    CodeRecordMapper codeRecordMapper;
+
+    @Autowired
+    SynchStatusMapper synchStatusMapper;
+
+    @Autowired
+    IBOSSGoodsCodeConvert IBOSSGoodsCodeConvert;
+
+    @Autowired
+    IBOSSGoodsCodeMapper IBOSSGoodsCodeMapper;
+
     /**
-     * @desc   : 1.调用拉取产品编码方法。
+     * @desc   : 00:00:01 定时调用拉取产品编码方法。
      * @author : 张潇木
      * @date   : 2022/9/28 15:06
      */
     @Scheduled(cron = "1 0 0 * * ?")
-    public void syncGoodsData() {
-        Date startTime;
-        String type = "";
-
-        // region 调用抓取crm产品编码方法。
+    public void pullGoodsData() {
         //定义拉取履历
         Map pullRecord=new HashMap(4){{put("CreateTime", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));put("Status",0);}};
         //插入历史履历
         codeFacRecordMapper.insertHistory(pullRecord);
         //调用接口拉取编码
         pullFacGoodsCodeService.pullFacGoodsCode(Integer.valueOf(pullRecord.get("syncId").toString()));
-        // endregion
-
-//        startTime = new Date();
-//        type = "syncGoodsData-2.抓取crm产品编码";
-//        log.info("开始定时任务:{},开始时间:{}", type, startTime);
-//        ResponseResultVO res5 = kindCrmService.translateCode();
-//        checkRes(res5, type, startTime);
-
-//        7.调用同步iBOSS产品编码。
-//        startTime = new Date();
-//        type = "syncGoodsData-4.同步iBOSS产品编码";
-//        log.info("开始定时任务:{},开始时间:{}", type, startTime);
-//        Map<String, Object> map = new HashMap<>();
-//        map.put("cusList", wcfinfoMapper.selectWCFIDList(new WCFinfo()));
-//        map.put("all", true);
-//        map.put("sync", true);
-//        map.put("codeList", new ArrayList<>());
-//        map.put("createuserid", 0);
-//        ResponseResultVO res7 = synchCodeService.synchCode(map);
-//        checkRes(res7, type, startTime);
+    }
 
+    /**
+     * @desc   : 00:01:00 定时同步iBOSS商品编码
+     * @author : 张潇木
+     * @date   : 2022/9/28 17:21
+     */
+    @Scheduled(cron = "0 1 0 * * ?")
+    public void syncGoodsData() {
+        //查询同步客户
+        List<Customer> customers = customerMapper.selectAllCus();
+        //定义插入履历参数
+        Map syncRecord=new HashMap(4){{put("CreateTime", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));}};
+        //插入同步履历
+        codeRecordMapper.insertResult(syncRecord);
+        //获取同步总表id
+        int syncId = Integer.valueOf(syncRecord.get("syncId").toString());
+        //获取需要同步的编码
+        List<IBOSSGoodsCodeVO> list = IBOSSGoodsCodeConvert.goodsCodePO2IBOSSVO(IBOSSGoodsCodeMapper.selectList(new QueryWrapper<IBOSSGoodsCode>().lambda().gt(IBOSSGoodsCode::getCreateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDateTime.now()))));
+        //记录日志
+        log.info("需要同步的经销商数量=>{},经销商信息=>{}",customers.size(),customers);
+        log.info("需要同步的新编码数量=>{},编码明细=>{}",list.size(),list);
+        //有新编码需要同步,再调用接口同步
+        if(list.size()>0){
+            //循环同步所有经销商
+            for (Customer it : customers) {
+                //先插入同步履历明细
+                synchStatusMapper.insertDetail(new SynchStatus().setSynchid(syncId).setCustomerid(it.getCustomerid()).setStatus(0));
+                //调用同步接口
+                pullOrderDetailService.syncCode(it,syncId,list);
+            }
+        }else{
+            log.info("无新编码需要同步");
+        }
     }
 
+
     /**
-     * @author : sh4wmoo
-     * @date : 2021-9-6 10:09
-     * @desc : 独立定时任务 拉取iBOSS单据信息
+     * @desc   : 00:00:30 定时拉取iBOSS单据信息
+     * @author : 张潇木
+     * @date   : 2022/9/28 17:22
      */
     @Scheduled(cron = "30 0 0 * * ?")
     public void pullIBOSSData() {
         pullIbossDataService.pullIbossData(Constant.PullDataType.INVENTORY,null);
     }
 
-    /**
-     * @author : sh4wmoo
-     * @date : 2021-9-6 10:09
-     * @desc : 独立定时任务 向iBOSS推送crm安装数量
-     */
-//    @Scheduled(cron = "0 0 0 * * ?")
-//    public void pushOrderDetailToIBOSSFromCrm() {
-//        //10 推送Iboss订单安装完成状态
-//        Date startTime = new Date();
-//        String type = "pushOrderDetailToIBOSSFromCrm-1.开始推送Iboss订单安装完成状态";
-//        log.info("开始定时任务:{},开始时间:{}", type, startTime);
-//        ResponseResultVO resOrder = crmOrderService.pushToIboss();
-//        ResponseResultVO res10 = new ResponseResultVO(resOrder.getCode(), resOrder.getMessage(), resOrder.getData());
-//        checkRes(res10, type, startTime);
-//    }
 
     /**
      * @author : sh4wmoo

+ 1 - 1
src/main/java/com/dk/mnls_mp/mapper/basic/CodeRecordMapper.xml

@@ -2014,7 +2014,7 @@
 
     </select>
 
-    <insert id="insertResult" useGeneratedKeys="true" keyProperty="SynchID" keyColumn="SynchID">
+    <insert id="insertResult" useGeneratedKeys="true" keyProperty="syncId" keyColumn="SynchID">
         insert into t_mst_synchstatus
             (CREATEDATE)
         values (now())

+ 4 - 1
src/main/java/com/dk/mnls_mp/mapper/basic/SynchStatusMapper.java

@@ -3,6 +3,7 @@ package com.dk.mnls_mp.mapper.basic;
 import com.dk.mnls_mp.model.pojo.basic.SynchStatus;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 商品/科目同步履历Dao层
@@ -10,7 +11,7 @@ import java.util.List;
 public interface SynchStatusMapper {
     int insert(SynchStatus record);
 
-    int insertSelective(SynchStatus record);
+    int insertDetail(SynchStatus record);
 
     /**
      * 商品同步履历:查询日期
@@ -57,4 +58,6 @@ public interface SynchStatusMapper {
      * @return
      */
     int selectSubjectTotal(SynchStatus synchStatus);
+
+    int updateByID(Map map);
 }

+ 7 - 13
src/main/java/com/dk/mnls_mp/mapper/basic/SynchStatusMapper.xml

@@ -213,7 +213,7 @@
         </if>
     </select>
 
-    <insert id="insertSelective" parameterType="com.dk.mnls_mp.model.pojo.basic.SynchStatus">
+    <insert id="insertDetail" parameterType="com.dk.mnls_mp.model.pojo.basic.SynchStatus">
         insert into t_mst_synchstatusdetail
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="synchid != null">
@@ -222,12 +222,6 @@
             <if test="customerid != null">
                 CustomerID,
             </if>
-            <if test="codeid != null">
-                CodeID,
-            </if>
-            <if test="version != null">
-                Version,
-            </if>
             <if test="status != null">
                 Status,
             </if>
@@ -239,15 +233,15 @@
             <if test="customerid != null">
                 #{customerid,jdbcType=INTEGER},
             </if>
-            <if test="codeid != null">
-                #{codeid,jdbcType=INTEGER},
-            </if>
-            <if test="version != null">
-                #{version,jdbcType=INTEGER},
-            </if>
             <if test="status != null">
                 #{status,jdbcType=INTEGER},
             </if>
         </trim>
     </insert>
+
+    <update id="updateByID" parameterType="java.util.Map">
+        update t_mst_synchstatusdetail t
+        set t.Status = #{Status},t.Message=#{Message}
+        where t.SynchID = #{SynchID}
+    </update>
 </mapper>

+ 2 - 2
src/main/java/com/dk/mnls_mp/model/dto/FacCodeDto.java → src/main/java/com/dk/mnls_mp/model/dto/FacCodeDTO.java

@@ -12,7 +12,7 @@ import java.util.List;
  */
 @Data
 @Accessors(chain = true)
-public class FacCodeDto {
+public class FacCodeDTO {
     /**
      * traceId
      */
@@ -41,5 +41,5 @@ public class FacCodeDto {
     /**
      * 厂家商品编码明细集合
      */
-    private List<FacCodeDetailDto> records;
+    private List<FacCodeDetailDTO> records;
 }

+ 1 - 1
src/main/java/com/dk/mnls_mp/model/dto/FacCodeDetailDto.java → src/main/java/com/dk/mnls_mp/model/dto/FacCodeDetailDTO.java

@@ -12,7 +12,7 @@ import java.math.BigDecimal;
  */
 @Data
 @Accessors(chain = true)
-public class FacCodeDetailDto {
+public class FacCodeDetailDTO {
 
     /**
      * itemId

+ 2 - 0
src/main/java/com/dk/mnls_mp/model/pojo/basic/SynchStatus.java

@@ -2,10 +2,12 @@ package com.dk.mnls_mp.model.pojo.basic;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 import java.util.Date;
 
 @Data
+@Accessors(chain = true)
 public class SynchStatus {
     private Integer synchid;
 

+ 1 - 1
src/main/java/com/dk/mnls_mp/model/pojo/mnls/FacCodeQuery.java → src/main/java/com/dk/mnls_mp/model/query/FacCodeQuery.java

@@ -1,4 +1,4 @@
-package com.dk.mnls_mp.model.pojo.mnls;
+package com.dk.mnls_mp.model.query;
 
 import com.alibaba.fastjson.JSONObject;
 import lombok.Data;

+ 75 - 0
src/main/java/com/dk/mnls_mp/model/vo/IBOSSGoodsCodeVO.java

@@ -0,0 +1,75 @@
+package com.dk.mnls_mp.model.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc   : 调用iBOSS新建商品编码接口参数VO
+ * @author : 张潇木
+ * @date   : 2022/9/28 15:39
+ */
+@Data
+@Accessors(chain = true)
+public class IBOSSGoodsCodeVO implements Serializable {
+
+    /**
+     * 美云商品信息唯一键
+     */
+    private Long itemId;
+
+
+    /**
+     * iBOSS唯一编码
+     */
+    private String onlyCode;
+
+
+    /**
+     * iBOSS商品编码
+     */
+    private String code;
+
+
+    /**
+     * iBOSS商品名称
+     */
+    private String goodsName;
+
+
+    /**
+     * iBOSS规格
+     */
+    private String specification;
+
+
+    /**
+     * 包装数
+     */
+    private BigDecimal packageNum;
+
+
+    /**
+     * 种类
+     */
+    private String kindName;
+
+
+    /**
+     * 系列
+     */
+    private String seriesName;
+
+
+    /**
+     * 品种
+     */
+    private String varietyName;
+
+
+    private static final long serialVersionUID = 1L;
+
+}
+

+ 10 - 12
src/main/java/com/dk/mnls_mp/service/mnls/PullFacGoodsCodeService.java

@@ -7,10 +7,10 @@ import com.dk.mnls_mp.infrastructure.config.Config;
 import com.dk.mnls_mp.infrastructure.convert.IBOSSGoodsCodeConvert;
 import com.dk.mnls_mp.infrastructure.util.HttpHelper;
 import com.dk.mnls_mp.mapper.basic.CodeFacRecordMapper;
-import com.dk.mnls_mp.model.dto.FacCodeDetailDto;
-import com.dk.mnls_mp.model.dto.FacCodeDto;
+import com.dk.mnls_mp.model.dto.FacCodeDetailDTO;
+import com.dk.mnls_mp.model.dto.FacCodeDTO;
 import com.dk.mnls_mp.model.pojo.basic.*;
-import com.dk.mnls_mp.model.pojo.mnls.FacCodeQuery;
+import com.dk.mnls_mp.model.query.FacCodeQuery;
 import com.dk.mnls_mp.model.pojo.mnls.IBOSSGoodsCode;
 import com.dongke.base.exceptionHandler.BaseBusinessException;
 import com.dongke.base.exceptionHandler.ResponseResultUtil;
@@ -18,9 +18,7 @@ import com.dongke.base.exceptionHandler.ResponseResultVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -55,7 +53,7 @@ public class PullFacGoodsCodeService {
     /**
      * 厂家商品编码明细集合
      */
-    List<FacCodeDetailDto> facCodeDetailDtoList;
+    List<FacCodeDetailDTO> facCodeDetailDTOList;
 
     /**
      * @desc   : 拉取厂家商品编码
@@ -64,7 +62,7 @@ public class PullFacGoodsCodeService {
      */
     public ResponseResultVO pullFacGoodsCode(int syncId) {
         //初始化商品编码结果集
-        facCodeDetailDtoList=new ArrayList<>();
+        facCodeDetailDTOList =new ArrayList<>();
         try {
             //组装查询参数
             FacCodeQuery facCodeQuery = this.packageQuery(null,null);
@@ -76,8 +74,8 @@ public class PullFacGoodsCodeService {
             Date endTime = new Date();
             log.info("拉取厂家商品编码成功,耗时=>{}毫秒(ms)", endTime.getTime() - startTime.getTime());
             //拉取到数据后,插入中台数据库
-            if(facCodeDetailDtoList.size()>0){
-                this.insertGoodsCode(facCodeDetailDtoList);
+            if(facCodeDetailDTOList.size()>0){
+                this.insertGoodsCode(facCodeDetailDTOList);
             }
             //将履历表状态修改为成功
             codeFacRecordMapper.updateCodeHistoryStatusByID(new HashMap(4){{put("Status",1);put("SynchID",syncId);}});
@@ -94,7 +92,7 @@ public class PullFacGoodsCodeService {
      * @author : 张潇木
      * @date   : 2022/9/25 13:44
      */
-    public void insertGoodsCode(List<FacCodeDetailDto> list) {
+    public void insertGoodsCode(List<FacCodeDetailDTO> list) {
         List<IBOSSGoodsCode> ibossGoodsCodes = convert.facDTO2IBOSSGoodsCodePO(list);
         IBOSSGoodsCodeService.insertBatch(ibossGoodsCodes);
     }
@@ -128,9 +126,9 @@ public class PullFacGoodsCodeService {
         ResponseResultVO resultVO = HttpHelper.postMY(config.getMyGoodsCodeUrl(), query);
         if (ResponseCodeEnum.SUCCESS.getCode()==resultVO.getCode()) {
             //返回值转换DTO
-            FacCodeDto facCodeDto= JSON.parseObject(resultVO.getData().toString(),FacCodeDto.class);
+            FacCodeDTO facCodeDto= JSON.parseObject(resultVO.getData().toString(), FacCodeDTO.class);
             if(ResponseCodeEnum.SUCCESS.getCode().equals(facCodeDto.getCode())&&facCodeDto.getRecords()!=null){
-                facCodeDetailDtoList.addAll(facCodeDto.getRecords());
+                facCodeDetailDTOList.addAll(facCodeDto.getRecords());
             }else{
                 log.error("getFacCode 接口调用失败,接口返回code不等于200",JSON.toJSONString(resultVO));
                 throw new BaseBusinessException(ResponseCodeEnum.MY_GOODS_CODE_POST_FAIL.getCode(),ResponseCodeEnum.MY_GOODS_CODE_POST_FAIL.getMessage());

+ 41 - 37
src/main/java/com/dk/mnls_mp/service/pullDetail/PullOrderDetailService.java

@@ -3,20 +3,24 @@ package com.dk.mnls_mp.service.pullDetail;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.dk.mnls_mp.infrastructure.base.ResponseCodeEnum;
 import com.dk.mnls_mp.infrastructure.config.IbossProxy;
 import com.dk.mnls_mp.constant.Constant;
+import com.dk.mnls_mp.infrastructure.convert.IBOSSGoodsCodeConvert;
 import com.dk.mnls_mp.infrastructure.util.XmlUtil;
-import com.dk.mnls_mp.mapper.basic.IbossOrganizationMapper;
-import com.dk.mnls_mp.mapper.basic.PullOrderDetailMapper;
-import com.dk.mnls_mp.mapper.basic.SystemParamterMapper;
-import com.dk.mnls_mp.mapper.basic.WCFinfoMapper;
+import com.dk.mnls_mp.mapper.basic.*;
+import com.dk.mnls_mp.mapper.mnls.IBOSSGoodsCodeMapper;
 import com.dk.mnls_mp.model.dto.IBOSSDTO;
 import com.dk.mnls_mp.model.pojo.basic.*;
 import com.dk.mnls_mp.model.pojo.mnls.IBOSSData;
 import com.dk.mnls_mp.infrastructure.util.HttpHelper;
+import com.dk.mnls_mp.model.pojo.mnls.IBOSSGoodsCode;
+import com.dk.mnls_mp.model.vo.IBOSSGoodsCodeVO;
 import com.dk.mnls_mp.service.mnls.IBOSSDataService;
+import com.dk.mnls_mp.service.mnls.IBOSSGoodsCodeService;
 import com.dongke.base.annotation.Pagination;
+import com.dongke.base.exceptionHandler.BaseBusinessException;
 import com.dongke.base.exceptionHandler.ResponseResultUtil;
 import com.dongke.base.exceptionHandler.ResponseResultVO;
 import lombok.extern.slf4j.Slf4j;
@@ -57,8 +61,8 @@ public class PullOrderDetailService {
     @Autowired
     private IBOSSDataService ibossDataService;
 
-
-
+    @Autowired
+    private SynchStatusMapper synchStatusMapper;
 
     public ResponseResultVO selectDate() {
         return ResponseResultUtil.success(pullOrderDetailMapper.selectDate());
@@ -128,12 +132,11 @@ public class PullOrderDetailService {
      */
     @Async("pullIbossData")
     public ResponseResultVO callWebService(Customer customer, PullOrderDetail pull, Constant.PullDataType type) {
-
         //定义iBOSS接口返回值实体
         IBOSSDTO IBOSSDTO=new IBOSSDTO();
         //定义履历成功状态
         Integer status=0;
-        //此处用try捕获异常,保证线程之间不会受事务影响
+        //此处用try捕获异常,保证线程之间不会受事务影响
         try {
             //查询客户webservice信息
             WCFinfo wcFinfo = wcFinfoMapper.selectById(customer.getWcfid());
@@ -156,7 +159,7 @@ public class PullOrderDetailService {
             Date startTime = new Date();
             ResponseResultVO resultVO = HttpHelper.callIBOSSWebservice(url, param,null);
             Date endTime = new Date();
-            log.info("iBOSS客户=>{},接口响应时间=>{}ms", customer.getUniqueCode(), endTime.getTime() - startTime.getTime());
+            log.info("经销商id=>{},接口响应时间=>{}ms", customer.getCustomerid(), endTime.getTime() - startTime.getTime());
 
             //成功后插入数据
             if (ResponseCodeEnum.SUCCESS.getCode()==resultVO.getCode()) {
@@ -178,43 +181,35 @@ public class PullOrderDetailService {
                 //修改状态为成功
                 status=1;
             }else{
-                log.error("调用iBOSS接口异常,返回值=>{}",resultVO);
+                log.error("调用iBOSS接口异常,经销商id=>{},返回值=>{}",customer.getCustomerid(),resultVO);
             }
 
             //记录履历
             this.recordPullDetail(IBOSSDTO,pull,(long)customer.getCustomerid(),type,status);
             return ResponseResultUtil.success();
         } catch (Exception e) {
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-            log.error("callWebService失败", e);
-            return ResponseResultUtil.error("callWebService失败");
+            log.error("callWebService失败,经销商id=>{},异常信息=>{}"+customer.getCustomerid(), e);
+            return ResponseResultUtil.error(666,"callWebService失败");
         }
     }
 
-    public ResponseResultVO testSyncCode() {
-
-
-        //此处用try捕获异常,保证线程之间不会受事务影响
+    public ResponseResultVO syncCode(Customer customer,int syncId,List<IBOSSGoodsCodeVO> goodsCodelist) {
+        //此处用try捕获异常,保证同步各个经销商之间不会因为一个经销商异常 而导致全部异常
         try {
+            //查询客户webservice信息
+            WCFinfo wcFinfo = wcFinfoMapper.selectById(customer.getWcfid());
+            if (wcFinfo == null) {
+                throw new BaseBusinessException(666,"同步编码失败,没有找到此客户的webService信息,客户信息=>"+customer);
+            }
 
             //拼接url 区别于恒洁中台 直接调用iBOSS的webservice接口
-            String url = "http://192.168.1.104:50561" + WEBSERVICE_INTERFACE_POSTFIX +"DK_SaveGoods_Code_MP";
+            String url = "http://"+wcFinfo.getWcfip() + ":" + wcFinfo.getWcfport() + WEBSERVICE_INTERFACE_POSTFIX +"DK_SaveGoods_Code_MP";
 
             //整理参数
             Map<String, Object> param = new HashMap<>();
-            param.put("accountCode", "HKZRMY_CS");
-            param.put("userCode","cw001");
-            param.put("goodsCode",Arrays.asList(new HashMap(){{
-                put("code","656565");
-                put("specification","200*200");
-                put("itemId",193001);
-                put("goodsName","动物卡通砖(M)/006/200*200/123");
-                put("onlyCode","006/200*200/123");
-                put("seriesName","动物卡通砖(M)");
-                put("package",1);
-                put("kindName","-");
-                put("varietyName","-");
-            }}));
+            param.put("accountCode", customer.getDongkeaccountcode());
+            param.put("userCode",customer.getUniqueCode());
+            param.put("goodsCode",goodsCodelist);
 
             log.info("=*=*=*=*=*=*=*=*=" + "参数:" + param + "=*=*=*=*=*=*=*=*=");
             //调用接口
@@ -226,14 +221,23 @@ public class PullOrderDetailService {
                 Map<String, Object> resJson = XmlUtil.xmlToJson(resultVO.getData().toString());
                 //map转DTO
                 IBOSSDTO IBOSSDTO = JSON.parseObject(resJson.get("string").toString(), IBOSSDTO.class);
-                log.info("IBOSSDTO=>{}",IBOSSDTO);
+                if(0==IBOSSDTO.getStatus()){
+                    //成功更新状态
+                    synchStatusMapper.updateByID(new HashMap(){{put("SynchID",syncId);put("Status",1);}});
+                    log.info("同步商品编码成功,经销商id=>{}",customer.getCustomerid());
+                    return ResponseResultUtil.success(200,"同步商品编码成功,经销商id=>"+customer.getCustomerid());
+                }else{
+                    //失败记录信息
+                    synchStatusMapper.updateByID(new HashMap(){{put("SynchID",syncId);put("Message",IBOSSDTO.getMessage());}});
+                    log.info("同步iBOSS商品编码失败,iBOSS接口状态码不等于0,经销商id=>{},接口返回值=>{}",customer.getCustomerid(),IBOSSDTO);
+                    return ResponseResultUtil.error(666,"同步iBOSS商品编码失败,iBOSS接口状态码不等于0,经销商id=>"+customer.getCustomerid());
+                }
             }
-
-            return ResponseResultUtil.success();
+            log.info("同步iBOSS商品编码失败,http状态码不等于200,经销商id=>{},接口返回值=>{}",customer.getCustomerid(),resultVO);
+            return ResponseResultUtil.error(666,"同步iBOSS商品编码失败,http状态码不等于200,经销商id=>"+customer.getCustomerid());
         } catch (Exception e) {
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-            log.error("testSyncCode", e);
-            return ResponseResultUtil.error("testSyncCode");
+            log.error("同步iBOSS商品编码异常,经销商id=>{},异常信息=>{}"+customer.getCustomerid(), e);
+            return ResponseResultUtil.error(666,"同步iBOSS商品编码异常,经销商id=>"+customer.getCustomerid());
         }
     }
 

+ 45 - 1
src/main/java/com/dk/mnls_mp/test/ApiTest.java

@@ -1,13 +1,23 @@
 package com.dk.mnls_mp.test;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.dk.mnls_mp.MainApplication;
 import com.dk.mnls_mp.constant.Constant;
+import com.dk.mnls_mp.infrastructure.convert.IBOSSGoodsCodeConvert;
 import com.dk.mnls_mp.mapper.basic.CodeFacRecordMapper;
+import com.dk.mnls_mp.mapper.basic.CodeRecordMapper;
 import com.dk.mnls_mp.mapper.basic.CustomerMapper;
+import com.dk.mnls_mp.mapper.basic.SynchStatusMapper;
+import com.dk.mnls_mp.mapper.mnls.IBOSSGoodsCodeMapper;
 import com.dk.mnls_mp.model.pojo.basic.Customer;
+import com.dk.mnls_mp.model.pojo.basic.SynchStatus;
+import com.dk.mnls_mp.model.pojo.mnls.IBOSSGoodsCode;
+import com.dk.mnls_mp.model.vo.IBOSSGoodsCodeVO;
 import com.dk.mnls_mp.service.iboss.PullIbossDataService;
 import com.dk.mnls_mp.service.mnls.PullFacGoodsCodeService;
 import com.dk.mnls_mp.service.pullDetail.PullOrderDetailService;
+import com.dongke.base.exceptionHandler.ResponseResultUtil;
+import com.dongke.base.exceptionHandler.ResponseResultVO;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -19,6 +29,7 @@ import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -46,6 +57,18 @@ public class ApiTest {
     @Autowired
     CodeFacRecordMapper codeFacRecordMapper;
 
+    @Autowired
+    CodeRecordMapper codeRecordMapper;
+
+    @Autowired
+    SynchStatusMapper synchStatusMapper;
+
+    @Autowired
+    IBOSSGoodsCodeConvert IBOSSGoodsCodeConvert;
+
+    @Autowired
+    IBOSSGoodsCodeMapper IBOSSGoodsCodeMapper;
+
     @Test
     public void callWebService() {
         Customer customer=customerMapper.selectById(212);
@@ -63,7 +86,28 @@ public class ApiTest {
 
     @Test
     public void testSyncCode(){
-        pullOrderDetailService.testSyncCode();
+        //查询同步客户
+        List<Customer> customers = customerMapper.selectAllCus();
+        //定义插入履历参数
+        Map syncRecord=new HashMap(4){{put("CreateTime", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));}};
+        //插入同步履历
+        codeRecordMapper.insertResult(syncRecord);
+        //获取同步总表id
+        int syncId = Integer.valueOf(syncRecord.get("syncId").toString());
+        //获取需要同步的编码
+        List<IBOSSGoodsCodeVO> list = IBOSSGoodsCodeConvert.goodsCodePO2IBOSSVO(IBOSSGoodsCodeMapper.selectList(new QueryWrapper<IBOSSGoodsCode>().lambda().gt(IBOSSGoodsCode::getCreateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDateTime.now()))));
+        //有新编码需要同步,再调用接口同步
+        if(list.size()>0){
+            //循环同步所有经销商
+            for (Customer it : customers) {
+                //先插入同步履历明细
+                synchStatusMapper.insertDetail(new SynchStatus().setSynchid(syncId).setCustomerid(it.getCustomerid()).setStatus(0));
+                //调用同步接口
+                pullOrderDetailService.syncCode(it,syncId,list);
+            }
+        }else{
+            log.info("无新编码需要同步");
+        }
     }
 
     @Test