yaozhixue hace 1 año
padre
commit
cf43f77e09

+ 5 - 0
src/main/java/com/zfire/jiasm/syncdata/service/UploadWorkeCertificateService.java

@@ -1,5 +1,7 @@
 package com.zfire.jiasm.syncdata.service;
 
+import com.zfire.jiasm.syncdata.plus.entity.OutWorkerUpload;
+
 import java.io.IOException;
 import java.text.ParseException;
 
@@ -10,4 +12,7 @@ public interface UploadWorkeCertificateService {
     void procesInitWorkeBx() throws ParseException, IOException;
 
     void procesUploadWorkeBx();
+
+
+    Boolean uploadWorkeBx(OutWorkerUpload owu);
 }

+ 5 - 1
src/main/java/com/zfire/jiasm/syncdata/service/UploadWorkerTOGreeService.java

@@ -2,5 +2,9 @@ package com.zfire.jiasm.syncdata.service;
 
 public interface UploadWorkerTOGreeService {
 
-    void procesUploadWorker() throws Exception;
+    void procesUpdateWorker() throws Exception;
+
+    void procesAddCertWorker();
+
+    void procesAddWorker() throws Exception;
 }

+ 48 - 21
src/main/java/com/zfire/jiasm/syncdata/service/impl/GLPPGFWebsitWorkerServiceImpl.java

@@ -88,7 +88,7 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
 
     @Override
     public void inputData(){
-        // 新增师傅数据
+        // 新增师傅数据 只新增不修改
         inputDataWorker();
 
         // 添加网点师傅数据及平台与商户网点师傅数据  worker_brand_account(师傅网点对应品牌网点信息表) + websit_worker(网点师傅信息表))
@@ -105,15 +105,22 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
         extracted(sfzs, recouts);
 
         // 先同步有效的数据
-        recs = itfTblWangdianWxgDownloadService.lambdaQuery()
-                .in(ItfTblWangdianWxgDownload::getSfzen,sfzs).list();
-        // 新增网点师傅 websit_worker(商户网点师傅信息) 存在修改,不存在新增
-        addWebsitWorkerBrandAccountsInfo(recs);
+        if (CollectionUtils.isNotEmpty(sfzs)){
+            recs = itfTblWangdianWxgDownloadService.lambdaQuery()
+                    .in(ItfTblWangdianWxgDownload::getSfzen,sfzs).list();
+            // 新增网点师傅 websit_worker(商户网点师傅信息) 存在修改,不存在新增
+            // 只做新增,不做修改动作
+            addWebsitWorkerBrandAccountsInfo(recs);
+        }
+
 
         // 同步无效的数据
-        recs = itfTblWangdianWxgDownloadService.lambdaQuery()
-                .in(ItfTblWangdianWxgDownload::getSfzen,recouts).list();
-        addWebsitWorkerBrandAccountsInfo(recs);
+        if (CollectionUtils.isNotEmpty(recouts)){
+            recs = itfTblWangdianWxgDownloadService.lambdaQuery()
+                    .in(ItfTblWangdianWxgDownload::getSfzen,recouts).list();
+            addWebsitWorkerBrandAccountsInfo(recs);
+        }
+
     }
 
     void inputDataWorker(){
@@ -124,16 +131,21 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
 
 
         // 先同步有效的数据
-        recs = itfTblWangdianWxgDownloadService.lambdaQuery()
-                .in(ItfTblWangdianWxgDownload::getSfzen,sfzs).list();
-        // 新增或修改师傅数据 worker:师傅信息表
-        addInOutWorker(recs,Boolean.TRUE);
+        if (CollectionUtils.isNotEmpty(recs)){
+            recs = itfTblWangdianWxgDownloadService.lambdaQuery()
+                    .in(ItfTblWangdianWxgDownload::getSfzen,sfzs).list();
+            // 新增或修改师傅数据 worker:师傅信息表
+            addInOutWorker(recs,Boolean.TRUE);
+        }
 
         // 同步无效的数据
-        recs = itfTblWangdianWxgDownloadService.lambdaQuery()
-                .in(ItfTblWangdianWxgDownload::getSfzen,recouts).list();
-        // 新增或修改师傅数据 worker:师傅信息表
-        addInOutWorker(recs,Boolean.FALSE);
+        if (CollectionUtils.isNotEmpty(recouts)){
+            recs = itfTblWangdianWxgDownloadService.lambdaQuery()
+                    .in(ItfTblWangdianWxgDownload::getSfzen,recouts).list();
+            // 新增或修改师傅数据 worker:师傅信息表
+            addInOutWorker(recs,Boolean.FALSE);
+        }
+
     }
 
     private void extracted(List<String> sfzs, List<String> recouts) {
@@ -143,6 +155,7 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
         // 有效
         recs = itfTblWangdianWxgDownloadService.lambdaQuery()
                 .select(ItfTblWangdianWxgDownload::getSfzen)
+                // .eq(ItfTblWangdianWxgDownload::getSfzen,"421022197809157619")// 测试用
                 .ne(ItfTblWangdianWxgDownload::getFlag, "无效").list();
         recs.stream().forEach(wba -> {
             recins.add(wba.getSfzen());
@@ -153,6 +166,7 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
         //无效
         recs = itfTblWangdianWxgDownloadService.lambdaQuery()
                 .select(ItfTblWangdianWxgDownload::getSfzen)
+                // .eq(ItfTblWangdianWxgDownload::getSfzen,"421022197809157619")// 测试用
                 .eq(ItfTblWangdianWxgDownload::getFlag, "无效").list();
         recs.stream().forEach(wba -> {
             recouts.add(wba.getSfzen());
@@ -536,7 +550,10 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
         // add.setWorkerId(workerIdCardMap.get(m.getSfzen()).get(0).getWorkerId());
 
         // 自生成 一定要与websit_worker.websit_worker_id相同
-        add.setWebsitWorkerId(IdWorker.getIdStr());
+        // websitId + 手机号
+        add.setWebsitWorkerId(workerIdCardMap.get(m.getSfzen().trim()).get(0).getWorkerId() +
+                workerIdCardMap.get(m.getSfzen().trim()).get(0).getMobile());
+
         add.setGroupCompanyId(i.getGroupCompanyId());
         add.setGroupCompanyName(i.getGroupCompanyName());
         add.setWebsitId(i.getWebsitId());
@@ -721,7 +738,10 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
 
     private void addWorkerInfo(List<Worker> addWorkerRec, ItfTblWangdianWxgDownload m,Boolean flag) {
         Worker v = new Worker();
-        v.setWorkerId(IdWorker.getIdStr());
+        //  S + 手机号
+        // v.setWorkerId(IdWorker.getIdStr());
+        v.setWorkerId("S" + m.getYddh());
+
         v.setWorkerName(m.getWxgmc().trim());
         v.setCreateBy("system");
         v.setUpdateBy("system");
@@ -744,7 +764,7 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
             v.setUpdateTime(m.getLastModifiedDate());
         }
         v.setGender(m.getXingb());
-        v.setMobile(m.getYddh());
+        v.setMobile(m.getYddh().trim());
         v.setIdcard(m.getSfzen().trim());
         v.setAge(m.getNianl());
         v.setEducation(m.getXueli());
@@ -1012,12 +1032,14 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
     public void extractedWorkerAddNewInOut(List<ItfTblWangdianWxgDownload> addRec, List<Worker> addWorkerRec, Boolean flag) {
         // 身份证 作为唯一 (有效与无效的只要有效)
         List<String> sfzens = new ArrayList<>();
+        List<String> mobiles = new ArrayList<>();
         // 提取原有的信息
         List<Worker> oldWorkerRec =  workerService.lambdaQuery()
-                .select(Worker::getIdcard).list();
+                .select(Worker::getIdcard,Worker::getMobile).list();
         if (CollectionUtils.isNotEmpty(oldWorkerRec)){
             oldWorkerRec.stream().forEach(wba->{
                 sfzens.add(wba.getIdcard());
+                mobiles.add(wba.getMobile());
             });
             oldWorkerRec.clear();
         }
@@ -1027,10 +1049,15 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
             if (sfzens.contains(m.getSfzen().trim())){
                 continue;
             }
+            // S + 手机号 作为ID主键,手机号是不能重的
+            if (mobiles.contains(m.getSfzen().trim())){
+                continue;
+            }
 
             // 生成对象
             addWorkerInfo(addWorkerRec, m, flag);
             sfzens.add(m.getSfzen().trim());
+            mobiles.add(m.getYddh().trim());
 
             // 新增的插入到表
             if (addWorkerRec.size()>=1000){
@@ -1042,7 +1069,7 @@ public class GLPPGFWebsitWorkerServiceImpl implements GLPPGFWebsitWorkerService
 
         // 新增的插入到表
         if (addWorkerRec.size()>0){
-            workerService.saveOrUpdateBatch(addWorkerRec);
+            workerService.saveBatch(addWorkerRec);
             log.info("本地网点维修工人员信息表新增插入了{}条数据", addWorkerRec.size());
             addWorkerRec.clear();
         }

+ 5 - 5
src/main/java/com/zfire/jiasm/syncdata/service/impl/GLPPWXGQueryAddServiceImpl.java

@@ -401,7 +401,7 @@ public class GLPPWXGQueryAddServiceImpl implements GLPPWXGQueryAddService {
                         ItfTblWangdianWxgDownload::getWxgmc,
                         ItfTblWangdianWxgDownload::getYddh,
                         ItfTblWangdianWxgDownload::getFlag)
-                // .eq(ItfTblWangdianWxgDownload::getSfzen,"51222619650216603X")// 测试用
+                // .eq(ItfTblWangdianWxgDownload::getSfzen,"430421198107039037")// 测试用
                 .like(ItfTblWangdianWxgDownload::getWdno,"S%").list();
 
         // 提取现有已存在的证件信息的师傅信息(待回传同步的证件不处理)
@@ -555,7 +555,7 @@ public class GLPPWXGQueryAddServiceImpl implements GLPPWXGQueryAddService {
         // 提取需要处理的证件照数据
         websitWorkers = websitWorkerService.lambdaQuery()
                 .eq(WebsitWorker::getOutZjljProcess,0)
-                // .in(WebsitWorker::getWebsitWorkerId,"1696842046686597122","1696842046724345857","1698942353616801794")// 测试用
+                // .in(WebsitWorker::getWorkerId,"1705130922693758977")// 测试用
                 .isNotNull(WebsitWorker::getOutZjlj).list();
 
         for (WebsitWorker item :websitWorkers){
@@ -1488,7 +1488,7 @@ public class GLPPWXGQueryAddServiceImpl implements GLPPWXGQueryAddService {
             return true;
         }
         // 若存在有效期,有效期需变大才可以更新
-        if (ptzjyxq.compareTo(zjyxq)>=0){
+        if (ptzjyxq.compareTo(zjyxq)>0){
             return true;
         }
         return false;
@@ -1634,7 +1634,7 @@ public class GLPPWXGQueryAddServiceImpl implements GLPPWXGQueryAddService {
             return null;
         }
         // 若存在有效期,有效期需变大才可以更新
-        if (ptzjyxq.compareTo(zjyxq)>=0){
+        if (ptzjyxq.compareTo(zjyxq)>0){
             return null;
         }
         return ww;
@@ -1659,11 +1659,11 @@ public class GLPPWXGQueryAddServiceImpl implements GLPPWXGQueryAddService {
             }
         }
 
+        upwwinfo.setInsureName("意外险");
         // 保险公司及编号
         if (zj.getZjbh().contains("/")){
             List<String> result = Arrays.asList(zj.getZjbh().split("/"));
             upwwinfo.setSafeCompany(result.get(0));
-            upwwinfo.setInsureName("意外险");
             upwwinfo.setSafeNo(result.get(1));
         } else {
             upwwinfo.setSafeNo(zj.getZjbh());

+ 1 - 0
src/main/java/com/zfire/jiasm/syncdata/service/impl/PublicServiceImpl.java

@@ -1735,6 +1735,7 @@ public class PublicServiceImpl implements PublicService {
         }
     }
 
+
     @Override
     public void setCertFlag(String certName, WorkerCertGree awc){
         if ("身份证".equals(certName)) {

+ 138 - 1
src/main/java/com/zfire/jiasm/syncdata/service/impl/UploadWorkeCertificateServiceImpl.java

@@ -242,6 +242,113 @@ public class UploadWorkeCertificateServiceImpl implements UploadWorkeCertificate
 
 
     @Override
+    public Boolean uploadWorkeBx(OutWorkerUpload owu){
+        List<WorkerBrandAccount> workerWdnos = new ArrayList<>();
+        List<WorkerCertGree> wcgs = new ArrayList<>();
+        String fileo = "";
+        Integer count = 0;
+
+        // 查看指定网点的师傅保险数据是否已生成
+        WorkerCertGree workerbx = new WorkerCertGree();
+        workerCertGreeService.lambdaQuery()
+                .eq(WorkerCertGree::getWorkerId,owu.getWorkerId())
+                .eq(WorkerCertGree::getBrandWebsitId,owu.getBrandWebsitId())
+                .eq(WorkerCertGree::getCertFlag,2)
+                .last("limit 1").one();
+        // 已存在 无需再同步保险数据
+        if (workerbx != null){
+            return Boolean.TRUE;
+        }
+
+        // 提取品牌信息 用于多品牌数据同步目前仅格力,可以先不用做
+        Brand brand = baseService.getBrand();
+        if (brand == null) {
+            return Boolean.FALSE;
+        }
+
+
+        // 获取指定师傅指定网点的保险证
+        WebsitWorker item = websitWorkerService.lambdaQuery()
+                .eq(WebsitWorker::getWorkerId,owu.getWorkerId())
+                .eq(WebsitWorker::getWebsitId,owu.getWebsitId())
+                .one();
+        // 若未同步生成三方文件不处理,等待其他定时任务处理
+        if (StringUtils.isEmpty(item.getOutInsureCert())){
+            return Boolean.FALSE;
+        }
+
+        fileo ="";
+        count = 0;
+        try{
+            // 存在保险才同步
+            if (StringUtils.isEmpty(item.getInsureFiles()) &&
+                    StringUtils.isEmpty(item.getInsureFiles().trim())){
+                return Boolean.FALSE;
+            }
+
+
+            //  查看师傅是否已选中品牌商网点(这里只提取选中格力品牌商的师傅数据)
+            workerWdnos = workerBrandAccountService.lambdaQuery()
+                    .eq(WorkerBrandAccount::getWorkerId, item.getWorkerId())
+                    .eq(WorkerBrandAccount::getWebsitWorkerId, item.getWebsitWorkerId())
+                    .eq(WorkerBrandAccount::getWebsitId, item.getWebsitId())
+                    .eq(WorkerBrandAccount::getBrandWorkerStatus,"ON")
+                    .eq(WorkerBrandAccount::getDel,0)
+                    .eq(WorkerBrandAccount::getGroupCompanyId, brand.getBrandId()).list();
+
+            // 未选择品牌商
+            if (workerWdnos.size()<1){
+                updateWebsitWorkererror(item,"师傅未选择格力品牌商信息");
+                return Boolean.FALSE;
+            }
+
+            //  判断师傅入驻的商户网点
+            count = getCount(workerWdnos, count);
+            if (count.equals(workerWdnos.size())){
+                updateWebsitWorkererror(item,"师傅未入驻品牌商网点");
+                return Boolean.FALSE;
+            }
+
+            // 上传图片 按师傅所在网点上传保险证数据
+            for (WorkerBrandAccount wdno: workerWdnos){
+                // 找出指定网点 三方网点与平台网点
+                if (!(wdno.getBrandWebsitId().equals(owu.getBrandWebsitId()) &&
+                        wdno.getWebsitId().equals(owu.getWebsitId()))){
+                    continue;
+                }
+
+
+                delfilet(fileo);
+                if (StringUtils.isEmpty(wdno.getBrandWebsitId())){
+                    continue;
+                }
+                // 上传保险
+                fileo = uploadInsureBx(item,wdno);
+                // 同步失败
+                if (StringUtils.isEmpty(fileo)){
+                    continue;
+                }
+                // 生成网点保险数据
+                getWorkerCertBxGree(wcgs, item, wdno);
+            }
+            // 保存本地表
+            extractedUploadBxEnd(wcgs);
+            // 文件清除
+            delfile("", "", fileo);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            log.info("同步师傅保险证件失败:【" + item.getWebsitWorkerId() + "】");
+            String msg = "同步师傅保险证件失败:";
+            if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotEmpty(ex.getMessage())){
+                msg = msg + ex.getMessage();
+            }
+            updateWebsitWorkererror(item,msg);
+        }
+
+        return Boolean.TRUE;
+    }
+
+    @Override
     public void procesUploadWorkeBx() {
         List<WebsitWorker> wws = new ArrayList<>();
         List<WorkerBrandAccount> workerWdnos = new ArrayList<>();
@@ -312,7 +419,7 @@ public class UploadWorkeCertificateServiceImpl implements UploadWorkeCertificate
                     continue;
                 }
 
-                // 上传图片 按网点上传
+                // 上传图片 按师傅所在网点上传保险证数据
                 for (WorkerBrandAccount wdno: workerWdnos){
                     delfilet(fid3);
                     if (StringUtils.isEmpty(wdno.getBrandWebsitId())){
@@ -363,6 +470,23 @@ public class UploadWorkeCertificateServiceImpl implements UploadWorkeCertificate
         wcgs.add(awc);
     }
 
+    private void getWorkerCertBxGree(List<WorkerCertGree> wcgs, WebsitWorker item, WorkerBrandAccount wdno) {
+        WorkerCertGree  awc = new WorkerCertGree();
+        awc.setWorkerCertGreeId(IdWorker.getIdStr());
+        awc.setWorkerId(wdno.getWorkerId());
+        awc.setBrandWebsitId(wdno.getBrandWebsitId());
+        awc.setCertName("保险证");
+        awc.setCertNo(item.getSafeNo());
+        awc.setStartTime(item.getInsureStartTime());
+        awc.setExpireTime(item.getGmbxyxq());
+        awc.setReviewTime(item.getGmbxyxq());
+        awc.setCreateTime(new Date());
+        awc.setOutFileUrl(item.getOutInsureCert());
+        awc.setSafeCompany("人保");
+        publicService.setCertFlag("保险证", awc);
+        wcgs.add(awc);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     public void extractedBxEnd(List<WorkerCertGree> wcgs, WebsitWorker item) throws Exception {
         try{
@@ -379,6 +503,19 @@ public class UploadWorkeCertificateServiceImpl implements UploadWorkeCertificate
         }
     }
 
+    public void extractedUploadBxEnd(List<WorkerCertGree> wcgs) throws Exception {
+        try{
+            if (wcgs.size()>0){
+                workerCertGreeService.saveOrUpdateBatch(wcgs);
+                wcgs.clear();
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            // 抛异常目的是把前期的数据操作回滚
+            throw new Exception(ex);
+        }
+    }
+
     @Override
     public void procesInitWorkeBx() throws IOException, ParseException {
         String fileo ="";

+ 374 - 7
src/main/java/com/zfire/jiasm/syncdata/service/impl/UploadWorkerTOGreeServiceImpl.java

@@ -18,10 +18,12 @@ import com.zfire.jiasm.syncdata.response.Geographicallocation;
 import com.zfire.jiasm.syncdata.response.WebsitQXLB;
 import com.zfire.jiasm.syncdata.response.WorkerUploadResponse;
 import com.zfire.jiasm.syncdata.service.PublicService;
+import com.zfire.jiasm.syncdata.service.UploadWorkeCertificateService;
 import com.zfire.jiasm.syncdata.service.UploadWorkerTOGreeService;
 import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -71,13 +73,15 @@ public class UploadWorkerTOGreeServiceImpl implements UploadWorkerTOGreeService
     InsureWorkerRecordService insureWorkerRecordService;
     @Resource
     WorkerCertGreeService workerCertGreeService;
+    @Autowired
+    UploadWorkeCertificateService uploadWorkeCertificateService;
 
 
 
 
 
     @Override
-    public void procesUploadWorker() throws Exception {
+    public void procesUpdateWorker() throws Exception {
         List<OutWorkerUpload> recs = new ArrayList<>();
         Worker worker = new Worker();
         List<WorkerBrandAccount> workerBrandAccount = new ArrayList<>();
@@ -112,7 +116,7 @@ public class UploadWorkerTOGreeServiceImpl implements UploadWorkerTOGreeService
         }
 
         // 获取待同步数据
-        recs = getWorkerUploads();
+        recs = getWorkerUploads(0);
 
         // 测试用
         // recs = getWorkerUploadstest();
@@ -173,7 +177,370 @@ public class UploadWorkerTOGreeServiceImpl implements UploadWorkerTOGreeService
                      * 1:身份证、2:保险,3:高空证(复审时间必填)  这三个条件必备否则无法同步
                      * 制冷证可以没有,如果填了复审时间则必填
                      */
-                    if (checkNecessary(worker, item, workerCertificateInfo)){
+                    if (checkNecessary(item, workerCertificateInfo)){
+                        continue;
+                    }
+
+                    // 获取签约品类
+                    if (getCategory(brand, jySignSplbList, sySignSplbList, worker, item, dot.getWebsitId())){
+                        continue;
+                    }
+
+                    // 生成数据对象 证件
+                    getreq(workerCertificateInfo, req, worker,dot.getWebsitWorkerId());
+
+                    // 师傅所在网点状态
+                    req.setFlag("有效");
+                    if (worker.getStatus().equals("OFF") || dot.getBrandWorkerStatus().equals("OFF")){
+                        req.setFlag("无效");
+                    }
+
+                    //网点未签约品类时该网点师傅信息不同步
+                    GreeResponseHelper response = getwdqylbxx(wdqyapi,dot.getBrandWebsitId());
+                    if (response.getStatus() == 200){
+                        // 获取网点签约的品类信息
+                        websitqypl = JSONObject.parseObject(response.getData().toString(), WebsitQXLB.class);
+                        log.info("总部网点签约的品类信息{}-{}",dot.getBrandWebsitId(),JSONObject.toJSONString(websitqypl));
+                    } else {
+                        // 写入表备注信息
+                        updateWorkerUploadLag(item,"获取网点签约的品类信息失败["+
+                                dot.getBrandWebsitId()+"]-"+
+                                (StringUtils.isEmpty(response.getMsg()) ? "":response.getMsg()));
+                        continue;
+                    }
+
+                    log.info("平台师傅签约的品类信息[{}-{}] 家用:{} 商用:{}",
+                            worker.getWorkerId(),dot.getWebsitId(),
+                            JSONObject.toJSONString(jySignSplbList),JSONObject.toJSONString(sySignSplbList));
+
+                    // 从网点签约的品类信息中过滤师傅的品类信息
+                    String result = extracted(jySignSplbList, sySignSplbList, jyList, syList, websitqypl,dot.getBrandWebsitId());
+                    if (result.length()>0){
+                        // 写入表备注信息
+                        updateWorkerUploadLag(item,result);
+                        continue;
+                    }
+
+                    // 过滤后无品类,不能上传
+                    if (jyList.size()<1 && syList.size()<1){
+                        // 写入表备注信息
+                        updateWorkerUploadLag(item,"师傅签约品类过滤后不能同时为空");
+                        continue;
+                    }
+
+                    // 按网点过滤师傅的类别信息
+                    req.setJySignSplbList(jyList);
+                    req.setSySignSplbList(syList);
+
+                    // 服务人员编号(不填值为新增,填值为修改)
+                    if (StringUtils.isNotEmpty(dot.getBrandWorkerNumber())){
+                        req.setWxgno(dot.getBrandWorkerNumber());
+                        // 重置部分数据 以格力门店数据为准
+                        resetParameter(wdwxgGlMap, req);
+                    }
+
+                    // 所属网点
+                    req.setWdno(dot.getBrandWebsitId());
+
+                    // 日志
+                    log.info("创建或修改师傅信息request:{}",JSONObject.toJSONString(req));
+
+                    // 同步
+                    syncData(dot.getId(), wxgaddapi, item, req,dot.getBrandWebsitId());
+
+                    jyList.clear();
+                    syList.clear();
+                }
+            } catch (Exception ex) {
+                ex.printStackTrace();
+                String msg ="向总部创建师傅同步失败";
+                if (ex.getMessage() != null){
+                    msg = ex.getMessage();
+                }
+                if (ex.getMessage() != null && ex.getMessage().trim().length() > 255) {
+                    msg = ex.getMessage().substring(0, 255);
+                }
+                updateWorkerUploadLag(item,msg);
+            }
+        }
+    }
+
+    @Override
+    public void procesAddCertWorker(){
+        List<OutWorkerUpload> recs = new ArrayList<>();
+        Worker worker = new Worker();
+        List<WorkerBrandAccount> workerBrandAccount = new ArrayList<>();
+        List<SignSplb> jySignSplbList = new ArrayList<>();
+        List<SignSplb> sySignSplbList = new ArrayList<>();
+        List<SignSplb> jyList = new ArrayList<>();
+        List<SignSplb> syList = new ArrayList<>();
+        WebsitQXLB websitqypl = new WebsitQXLB();
+        List<ItfTblWangdianPositionDownload> wdwxgGl = new ArrayList<>();
+        Map<String,List<ItfTblWangdianPositionDownload>> wdwxgGlMap = new HashMap<>();
+        Map<String,List<Worker>> workersMap = new HashMap<>();
+
+        String wxgaddapi = "/outapp/wxg/add";
+        String wdqyapi = "/outapp/wxg/base";
+
+        // 提取品牌信息
+        Brand brand = baseService.getBrand();
+        if (brand == null) {
+            return;
+        }
+
+        wdwxgGl = itfTblWangdianPositionDownloadService.lambdaQuery().list();
+        wdwxgGlMap = wdwxgGl.stream().
+                collect(Collectors.groupingBy(ItfTblWangdianPositionDownload::getWxgno));
+
+        // 只提取已入驻的师傅信息
+        List<Worker> workers = workerService.lambdaQuery()
+                .eq(Worker::getStatus,"ON").list();
+        if (CollectionUtils.isNotEmpty(workers)){
+            workersMap = workers.stream().
+                    collect(Collectors.groupingBy(Worker::getWorkerId));
+        }
+
+        // 获取待入驻的新网点师傅数据
+        recs = getWorkerUploads(1);
+
+        // 测试用
+        // recs = getWorkerUploadstest();
+
+        for (OutWorkerUpload item:recs){
+            try{
+                // 先同步保险数据
+                uploadWorkeCertificateService.uploadWorkeBx(item);
+
+
+
+                WorkUploadInfo req = new WorkUploadInfo();
+                WorkerCertificateInfo workerCertificateInfo = new WorkerCertificateInfo();
+
+                // 获取师傅信息  需要同步的师傅必须在平台系统中存在
+                if (!workersMap.containsKey(item.getWorkerId())){
+                    // 写入表备注信息
+                    updateWorkerUploadLag(item,"师傅尚未在平台中入驻");
+                    continue;
+                }
+                worker = workersMap.get(item.getWorkerId()).get(0);
+
+                // 查看师傅是否已选中品牌商 同步状态为有效状态
+                // 这里存在一个商户网点对应平台多个网点
+                workerBrandAccount = getWorkerBrandAccount(brand, item, worker);
+                if (CollectionUtils.isEmpty(workerBrandAccount)) {
+                    continue;
+                }
+
+                // 格力一个师傅最多三个有效网点超3个网点不能同步
+                if (checkWebsitSum(workerBrandAccount,item)){
+                    continue;
+                }
+
+                // 按网点同步
+
+                for (WorkerBrandAccount dot: workerBrandAccount){
+                    // 找出指定网点 三方网点与平台网点
+                    if (!(dot.getBrandWebsitId().equals(item.getBrandWebsitId()) &&
+                            dot.getWebsitId().equals(item.getWebsitId()))){
+                        continue;
+                    }
+
+                    // 必填参数 省份-城市-区县-乡镇 找一个即可
+                    if (getaddres(item, req, dot)) {
+                        continue;
+                    }
+
+                    // 提取师傅证件信息,未同步时不处理
+                    if (getCertificateInfo(workerCertificateInfo, worker.getWorkerId(),dot)){
+                        continue;
+                    }
+
+                    /**
+                     * 必要条件必须满足,否则不进行数据上传动作 身份证、高空证、保险证
+                     * 师傅信息同步到总部的必要条件:
+                     * 1:身份证、2:保险,3:高空证(复审时间必填)  这三个条件必备否则无法同步
+                     * 制冷证可以没有,如果填了复审时间则必填
+                     */
+                    if (checkNecessary(item, workerCertificateInfo)){
+                        continue;
+                    }
+
+                    // 获取签约品类
+                    if (getCategory(brand, jySignSplbList, sySignSplbList, worker, item, dot.getWebsitId())){
+                        continue;
+                    }
+
+                    // 生成数据对象 证件
+                    getreq(workerCertificateInfo, req, worker,dot.getWebsitWorkerId());
+
+                    // 师傅所在网点状态
+                    req.setFlag("有效");
+                    if (worker.getStatus().equals("OFF") || dot.getBrandWorkerStatus().equals("OFF")){
+                        req.setFlag("无效");
+                    }
+
+                    //网点未签约品类时该网点师傅信息不同步
+                    GreeResponseHelper response = getwdqylbxx(wdqyapi,dot.getBrandWebsitId());
+                    if (response.getStatus() == 200){
+                        // 获取网点签约的品类信息
+                        websitqypl = JSONObject.parseObject(response.getData().toString(), WebsitQXLB.class);
+                        log.info("总部网点签约的品类信息{}-{}",dot.getBrandWebsitId(),JSONObject.toJSONString(websitqypl));
+                    } else {
+                        // 写入表备注信息
+                        updateWorkerUploadLag(item,"获取网点签约的品类信息失败["+
+                                dot.getBrandWebsitId()+"]-"+
+                                (StringUtils.isEmpty(response.getMsg()) ? "":response.getMsg()));
+                        continue;
+                    }
+
+                    log.info("平台师傅签约的品类信息[{}-{}] 家用:{} 商用:{}",
+                            worker.getWorkerId(),dot.getWebsitId(),
+                            JSONObject.toJSONString(jySignSplbList),JSONObject.toJSONString(sySignSplbList));
+
+                    // 从网点签约的品类信息中过滤师傅的品类信息
+                    String result = extracted(jySignSplbList, sySignSplbList, jyList, syList, websitqypl,dot.getBrandWebsitId());
+                    if (result.length()>0){
+                        // 写入表备注信息
+                        updateWorkerUploadLag(item,result);
+                        continue;
+                    }
+
+                    // 过滤后无品类,不能上传
+                    if (jyList.size()<1 && syList.size()<1){
+                        // 写入表备注信息
+                        updateWorkerUploadLag(item,"师傅签约品类过滤后不能同时为空");
+                        continue;
+                    }
+
+                    // 按网点过滤师傅的类别信息
+                    req.setJySignSplbList(jyList);
+                    req.setSySignSplbList(syList);
+
+                    // 服务人员编号(不填值为新增,填值为修改)
+                    if (StringUtils.isNotEmpty(dot.getBrandWorkerNumber())){
+                        req.setWxgno(dot.getBrandWorkerNumber());
+                        // 重置部分数据 以格力门店数据为准
+                        resetParameter(wdwxgGlMap, req);
+                    }
+
+                    // 所属网点
+                    req.setWdno(dot.getBrandWebsitId());
+
+                    // 日志
+                    log.info("创建或修改师傅信息request:{}",JSONObject.toJSONString(req));
+
+                    // 同步
+                    syncData(dot.getId(), wxgaddapi, item, req,dot.getBrandWebsitId());
+
+                    jyList.clear();
+                    syList.clear();
+                }
+            } catch (Exception ex) {
+                ex.printStackTrace();
+                String msg ="向总部创建师傅同步失败";
+                if (ex.getMessage() != null){
+                    msg = ex.getMessage();
+                }
+                if (ex.getMessage() != null && ex.getMessage().trim().length() > 255) {
+                    msg = ex.getMessage().substring(0, 255);
+                }
+                updateWorkerUploadLag(item,msg);
+            }
+        }
+    }
+
+    @Override
+    public void procesAddWorker() throws Exception {
+        List<OutWorkerUpload> recs = new ArrayList<>();
+        Worker worker = new Worker();
+        List<WorkerBrandAccount> workerBrandAccount = new ArrayList<>();
+        List<SignSplb> jySignSplbList = new ArrayList<>();
+        List<SignSplb> sySignSplbList = new ArrayList<>();
+        List<SignSplb> jyList = new ArrayList<>();
+        List<SignSplb> syList = new ArrayList<>();
+        WebsitQXLB websitqypl = new WebsitQXLB();
+        List<ItfTblWangdianPositionDownload> wdwxgGl = new ArrayList<>();
+        Map<String,List<ItfTblWangdianPositionDownload>> wdwxgGlMap = new HashMap<>();
+        Map<String,List<Worker>> workersMap = new HashMap<>();
+
+        String wxgaddapi = "/outapp/wxg/add";
+        String wdqyapi = "/outapp/wxg/base";
+
+        // 提取品牌信息
+        Brand brand = baseService.getBrand();
+        if (brand == null) {
+            return;
+        }
+
+        wdwxgGl = itfTblWangdianPositionDownloadService.lambdaQuery().list();
+        wdwxgGlMap = wdwxgGl.stream().
+                collect(Collectors.groupingBy(ItfTblWangdianPositionDownload::getWxgno));
+
+        // 只提取已入驻的师傅信息
+        List<Worker> workers = workerService.lambdaQuery()
+                .eq(Worker::getStatus,"ON").list();
+        if (CollectionUtils.isNotEmpty(workers)){
+            workersMap = workers.stream().
+                    collect(Collectors.groupingBy(Worker::getWorkerId));
+        }
+
+        // 获取待入验的新网点师傅数据
+        recs = getWorkerUploads(1);
+
+        // 测试用
+        // recs = getWorkerUploadstest();
+
+        for (OutWorkerUpload item:recs){
+            try{
+                WorkUploadInfo req = new WorkUploadInfo();
+                WorkerCertificateInfo workerCertificateInfo = new WorkerCertificateInfo();
+
+                // 获取师傅信息  需要同步的师傅必须在平台系统中存在
+                if (!workersMap.containsKey(item.getWorkerId())){
+                    // 写入表备注信息
+                    updateWorkerUploadLag(item,"师傅尚未在平台中入驻");
+                    continue;
+                }
+                worker = workersMap.get(item.getWorkerId()).get(0);
+
+                // 查看师傅是否已选中品牌商 同步状态为有效状态
+                // 这里存在一个商户网点对应平台多个网点
+                workerBrandAccount = getWorkerBrandAccount(brand, item, worker);
+                if (CollectionUtils.isEmpty(workerBrandAccount)) {
+                    continue;
+                }
+
+                // 格力一个师傅最多三个有效网点超3个网点不能同步
+                if (checkWebsitSum(workerBrandAccount,item)){
+                    continue;
+                }
+
+                // 按网点同步
+
+                for (WorkerBrandAccount dot: workerBrandAccount){
+                    // 找出指定网点 三方网点与平台网点
+                    if (!(dot.getBrandWebsitId().equals(item.getBrandWebsitId()) &&
+                            dot.getWebsitId().equals(item.getWebsitId()))){
+                        continue;
+                    }
+
+                    // 必填参数 省份-城市-区县-乡镇 找一个即可
+                    if (getaddres(item, req, dot)) {
+                        continue;
+                    }
+
+                    // 提取师傅证件信息,未同步时不处理
+                    if (getCertificateInfo(workerCertificateInfo, worker.getWorkerId(),dot)){
+                        continue;
+                    }
+
+                    /**
+                     * 必要条件必须满足,否则不进行数据上传动作 身份证、高空证、保险证
+                     * 师傅信息同步到总部的必要条件:
+                     * 1:身份证、2:保险,3:高空证(复审时间必填)  这三个条件必备否则无法同步
+                     * 制冷证可以没有,如果填了复审时间则必填
+                     */
+                    if (checkNecessary(item, workerCertificateInfo)){
                         continue;
                     }
 
@@ -539,7 +906,7 @@ public class UploadWorkerTOGreeServiceImpl implements UploadWorkerTOGreeService
         return result;
     }
 
-    private Boolean checkNecessary(Worker worker, OutWorkerUpload item, WorkerCertificateInfo workerCertificateInfo) {
+    private Boolean checkNecessary(OutWorkerUpload item, WorkerCertificateInfo workerCertificateInfo) {
         if (StringUtils.isEmpty(workerCertificateInfo.getSfzbh())){
             updateWorkerUploadLag(item,"师傅缺失身份证信息,不上传");
             return Boolean.TRUE;
@@ -1504,7 +1871,6 @@ public class UploadWorkerTOGreeServiceImpl implements UploadWorkerTOGreeService
         return workerBrandAccount;
     }
 
-
     private Boolean checkWebsitSum(List<WorkerBrandAccount> workerBrandAccount, OutWorkerUpload item){
         // 格力一个师傅最多三个有效网点超3个网点不能同步
         Integer sum = 0;
@@ -1534,13 +1900,14 @@ public class UploadWorkerTOGreeServiceImpl implements UploadWorkerTOGreeService
         return worker;
     }
 
-    private List<OutWorkerUpload> getWorkerUploads() {
+    private List<OutWorkerUpload> getWorkerUploads(Integer syncType) {
         // 同步标志-synStatus(0:待同步;1:已同步;99:同步失败)
         List<OutWorkerUpload> recs;
         LambdaQueryWrapper<OutWorkerUpload> queryWrapper = new LambdaQueryWrapper<OutWorkerUpload>()
                 .eq(OutWorkerUpload::getSyncStatus,0)
+                .eq(OutWorkerUpload::getSyncType,syncType)
                 .or(wrapper->wrapper.eq(OutWorkerUpload::getSyncStatus,99)
-                        .le(OutWorkerUpload::getSyncTimes,10));
+                        .le(OutWorkerUpload::getSyncTimes,100));
         recs = outWorkerUploadService.list(queryWrapper);
         return recs;
     }

+ 1 - 1
src/main/java/com/zfire/jiasm/syncdata/service/impl/WorkerUploadServiceImpl.java

@@ -71,7 +71,7 @@ public class WorkerUploadServiceImpl implements WorkerUploadService {
 
         log.info("开始同步师傅信息到格力总部: \uF0B7{}",sdf.format(new Date()));
 
-        uploadWorkerTOGreeService.procesUploadWorker();
+        uploadWorkerTOGreeService.procesUpdateWorker();
 
         log.info("同步师傅信息到格力总部完成: \uF0B7{}",sdf.format(new Date()));
         return;

+ 7 - 0
src/main/java/com/zfire/jiasm/syncdata/upload/worker/UploadWorkBx.java

@@ -30,6 +30,13 @@ public class UploadWorkBx {
 
 
     // 师傅证件照同步到格力总部 这里只上传保险,只上传一次
+
+    /**
+     * 按师傅所在格力总部网点更新保险证件数据
+     * 1:上传到格力总部网点
+     * 2:本地保留一份
+     *
+     */
     @Scheduled(fixedDelayString = "${workercertbx}")
     public void processUploadTask() throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

+ 7 - 0
src/main/java/com/zfire/jiasm/syncdata/upload/worker/UploadWorkeCertificate.java

@@ -29,6 +29,12 @@ public class UploadWorkeCertificate {
 
 
     // 师傅证件照同步到格力总部
+
+    /**
+     * 按师傅所在格力总部网点同步除保险外的所有证件
+     * 1:上传到格力总部网点
+     * 2:本地保留一份
+     */
     @Scheduled(fixedDelayString = "${workercertificate}")
     public void processUploadTask(){
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -43,4 +49,5 @@ public class UploadWorkeCertificate {
         log.info("同步师傅证件信息结束: \uF0B7{}",sdf.format(new Date()));
     }
 
+
 }

+ 43 - 6
src/main/java/com/zfire/jiasm/syncdata/upload/worker/UploadWorkerTOGree.java

@@ -35,24 +35,61 @@ public class UploadWorkerTOGree {
 
 
 
-    /** 同步师傅信息到格力总部
+    /** 同步更新师傅信息到格力总部 - 更新证件
      * 无论新增或是修改-所有证件都必须重新上传一次
      * 师傅所在网点都要上传一次
-     * @throws Exception
      */
     @Scheduled(fixedDelayString = "${workercerupload}")
-    public void uploadWorkProcess() throws Exception {
+    public void workUpdateProcess() throws Exception {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         if (workerceruploadc.equals(TaskConfigEnum.FALSE.getCode())){
             return;
         }
 
-        log.info("开始同步师傅信息到格力总部: \uF0B7{}",sdf.format(new Date()));
+        log.info("开始更新师傅证件信息到格力总部: \uF0B7{}",sdf.format(new Date()));
 
-        uploadWorkerTOGreeService.procesUploadWorker();
+        uploadWorkerTOGreeService.procesUpdateWorker();
 
-        log.info("同步师傅信息到格力总部完成: \uF0B7{}",sdf.format(new Date()));
+        log.info("更新师傅证件信息到格力总部完成: \uF0B7{}",sdf.format(new Date()));
         return;
     }
 
+    //师傅入驻格力新网点前先同步证件数据
+    @Scheduled(fixedDelayString = "${workercerupload}")
+    public void workAddCertProcess() throws Exception {
+        if (1==1){
+            return;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if (workerceruploadc.equals(TaskConfigEnum.FALSE.getCode())){
+            return;
+        }
+
+        log.info("开始新增师傅入驻新网点证件信息到格力总部: \uF0B7{}",sdf.format(new Date()));
+
+        uploadWorkerTOGreeService.procesAddCertWorker();
+
+        log.info("同步新增师傅入驻新网点证件信息到格力总部完成: \uF0B7{}",sdf.format(new Date()));
+        return;
+    }
+
+
+    //师傅入驻格力新网点
+    @Scheduled(fixedDelayString = "${workercerupload}")
+    public void workAddProcess() throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if (workerceruploadc.equals(TaskConfigEnum.FALSE.getCode())){
+            return;
+        }
+
+        log.info("开始新增师傅入驻新网点信息到格力总部: \uF0B7{}",sdf.format(new Date()));
+
+        uploadWorkerTOGreeService.procesAddWorker();
+
+        log.info("同步新增师傅入驻新网点信息到格力总部完成: \uF0B7{}",sdf.format(new Date()));
+        return;
+    }
+
+
+
 }

+ 1 - 1
src/main/resources/bootstrap-prdt.properties

@@ -378,7 +378,7 @@ wxgwztc=FALSE
 zjzbxc=FALSE
 cjfilec=FALSE
 sfzjxxc=FALSE
-zjzoc=TRUE
+zjzoc=FALSE
 #京东商城 预约改约、指派改派网点、作废取消、报完工、指派改派人员
 jdyygyc=FALSE
 jdzpgpwdc=FALSE