|
@@ -0,0 +1,214 @@
|
|
|
+package com.dgtly.sync.service;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.dgtly.common.exception.BusinessException;
|
|
|
+import com.dgtly.common.utils.ShiroSaltUtil;
|
|
|
+import com.dgtly.common.utils.http.HttpUtils;
|
|
|
+import com.dgtly.common.utils.security.EncryptPassWordClass;
|
|
|
+import com.dgtly.sync.domain.SyncFailDetail;
|
|
|
+import com.dgtly.sync.domain.SyncLog;
|
|
|
+import com.dgtly.sync.mapper.SyncFailDetailMapper;
|
|
|
+import com.dgtly.sync.utils.CustomerAccessTokenUtil;
|
|
|
+import com.dgtly.sync.utils.CustomerAccessTokenUtil.UrlType;
|
|
|
+import com.dgtly.system.domain.SysUser;
|
|
|
+import com.dgtly.system.domain.SysUserExt;
|
|
|
+import com.dgtly.system.mapper.SysUserExtMapper;
|
|
|
+import com.dgtly.system.mapper.SysUserMapper;
|
|
|
+import com.dgtly.system.service.ISysConfigService;
|
|
|
+import com.dgtly.system.service.impl.SysUserServiceImpl;
|
|
|
+import com.dgtly.wxportal.domain.WxQyUser;
|
|
|
+import com.dgtly.wxportal.mapper.WxQyUserMapper;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class AnalysisDiyCustomerComponent {
|
|
|
+
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(AnalysisDiyCustomerComponent.class);
|
|
|
+
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CustomerAccessTokenUtil customerAccessTokenUtil;
|
|
|
+ @Autowired
|
|
|
+ private SysUserServiceImpl sysUserService;
|
|
|
+ @Autowired
|
|
|
+ private SysUserExtMapper sysUserExtMapper;
|
|
|
+ @Autowired
|
|
|
+ private SysUserMapper sysUserMapper;
|
|
|
+ @Autowired
|
|
|
+ private WxQyUserMapper wxQyUserMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISysConfigService configService;
|
|
|
+ @Autowired
|
|
|
+ private ISyncLogService syncLogService;
|
|
|
+ @Autowired
|
|
|
+ private SyncFailDetailMapper syncFailDetailMapper;
|
|
|
+ private Long deptId;
|
|
|
+ private Long[] roleIds;
|
|
|
+ /**
|
|
|
+ * 获取并解析DIY经销商用户
|
|
|
+ * 因为经销商用户并不涉及用信息更新等方面 所以只插入不更新
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ //@Override
|
|
|
+ public SyncLog analyDiyCustomer() {
|
|
|
+ if(deptId==null){
|
|
|
+ deptId = Long.parseLong(configService.selectConfigByKey("libang.customer.deptid"));
|
|
|
+ }
|
|
|
+ if(roleIds==null){
|
|
|
+ Long roleId = Long.parseLong(configService.selectConfigByKey("libang.customer.roleid"));
|
|
|
+ roleIds = new Long[]{roleId};
|
|
|
+ }
|
|
|
+
|
|
|
+ List<SyncFailDetail> failDetails = new ArrayList<>();
|
|
|
+ SyncLog syncLog = new SyncLog();
|
|
|
+ syncLog.setStartTime(new Date());
|
|
|
+ String packageId = "diycustomer"+syncLog.getStartTime().getTime();
|
|
|
+ syncLog.setPackageId(packageId);
|
|
|
+ long total = 0;
|
|
|
+ long success = 0;
|
|
|
+ Set<String> loginNameSet = sysUserService.selectAllUserLoginName();
|
|
|
+ String managerJson = HttpUtils.sendGet(customerAccessTokenUtil.getUrl(UrlType.MANAGER));
|
|
|
+ JSONObject mjson = JSONObject.parseObject(managerJson);
|
|
|
+
|
|
|
+ int code = mjson.getInteger("code");
|
|
|
+ if(code==0){
|
|
|
+ success+=buildSysUser(mjson,loginNameSet,1,failDetails,packageId);
|
|
|
+ total+=mjson.getJSONArray("userlist").size();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ String guideJson = HttpUtils.sendGet(customerAccessTokenUtil.getUrl(UrlType.STOREGUIDE));
|
|
|
+ JSONObject gjson = JSONObject.parseObject(guideJson);
|
|
|
+ code = gjson.getInteger("code");
|
|
|
+ if(code==0){
|
|
|
+ success+=buildSysUser(gjson,loginNameSet,0,failDetails,packageId);
|
|
|
+ total+=gjson.getJSONArray("userlist").size();
|
|
|
+ }
|
|
|
+
|
|
|
+ try{
|
|
|
+ syncLog.setTotalCount(total);
|
|
|
+ syncLog.setSuccessCount(success);
|
|
|
+ syncLog.setFaileCount((long)failDetails.size());
|
|
|
+ syncLog.setEndTime(new Date());
|
|
|
+ syncLog.setSyncType("diycustomer");
|
|
|
+
|
|
|
+ if(failDetails.size()>0){
|
|
|
+ syncFailDetailMapper.batchInsertSyncFailDetail(failDetails);
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("解析用户插入解析日志出错",e);
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new BusinessException("解析用户插入解析日志出错",e);
|
|
|
+ }finally {
|
|
|
+ syncLogService.insertSyncLog(syncLog);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建 插入用户List
|
|
|
+ * @param json
|
|
|
+ * @param loginNameSet 排重用
|
|
|
+ * @param isManager
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Integer buildSysUser(JSONObject json, Set<String> loginNameSet, int isManager, List<SyncFailDetail> failDetails,String packageId){
|
|
|
+ JSONArray jsonArray = json.getJSONArray("userlist");
|
|
|
+ int count = 0;
|
|
|
+
|
|
|
+ for(int i =0;i<jsonArray.size();i++){
|
|
|
+ JSONObject jo = jsonArray.getJSONObject(i);
|
|
|
+
|
|
|
+ try {
|
|
|
+ String userNo = jo.getString("userNo");
|
|
|
+ if(userNo==null||userNo.trim().equals("")){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!loginNameSet.contains(userNo)) {
|
|
|
+
|
|
|
+ /** =============用户基本信息构建 start===============*/
|
|
|
+ SysUser user = new SysUser();
|
|
|
+ user.setCompanyId(1L);
|
|
|
+ user.setDeptId(deptId);
|
|
|
+ user.setLoginName(userNo);
|
|
|
+ user.setUserName(jo.getString("name"));
|
|
|
+ user.setPhonenumber(jo.getString("mobile"));
|
|
|
+ user.setRoleIds(roleIds);
|
|
|
+ user.setPassword(user.getLoginName());
|
|
|
+ user.setSalt(ShiroSaltUtil.randomSalt());
|
|
|
+ user.setPassword(EncryptPassWordClass.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
|
|
|
+
|
|
|
+
|
|
|
+ /** =============用户基本信息构建 end===============*/
|
|
|
+
|
|
|
+
|
|
|
+ /**======== 构建diy用户扩展信息表 start===============*/
|
|
|
+ SysUserExt userExt = new SysUserExt();
|
|
|
+ userExt.setSalesLevel("customer_level");
|
|
|
+ userExt.setCustomerCode(jo.getString("depCode"));
|
|
|
+ userExt.setIsCustomerManager(isManager + "");
|
|
|
+ userExt.setSapEmployeeId(userNo);
|
|
|
+ userExt.setOrgCode(jo.getString("depCode"));
|
|
|
+
|
|
|
+ /**======== 构建diy用户wx信息表 start===============*/
|
|
|
+ WxQyUser wxQyUser = new WxQyUser();
|
|
|
+ wxQyUser.setUserid(jo.getString("userid"));
|
|
|
+ wxQyUser.setMobile(jo.getString("mobile"));
|
|
|
+ user.setSysUserExt(userExt);
|
|
|
+ insertUserAndExtAndWx(user, wxQyUser);
|
|
|
+ count++;
|
|
|
+ loginNameSet.add(userNo);
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ SyncFailDetail syncFailDetail = new SyncFailDetail();
|
|
|
+ syncFailDetail.setPackageId(packageId);
|
|
|
+ syncFailDetail.setFailReason(e.getMessage());
|
|
|
+ syncFailDetail.setDataJson(jo.toJSONString());
|
|
|
+ syncFailDetail.setFailLevel("1");
|
|
|
+ syncFailDetail.setExceptionType(e.getClass().getSimpleName());
|
|
|
+ failDetails.add(syncFailDetail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Integer insertUserAndExtAndWx(SysUser user, WxQyUser wxQyUser) {
|
|
|
+ // 新增用户信息
|
|
|
+ int rows = sysUserMapper.insertUser(user);
|
|
|
+
|
|
|
+ // 新增用户与角色管理
|
|
|
+ sysUserService.insertUserRole(user);
|
|
|
+ SysUserExt userExt = user.getSysUserExt();
|
|
|
+ userExt.setUserId(user.getUserId());
|
|
|
+
|
|
|
+ int i1 = sysUserExtMapper.insertOrUpSysUserExt(userExt);
|
|
|
+
|
|
|
+
|
|
|
+ wxQyUser.setSysUserId(user.getUserId());
|
|
|
+ int i2 =wxQyUserMapper.insertWxQyUser(wxQyUser);
|
|
|
+ if(i1+i2<2){
|
|
|
+ throw new RuntimeException("插入UserExt或WxUser错误");
|
|
|
+ }
|
|
|
+ return rows;
|
|
|
+ }
|
|
|
+}
|