From 0cd9447ee893a8490488aca6a6a073b040fcd7f6 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 10 七月 2024 16:53:18 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java |  374 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 374 insertions(+), 0 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java
new file mode 100644
index 0000000..b89d3dc
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java
@@ -0,0 +1,374 @@
+package com.doumee.biz.zbom.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.doumee.biz.zbom.ZbomIAMService;
+import com.doumee.biz.zbom.model.*;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.*;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * 浜哄憳淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class ZbomIAMServiceImpl implements ZbomIAMService {
+
+    @Autowired
+    private UsersMapper usersMapper;
+    @Autowired
+    private ShopMapper shopMapper;
+    @Autowired
+    private CategorySegMapper categorySegMapper;
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+    @Autowired
+    private IamInterfaceLogMapper iamInterfaceLogMapper;
+    @Autowired
+    private SegmentsMapper segmentsMapper;
+
+    /**
+     * 鍒濆鍖栧悓姝ョ敤鎴�
+     * @param params
+     */
+    @Override
+    public void startUserInit(String params) {
+    }
+    /**
+     * 鍒濆鍖栧悓姝ョ敤鎴�
+     * @param params
+     */
+    @Override
+    public void startOrgInit(String params) {
+    }
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void updateShopInfo(String token, String uuid, String timestamp, List<IamUpateShopModel> shopList) {
+        if(shopList == null ||shopList.size() == 0){
+            return;
+        }
+        isValidToken(uuid,timestamp,token);
+        List<Shop> addShops = new ArrayList<>();
+        List<Shop> updateShops = new ArrayList<>();
+        List<String> segDelOrgIds = new ArrayList<>();
+        List<CategorySeg> categorySegList = new ArrayList<>();
+        List<Segments> segmentsList = new ArrayList<>();
+        Date date  = new Date();
+        for(IamUpateShopModel model : shopList){
+            Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda()
+                    .eq(Shop::getOrgId,model.getIdtOrgId())
+                    .last("limit 1"));
+            if(shop == null){
+                addShops.add(initShopInfo(shop,model,date));
+            }else {
+                segDelOrgIds.add(shop.getOrgId());
+                updateShops.add(shop);
+            }
+            //澶勭悊鍝佺被鏁版嵁閫昏緫
+            dealCategorySegData(date,shop,model.getCategory(),categorySegList,segmentsList);
+        }
+
+        if(addShops.size()>0){
+            shopMapper.insert(addShops);
+        }
+        if(updateShops.size()>0){
+            for (Shop shop :updateShops){
+                shopMapper.updateById(shop);
+            }
+        }
+        if(segDelOrgIds.size()>0){
+            categorySegMapper.delete(new UpdateWrapper<CategorySeg>().lambda() .in(CategorySeg::getOrgId,segDelOrgIds));
+        }
+        if(categorySegList.size()>0){
+            categorySegMapper.insert(categorySegList);
+        }
+        if(segmentsList.size()>0){
+            segmentsMapper.insert(segmentsList);
+        }
+    }
+    private void dealSegmentData(Date date, IamCategoryModel model, Shop shop, List<Segments> segmentsList) {
+        if(StringUtils.isNotBlank(model.getSegment1())){
+            //濡傛灉鎴樺尯涓嶄负绌�
+            if(newSegment(model.getSegment1(),Constants.ZERO,segmentsList)
+                    && segmentsMapper.selectCount(new QueryWrapper<Segments>().lambda()
+                    .eq(Segments::getSegmentId,model.getSegment1())
+                    .eq(Segments::getUnitCode,model.getUnitCode())
+                    .eq(Segments::getType,Constants.ZERO)) ==0){
+                segmentsList.add(initSegmentData(model,date,Constants.ZERO));
+            }
+        }
+        if(StringUtils.isNotBlank(model.getSegment2())){
+            //濡傛灉鐪佸尯涓嶄负绌�
+            if(newSegment(model.getSegment2(),Constants.ONE,segmentsList) && segmentsMapper.selectCount(new QueryWrapper<Segments>().lambda()
+                    .eq(Segments::getSegmentId,model.getSegment2())
+                    .eq(Segments::getParentId,model.getSegment1())
+                    .eq(Segments::getUnitCode,model.getUnitCode())
+                    .eq(Segments::getType,Constants.ONE)) ==0){
+                segmentsList.add(initSegmentData(model,date,Constants.ONE));
+            }
+        }
+        if(StringUtils.isNotBlank(model.getSegment3())){
+            //濡傛灉鐗囧尯涓嶄负绌�
+            if(newSegment(model.getSegment3(),Constants.TWO,segmentsList) && segmentsMapper.selectCount(new QueryWrapper<Segments>().lambda()
+                    .eq(Segments::getSegmentId,model.getSegment3())
+                    .eq(Segments::getUnitCode,model.getUnitCode())
+                    .eq(Segments::getParentId,model.getSegment2())
+                    .eq(Segments::getType,Constants.TWO)) ==0){
+                segmentsList.add(initSegmentData(model,date,Constants.TWO));
+            }
+        }
+    }
+
+    private boolean newSegment(String segId2, int one, List<Segments> segmentsList) {
+        for(Segments s : segmentsList){
+            if(StringUtils.equals(s.getSegmentId(),segId2) && Constants.equalsInteger(one,s.getType())){
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private Segments initSegmentData(IamCategoryModel model, Date date,  int type) {
+        Segments data = new Segments();
+        data.setCreateDate(date);
+        data.setEditDate(date);
+        data.setIsdeleted(Constants.ZERO);
+        data.setStatus(Constants.ZERO);
+        data.setUnitCode(model.getUnitCode());
+        data.setType(type);
+        if(type ==Constants.ZERO){
+            data.setName(model.getMeaning1());
+            data.setSegmentId(model.getSegment1());
+            data.setParentId(null);
+            data.setRemark(model.getMeaning1());
+        }else if(type ==Constants.ONE){
+            data.setName(model.getMeaning2());
+            data.setSegmentId(model.getSegment2());
+            data.setParentId(model.getSegment1());
+            data.setRemark(model.getMeaning1()+"/"+model.getMeaning2());
+        }else{
+            data.setName(model.getMeaning3());
+            data.setSegmentId(model.getSegment3());
+            data.setParentId(model.getSegment2());
+            data.setRemark(model.getMeaning1()+"/"+model.getMeaning2()+"/"+model.getMeaning3());
+        }
+        return data;
+    }
+    private void dealCategorySegData(Date date, Shop shop, List<IamCategoryModel> categoryModels, List<CategorySeg> categorySegList, List<Segments> segmentsList) {
+       if(categoryModels==null || categoryModels.size() ==0){
+           return;
+       }
+       for(IamCategoryModel model :categoryModels){
+           dealSegmentData(date,model,shop,segmentsList);
+           categorySegList.add(initInsertCategorySeg(date,model,shop));
+       }
+    }
+    private CategorySeg initInsertCategorySeg(Date date, IamCategoryModel model, Shop shop) {
+        CategorySeg data = new CategorySeg();
+        data.setCreateDate(date);
+        data.setEditDate(date);
+        data.setIsdeleted(Constants.ZERO);
+        data.setOrgId(shop.getOrgId());
+        data.setSegId(model.getSegment1());
+        data.setSegId2(model.getSegment2());
+        data.setSegId3(model.getSegment3());
+        data.setSegName(model.getMeaning1());
+        data.setSegName2(model.getMeaning2());
+        data.setSegName3(model.getMeaning3());
+        data.setShipToAddress(model.getShipToAddress());
+        data.setShipToPhone(model.getShipToPhone());
+        data.setShipToPerson(model.getShipToPerson());
+        data.setBrandId(model.getAccountSiteId());
+        data.setUnitCode(model.getUnitCode());
+        data.setSiteCode(model.getSiteCode());
+        data.setScode(model.getRelevanceCode());
+        if(shop.getSiteCode() ==null){
+            shop.setSiteCode("");
+        }
+        shop.setSiteCode(shop.getSiteCode()+model.getSiteCode()+";");
+        return data;
+    }
+
+    private Shop initShopInfo(Shop shop, IamUpateShopModel model, Date date) {
+        if(shop == null) {
+            shop = new Shop();
+            shop.setCreateDate(date);
+        }
+        shop.setEditDate(date);
+        shop.setOrgId(model.getIdtOrgId());
+        shop.setName(model.getIdtOrgName());
+        shop.setCode(model.getIdtOrgCode());
+        shop.setType(model.getIdtOrgFirstLevelType());
+        shop.setSecondType(model.getIdtOrgSecondLevelType());
+        shop.setAttribute(model.getIdtOrgAttribute());
+        if(model.getScode()!=null){
+            shop.setCountry(model.getScode().getCountry());
+            shop.setProvinceName(model.getScode().getProvinceName());
+            shop.setProvinceCode(model.getScode().getProvinceNum());
+            shop.setCityName(model.getScode().getCityName());
+            shop.setCityCode(model.getScode().getCityNum());
+            shop.setAreaName(model.getScode().getCountyName());
+            shop.setAreaCode(model.getScode().getCountyNum());
+            shop.setTown(model.getScode().getTown());
+            shop.setGlCode(model.getScode().getRelevanceCodeGL());
+            shop.setGlName(model.getScode().getRelevanceNameGL());
+            shop.setZcode(model.getScode().getRelevanceZCode());
+        }
+        if(model.getFcode()!=null){
+            shop.setScode(model.getFcode().getRelevanceCode());
+            shop.setCountry(model.getFcode().getCountry());
+            shop.setProvinceName(model.getFcode().getProvinceName());
+            shop.setProvinceCode(model.getFcode().getProvinceNum());
+            shop.setCityName(model.getFcode().getCityName());
+            shop.setCityCode(model.getFcode().getCityNum());
+            shop.setAreaName(model.getFcode().getCountyName());
+            shop.setAreaCode(model.getFcode().getCountyNum());
+            shop.setTown(model.getFcode().getTown());
+            shop.setRegAddr(model.getFcode().getRegistrationAddress());
+            shop.setLegalPhone(model.getFcode().getContactPhone());
+            shop.setLegalName(model.getFcode().getLegalPerson());
+            shop.setLegalIdcode(model.getFcode().getLegalIdentification());
+        }
+        if(model.getShop()!=null){
+            shop.setUnitCode(model.getShop().getUnitCode());
+            shop.setScode(model.getShop().getRelevanceCode());
+            shop.setFcode(model.getShop().getAccountNumber());
+        }
+        if(StringUtils.equals( model.getIdtOrgStatus(),"-1")){
+            shop.setIsdeleted(Constants.ONE);
+        }else{
+            shop.setIsdeleted(Constants.ZERO);
+        }
+        shop.setParentIamId(model.getIdtOrgParentId());
+        return  shop;
+    }
+
+    private void isValidToken(String uuid, String timestamp, String token) {
+        if (!StringUtils.equalsIgnoreCase( getToken( uuid, timestamp), token)) {
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝token閿欒~");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void updateUserInfo(String token, String uuid, String timestamp, IamUpateUserModel upateUserModel){
+        if(upateUserModel == null ||upateUserModel.getIdtUserId() == null){
+            return;
+        }
+        isValidToken(uuid,timestamp,token);
+
+        Users users = usersMapper.selectOne(new QueryWrapper<Users>().lambda()
+                .eq(Users::getIamId,upateUserModel.getIdtUserId())
+                .last("limit 1"));
+        if(users == null){
+            users = initUserModel(users,upateUserModel);
+            usersMapper.insert(users);
+        }else {
+            users = initUserModel(users,upateUserModel);
+            usersMapper.updateById(users);
+        }
+    }
+
+    private Users initUserModel(Users users, IamUpateUserModel upateUserModel) {
+        if(users == null){
+            users = new Users();
+            users.setCreateDate(new Date());
+        }
+        users.setEditDate(new Date());
+        users.setSex(upateUserModel.getIdtUserGender());
+        users.setIamUsername(upateUserModel.getAppAccountNo());
+        users.setName(upateUserModel.getIdtUserName());
+        users.setPassword(upateUserModel.getAppAccountPwd());
+        users.setPhone(upateUserModel.getIdtUserMobile());
+        users.setIamId(upateUserModel.getIdtUserId());
+        users.setStatus(upateUserModel.getAppAccountStatus());
+        users.setIsdeleted(Constants.ZERO);
+        users.setRemark(JSONObject.toJSONString(upateUserModel));
+        if( upateUserModel.getUserTypes() !=null){
+            for(IamUserTypeModel type : upateUserModel.getUserTypes()){
+                if(StringUtils.isNotBlank(users.getUserTypes())){
+                    users.setUserTypes("");
+                }
+                users.setUserTypes("["+users.getUserTypes()+type.getIdtUserTypeCode()+"];");
+            }
+        }
+        if( upateUserModel.getRoles() !=null){
+            for(IamUserRoleModel t : upateUserModel.getRoles()){
+                if(StringUtils.isNotBlank(users.getRoleIds())){
+                    users.setRoleIds("");
+                }
+                if(StringUtils.isNotBlank(users.getRoleNames())){
+                    users.setRoleNames("");
+                }
+                users.setRoleIds("["+users.getRoleIds()+t.getId()+"];");
+                users.setRoleNames("["+users.getRoleNames()+t.getName()+"];");
+            }
+        }
+        if(upateUserModel.getJobs()!=null){
+            String orgId = null;
+            for(IamUserJobModel job : upateUserModel.getJobs()){
+                if(StringUtils.equals(job.getFirstLevelType(),Constants.TWO+"")){
+                    orgId = job.getOrgId();
+                    break;
+                }
+            }
+            users.setIamOrgId(orgId);
+            if(orgId !=null){
+                Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda()
+                        .eq(Shop::getOrgId,orgId)
+                        .last("limit 1"));
+                users.setDepartmentId(shop.getId());
+            }
+
+        }
+
+        return  users;
+
+    }
+
+    public  String getToken(String uuid,String time) {
+        String appid = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.IAM_APPID);
+        String appKey =  (String)redisTemplate.opsForValue().get(Constants.RedisKeys.IAM_APPKEY) ;
+        String token = JWT.create().withIssuer(appid).withIssuedAt(DateUtil.getDateFromString(time)).withJWTId(uuid).sign(Algorithm.HMAC256(appKey));
+        token = String.join(" ", "Bearer", token);
+        return  token;
+    }
+    @Override
+    @Async
+    public  void  saveInterfaceLog(String url,String name, String token, String uuid, String timestamp, Object obj,Integer success,String respone){
+            Map<String,Object> map = new HashMap<>();
+            map.put("token",token);
+            map.put("uuid",uuid);
+            map.put("timestamp",timestamp);
+            map.put("data", obj);
+            IamInterfaceLog log = new IamInterfaceLog();
+            log.setCreateDate(new Date());
+            log.setUrl(url);
+            log.setEditDate(log.getCreateDate());
+            log.setPlat(Constants.ZERO);
+            log.setName(name);
+            log.setIsdeleted(Constants.ZERO);
+            log.setRequest(JSONObject.toJSONString(map));
+            log.setType(Constants.ONE);
+            log.setSuccess(success);
+            log.setRepose(respone);
+            iamInterfaceLogMapper.insert(log);
+    }
+}

--
Gitblit v1.9.3