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