Commit c5233d1a authored by libin's avatar libin

Merge branch 'saff_update_feature' into dev

parents 08b27cb2 7bac4337
...@@ -3,6 +3,8 @@ package com.github.wxiaoqi.security.admin.dto; ...@@ -3,6 +3,8 @@ package com.github.wxiaoqi.security.admin.dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Map; import java.util.Map;
@Data @Data
...@@ -43,6 +45,10 @@ public class AppShareholderDetailDTO { ...@@ -43,6 +45,10 @@ public class AppShareholderDetailDTO {
private Long updTime; private Long updTime;
@ApiModelProperty("实际入股时间时间")
private Date relTime;
@ApiModelProperty("持股数") @ApiModelProperty("持股数")
private Integer userNumber; private Integer userNumber;
......
...@@ -7,6 +7,7 @@ import javax.persistence.Column; ...@@ -7,6 +7,7 @@ import javax.persistence.Column;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.Table; import javax.persistence.Table;
import java.util.Date;
@Table(name = "app_shareholder_detail") @Table(name = "app_shareholder_detail")
@Data @Data
...@@ -47,6 +48,10 @@ public class AppShareholderDetail { ...@@ -47,6 +48,10 @@ public class AppShareholderDetail {
@Column(name = "upd_time") @Column(name = "upd_time")
private Long updTime; private Long updTime;
@ApiModelProperty("实际入股时间时间")
@Column(name = "rel_time")
private Date relTime;
@Column(name = "position_id") @Column(name = "position_id")
private Integer positionId; private Integer positionId;
......
...@@ -3,43 +3,41 @@ package com.github.wxiaoqi.security.admin.vo; ...@@ -3,43 +3,41 @@ package com.github.wxiaoqi.security.admin.vo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Map; import java.util.Map;
@Data @Data
public class AppShareholderDetailVo { public class AppShareholderDetailVo {
private Integer id; private Integer id;
@ApiModelProperty("用户id") @ApiModelProperty("用户id")
private Integer userId; private Integer userId;
@ApiModelProperty("公司名称") @ApiModelProperty("公司名称")
private String companyName; private String companyName;
@ApiModelProperty("公司ID") @ApiModelProperty("公司ID")
private Integer companyId; private Integer companyId;
@ApiModelProperty("用户手机号") @ApiModelProperty("用户手机号")
private String phone; private String phone;
@ApiModelProperty("股东名称") @ApiModelProperty("股东名称")
private String name; private String name;
@ApiModelProperty("持股状态 0:持股中 1:已退股") @ApiModelProperty("持股状态 0:持股中 1:已退股")
private Integer isQuit; private Integer isQuit;
@ApiModelProperty("创建时间") @ApiModelProperty("创建时间")
private Long crtTime; private Long crtTime;
@ApiModelProperty("更新时间") @ApiModelProperty("更新时间")
private Long updTime; private Long updTime;
@ApiModelProperty("实际入股时间")
private Date relTime;
@ApiModelProperty("持股数") @ApiModelProperty("持股数")
private Integer userNumber; private Integer userNumber;
...@@ -47,8 +45,8 @@ public class AppShareholderDetailVo { ...@@ -47,8 +45,8 @@ public class AppShareholderDetailVo {
private Map<Integer, String> companyMap; private Map<Integer, String> companyMap;
@ApiModelProperty("股东身份ID") @ApiModelProperty("股东身份ID")
private Integer positionId; private Integer positionId;
@ApiModelProperty("股东身份名称") @ApiModelProperty("股东身份名称")
private String positionName; private String positionName;
} }
...@@ -2,10 +2,14 @@ package com.github.wxiaoqi.security.admin.biz; ...@@ -2,10 +2,14 @@ package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.dto.AppShareholderDetailDTO; import com.github.wxiaoqi.security.admin.dto.AppShareholderDetailDTO;
import com.github.wxiaoqi.security.admin.dto.AppShareholderDetailFindDTO; import com.github.wxiaoqi.security.admin.dto.AppShareholderDetailFindDTO;
import com.github.wxiaoqi.security.admin.entity.*; import com.github.wxiaoqi.security.admin.entity.AppShareholderDetail;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.AppUserPosition;
import com.github.wxiaoqi.security.admin.mapper.AppShareholderDetailMapper; import com.github.wxiaoqi.security.admin.mapper.AppShareholderDetailMapper;
import com.github.wxiaoqi.security.admin.vo.AppShareholderDetailVo; import com.github.wxiaoqi.security.admin.vo.AppShareholderDetailVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO; import com.github.wxiaoqi.security.common.vo.PageDataVO;
...@@ -16,11 +20,17 @@ import org.apache.commons.collections.CollectionUtils; ...@@ -16,11 +20,17 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
...@@ -40,10 +50,16 @@ public class AppShareholderDetailBiz extends BaseBiz<AppShareholderDetailMapper, ...@@ -40,10 +50,16 @@ public class AppShareholderDetailBiz extends BaseBiz<AppShareholderDetailMapper,
@Autowired @Autowired
private AppUserPositionBiz appUserPositionBiz; private AppUserPositionBiz appUserPositionBiz;
@Autowired
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
public static int HEADQUARTERS_SHAREHOLDER = 1; public static int HEADQUARTERS_SHAREHOLDER = 1;
public static int BRANCH_HEADQUARTERS_SHAREHOLDER = 2; public static int BRANCH_HEADQUARTERS_SHAREHOLDER = 2;
private final int BORDER_NUM = 250;
public Integer findShareholderByUserIdOrPhone(Integer userId, String phone) { public Integer findShareholderByUserIdOrPhone(Integer userId, String phone) {
return mapper.selectShareHolderByUserIdOrPhone(userId, phone); return mapper.selectShareHolderByUserIdOrPhone(userId, phone);
} }
...@@ -51,6 +67,7 @@ public class AppShareholderDetailBiz extends BaseBiz<AppShareholderDetailMapper, ...@@ -51,6 +67,7 @@ public class AppShareholderDetailBiz extends BaseBiz<AppShareholderDetailMapper,
/** /**
* 新增股东 * 新增股东
* zuoyh * zuoyh
*
* @param appShareholderDetailDTO * @param appShareholderDetailDTO
* @param updUserId * @param updUserId
* @return * @return
...@@ -154,10 +171,84 @@ public class AppShareholderDetailBiz extends BaseBiz<AppShareholderDetailMapper, ...@@ -154,10 +171,84 @@ public class AppShareholderDetailBiz extends BaseBiz<AppShareholderDetailMapper,
/** /**
* 批量导入 * 批量导入
*/ */
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public int importShareholder(List<String[]> shareholderData, Integer userId, String userName) {
List<AppShareholderDetail> appShareholderDetail = new ArrayList<>();
Integer discount = 0;
AtomicInteger counter = new AtomicInteger(0);
int threadNums = shareholderData.size() / BORDER_NUM == 0 ? 1 : shareholderData.size() / BORDER_NUM;
CountDownLatch latch = new CountDownLatch(threadNums);
for (int i = 0; i < threadNums; i++) {
int startIndex = i * BORDER_NUM;
int endIndex = i == (threadNums - 1) ? shareholderData.size() : (i + 1) * BORDER_NUM;
List<String[]> subResultDate = shareholderData.subList(startIndex, endIndex);
threadPoolTaskExecutor.execute(() -> {
wrapperData(subResultDate, discount, counter);
latch.countDown();
});
try {
latch.await();
} catch (InterruptedException e) {
throw new BaseException("导入数据失败");
}
}
return appShareholderDetail.size();
}
/**
* @param subResultDate
* @param discount
* @param counter
*/
private void wrapperData(List<String[]> subResultDate, Integer discount, AtomicInteger counter) {
for (String[] data : subResultDate) {
String name = data[0];
String phone = data[1];
String companyName = data[2];
String Time = data[3];
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
try {
Date relTime = formatter.parse(Time);
BranchCompany branchCompany = vehicleFeign.companyId(companyName);
if (branchCompany != null) {
Integer positionId = branchCompany.getId().equals(1) ? HEADQUARTERS_SHAREHOLDER : BRANCH_HEADQUARTERS_SHAREHOLDER;
AppShareholderDetailDTO appShareholderDetailDTO = new AppShareholderDetailDTO();
//用户表更改其身份
Integer userId = 0;
//登陆表查询用户手机号
AppUserLogin userLogin = loginBiz.checkeUserLogin(phone);
if (userLogin != null) {
userId = userLogin.getId();
appShareholderDetailDTO.setUserId(userId);
//关联查询detail表 获取身份
AppUserDetail appUserDetail = detailBiz.checkeIsAppUser(userId);
if (!(appUserDetail.getPositionId().equals(1))) {
if (positionId.equals(1)) {
detailBiz.updateUserPositionByUserId(userId, positionId);
}
}
}
appShareholderDetailDTO.setUserId(userId);
appShareholderDetailDTO.setPositionId(positionId);
appShareholderDetailDTO.setCompanyId(branchCompany.getId());
appShareholderDetailDTO.setCompanyName(branchCompany.getName());
appShareholderDetailDTO.setName(name);
appShareholderDetailDTO.setPhone(phone);
appShareholderDetailDTO.setRelTime(relTime);
appShareholderDetailDTO.setIsQuit(0);
appShareholderDetailDTO.setCrtTime(System.currentTimeMillis());
AppShareholderDetail appShareholderDetail = new AppShareholderDetail();
BeanUtils.copyProperties(appShareholderDetailDTO, appShareholderDetail);
mapper.insertSelective(appShareholderDetail);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
} }
...@@ -426,9 +426,12 @@ public class AppUserPositionTempBiz extends BaseBiz<AppUserPositionTempMapper, A ...@@ -426,9 +426,12 @@ public class AppUserPositionTempBiz extends BaseBiz<AppUserPositionTempMapper, A
} }
//身份变更 //身份变更
if (StaffChangeStatusEnum.IDENTITY_CHANE.getCode() == changeStatus) { if (StaffChangeStatusEnum.IDENTITY_CHANE.getCode() == changeStatus) {
postionId = Objects.nonNull(postionId) ? postionId : appUserPositionTempDTO.getPositionId(); //不是离职状态下
//更改为股东身份 if(Objects.nonNull(userPositionTemp.getIsQuit()) && userPositionTemp.getIsQuit()!=1){
loginBiz.updateUserPosition(appUserDetail.getUserid(), postionId); postionId = Objects.nonNull(postionId) ? postionId : appUserPositionTempDTO.getPositionId();
//更改为股东身份
loginBiz.updateUserPosition(appUserDetail.getUserid(), postionId);
}
} }
} }
} }
......
...@@ -107,6 +107,7 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, ...@@ -107,6 +107,7 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
List<BaseUserMemberLevel> levesls = userMemberLevelBiz.getLevesls(); List<BaseUserMemberLevel> levesls = userMemberLevelBiz.getLevesls();
Map<Integer, BaseUserMemberLevel> levelAndbaseUserMemberMap = levesls.parallelStream().collect(Collectors.toMap(BaseUserMemberLevel::getLevel, Function.identity())); Map<Integer, BaseUserMemberLevel> levelAndbaseUserMemberMap = levesls.parallelStream().collect(Collectors.toMap(BaseUserMemberLevel::getLevel, Function.identity()));
Map<String,Integer> leavelNameAndLeaveMap = levelAndbaseUserMemberMap.values().parallelStream().collect(Collectors.toMap(BaseUserMemberLevel::getName, BaseUserMemberLevel::getLevel)); Map<String,Integer> leavelNameAndLeaveMap = levelAndbaseUserMemberMap.values().parallelStream().collect(Collectors.toMap(BaseUserMemberLevel::getName, BaseUserMemberLevel::getLevel));
List<String> phones = userMemberData.stream().map(x -> x[0]).distinct().collect(Collectors.toList()); List<String> phones = userMemberData.stream().map(x -> x[0]).distinct().collect(Collectors.toList());
Map<String, Integer> phoneAndUserIdMap = appUserLoginBiz.findPhoneAndUserIdMapByPhones(phones); Map<String, Integer> phoneAndUserIdMap = appUserLoginBiz.findPhoneAndUserIdMapByPhones(phones);
Set<Map.Entry<String, Integer>> leaveNameAndLeaveEntry = leavelNameAndLeaveMap.entrySet(); Set<Map.Entry<String, Integer>> leaveNameAndLeaveEntry = leavelNameAndLeaveMap.entrySet();
...@@ -145,7 +146,10 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, ...@@ -145,7 +146,10 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
return baseUserMemberExports.size(); return baseUserMemberExports.size();
} }
private void wrapperData(List<String[]> userMemberData, Integer userId, String userName, List<BaseUserMemberExport> baseUserMemberExports, Map<Integer, BaseUserMemberLevel> levelAndbaseUserMemberMap, Map<String, Integer> phoneAndUserIdMap, Set<Map.Entry<String, Integer>> leaveNameAndLeaveEntry, Integer memberLevel, Integer discount, AtomicInteger counter,Map<Integer,UserMemberDTO> numAndUserMemberMap) { private void wrapperData(List<String[]> userMemberData, Integer userId, String userName,
List<BaseUserMemberExport> baseUserMemberExports, Map<Integer, BaseUserMemberLevel> levelAndbaseUserMemberMap,
Map<String, Integer> phoneAndUserIdMap, Set<Map.Entry<String, Integer>> leaveNameAndLeaveEntry,
Integer memberLevel, Integer discount, AtomicInteger counter,Map<Integer,UserMemberDTO> numAndUserMemberMap) {
for (String[] data : userMemberData) { for (String[] data : userMemberData) {
String phone = data[0]; String phone = data[0];
String memberLevelName = data[1]; String memberLevelName = data[1];
......
package com.github.wxiaoqi.security.admin.rest.admin;
import com.github.wxiaoqi.security.admin.biz.AppShareholderDetailBiz;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.util.excel.ExcelImport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/admin/appShareholder")
@Api("后台*会员管理")
public class AppShareholderDetailController {
@Autowired
private UserAuthUtil userAuthUtil;
@Autowired
private UserAuthConfig userAuthConfig;
@Autowired
private AppShareholderDetailBiz appShareholderDetailBiz;
@ApiOperation("批量导入股东")
@PostMapping("/appShareholder/export")
public ObjectRestResponse importAppShareholder(@RequestPart("file") MultipartFile appShareholderExcel, HttpServletRequest request) {
try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
List<String[]> appShareholderData = ExcelImport.getExcelData(appShareholderExcel);
if (appShareholderData.size() < 1) {
return ObjectRestResponse.createFailedResult(1001, "导入不能没数据!!!");
}
appShareholderData.remove(0);
try {
int effectSize = appShareholderDetailBiz.importShareholder(appShareholderData, Integer.valueOf(infoFromToken.getId()), infoFromToken.getUniqueName());
return ObjectRestResponse.succ(effectSize);
} catch (BaseException ex) {
return ObjectRestResponse.createDefaultFail();
}
} catch (Exception e) {
throw new BaseException(e);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment