Commit 525eea58 by 陶光胜

Merge branch 'developer' into 'master'

Developer

See merge request !34
parents 53ad2e6f a58f3106
......@@ -94,7 +94,7 @@ public class ClerkDTO implements Serializable {
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName.trim();
this.clerkName = clerkName == null ? null : clerkName.trim();
}
public String getClerkCode() {
......@@ -102,7 +102,7 @@ public class ClerkDTO implements Serializable {
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode.trim();
this.clerkCode = clerkCode == null ? null : clerkCode.trim();
}
public Integer getEnterpriseId() {
......
......@@ -57,6 +57,8 @@ public class StoreDTO extends StoreInfoDTO implements Serializable {
private String statusName;
private String erpStatusName;
private String storeTypeName;
// 有没有在转移中的会员 1有 0没有
private int hasTransMember=0;
public Integer getStoreId() {
return storeId;
......@@ -233,4 +235,12 @@ public class StoreDTO extends StoreInfoDTO implements Serializable {
public String getStoreTypeName() {
return storeTypeName;
}
public void setHasTransMember(int hasTransMember) {
this.hasTransMember = hasTransMember;
}
public int getHasTransMember() {
return hasTransMember;
}
}
\ No newline at end of file
......@@ -135,7 +135,7 @@ public class StoreInfoDTO implements Serializable {
}
public void setStoreName(String storeName) {
this.storeName = storeName.trim();
this.storeName = storeName == null ? null : storeName.trim();
}
public String getStoreCode() {
......@@ -143,7 +143,7 @@ public class StoreInfoDTO implements Serializable {
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode.trim();
this.storeCode = storeCode == null ? null : storeCode.trim();
}
public Integer getRegionId() {
......
......@@ -175,4 +175,6 @@ public interface StoreGroupApiService {
*/
ServiceResponse<Page<StoreGroupDTO>> pageStoreGroupByIds(List<Integer> storeGroupIdList, Integer enterpriseId,
Integer parentId, String search, Integer pageSize, Integer pageNum);
ServiceResponse<List<StoreGroupDTO>> listChildrenStoreGroup(Integer enterpriseId, Integer parentStoreGroupId);
}
......@@ -197,4 +197,6 @@ public interface StoreGroupService {
List<TabStoreGroup> listStoreGroupByIds(List<Integer> storeGroupIdList, Integer enterpriseId, Integer level);
Page<TabStoreGroup> pageStoreGroupByIds(List<Integer> storeGroupIdList, Integer enterpriseId, Integer parentId, String search);
List<TabStoreGroup> listChildrenStoreGroup(Integer enterpriseId, Integer parentStoreGroupId);
}
......@@ -90,7 +90,7 @@ public class ClerkPositionServiceImpl implements ClerkPositionService {
// 相当于置顶
sortTopping(enterpriseId, clerkPositionId);
} else {
int start = seq - 2;
int start = seq - 4;
int size = 2;
List<TabClerkPosition> list = tabClerkPositionMapper.listTwoElementExceptId(enterpriseId, start, size, clerkPositionId);
......
......@@ -169,4 +169,13 @@ public class StoreGroupServiceImpl implements StoreGroupService{
return this.tabStoreGroupMapper.pageStoreGroupByIds(storeGroupIdList, enterpriseId, parentId, search);
}
@Override
public List<TabStoreGroup> listChildrenStoreGroup(Integer enterpriseId, Integer parentStoreGroupId) {
TabStoreGroup param = new TabStoreGroup();
param.setEnterpriseId(enterpriseId);
param.setParentStoreGroupId(parentStoreGroupId);
List<TabStoreGroup> tabStoreGroupList = tabStoreGroupMapper.listStoreGroup(param);
return tabStoreGroupList;
}
}
......@@ -14,6 +14,7 @@ import com.gic.enterprise.response.EnterpriseServiceResponse;
import com.gic.enterprise.service.EnterpriseApiService;
import com.gic.enterprise.service.WmStoreSyncLogApiService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import com.gic.spark.api.service.SparkJobApiService;
import com.gic.store.constant.ClerkLogReasonEnum;
import com.gic.store.constant.ImportClerkBatchResultEnum;
......@@ -79,10 +80,32 @@ public class ClerkApiServiceImpl implements ClerkApiService {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "权限不足");
}
// 校验参数
if (clerkService.isRepeatByClerkCode(clerkDTO.getStoreInfoId(), clerkDTO.getClerkCode(),
clerkDTO.getClerkId())) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "门店下导购代码重复");
if (StringUtils.isBlank(clerkDTO.getClerkCode())) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "门店下导购代码不能为空");
}
try {
RedisUtil.lock("enterprise:clerk:position:" + clerkDTO.getStoreInfoId(), 1L);
if (clerkService.isRepeatByClerkCode(clerkDTO.getStoreInfoId(), clerkDTO.getClerkCode(), clerkDTO.getClerkId())) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "门店下导购代码重复");
}
// 店长逻辑
// 如果门店下已经存在有导购是店长, 并且当前导购是店长 则做替换
// 如果门店下没有导购是店长,将当前导购设置成店长
// 这里并发会出错 加个锁
TabClerk clerkLeader = clerkService.getClerkLeaderByStoreInfoId(clerkDTO.getEnterpriseId(), clerkDTO.getStoreInfoId());
if (clerkLeader != null && com.gic.store.constant.Constants.CLERK_LEADER_POSITION_ID.equals(clerkDTO.getPositionId())) {
clerkLeader.setPositionId(com.gic.store.constant.Constants.CLERK_POSITION_ID);
clerkLeader.setPositionName("导购");
clerkService.update(clerkLeader);
clerkDTO.setPositionId(com.gic.store.constant.Constants.CLERK_LEADER_POSITION_ID);
} else if (clerkLeader == null) {
clerkDTO.setPositionId(com.gic.store.constant.Constants.CLERK_LEADER_POSITION_ID);
}
}finally {
RedisUtil.unlock("enterprise:clerk:position:" + clerkDTO.getStoreInfoId());
}
if (StringUtils.isNotBlank(clerkDTO.getPhoneNumber())) {
String nationcode = clerkDTO.getNationcode();
if (StringUtils.isBlank(nationcode)) {
......@@ -107,19 +130,6 @@ public class ClerkApiServiceImpl implements ClerkApiService {
if (clerkDTO.getPositionId() == null) {
clerkDTO.setPositionId(com.gic.store.constant.Constants.CLERK_POSITION_ID);
}
// 店长逻辑
// 如果门店下已经存在有导购是店长, 并且当前导购是店长 则做替换
// 如果门店下没有导购是店长,将当前导购设置成店长
TabClerk clerkLeader = clerkService.getClerkLeaderByStoreInfoId(clerkDTO.getEnterpriseId(), clerkDTO.getStoreInfoId());
if (clerkLeader != null && com.gic.store.constant.Constants.CLERK_LEADER_POSITION_ID.equals(clerkDTO.getPositionId())) {
clerkLeader.setPositionId(com.gic.store.constant.Constants.CLERK_POSITION_ID);
clerkLeader.setPositionName("导购");
clerkService.update(clerkLeader);
clerkDTO.setPositionId(com.gic.store.constant.Constants.CLERK_LEADER_POSITION_ID);
} else if (clerkLeader == null) {
clerkDTO.setPositionId(com.gic.store.constant.Constants.CLERK_LEADER_POSITION_ID);
}
String positionName = this.clerkPositionService.getByClerkPositionId(clerkDTO.getPositionId()).getPositionName();
clerkDTO.setPositionName(positionName);
......@@ -645,11 +655,11 @@ public class ClerkApiServiceImpl implements ClerkApiService {
if (clerk == null) {
return EnterpriseServiceResponse.failure(ErrorCode.NOTEXISTS.getCode(), "导购不存在", Boolean.FALSE);
}
StoreDTO store = this.storeApiService.getStoreById(enterpriseId, storeInfoId).getResult();
StoreDTO store = this.storeApiService.getStoreByStoreInfoId(enterpriseId, storeInfoId).getResult();
if (store == null) {
return EnterpriseServiceResponse.failure(ErrorCode.NOTEXISTS.getCode(), "门店不存在", Boolean.FALSE);
}
if (clerk.getStoreInfoId().equals(store.getStoreInfoId())) {
if (clerk.getStoreInfoId().equals(storeInfoId)) {
logger.info("导购[clerkId:{}]已存在门店[storeId:{}, storeInfoId:{}]下", clerkId, store.getStoreId(), store.getStoreInfoId());
return EnterpriseServiceResponse.success(Boolean.TRUE);
} else {
......
......@@ -1625,14 +1625,18 @@ public class StoreApiServiceImpl implements StoreApiService {
ServiceResponse<JSONObject> jsonObjectServiceResponse = this.parseStoreSelectJson(storeSearchDTO.getSearchJson());
if(jsonObjectServiceResponse.isSuccess()){
json = jsonObjectServiceResponse.getResult();
jsonObjectList.add(json);
if (json != null) {
jsonObjectList.add(json);
}
}
}
if(StringUtils.isNotBlank(storeSearchDTO.getAuthSearchJson()) && !"{}".equals(storeSearchDTO.getAuthSearchJson())){
ServiceResponse<JSONObject> jsonObjectServiceResponse = this.parseStoreSelectJson(storeSearchDTO.getAuthSearchJson());
if(jsonObjectServiceResponse.isSuccess()){
json = jsonObjectServiceResponse.getResult();
jsonObjectList.add(json);
if (json != null) {
jsonObjectList.add(json);
}
}
}
if(StringUtils.isNotBlank(storeSearchDTO.getLatitude()) && StringUtils.isNotBlank(storeSearchDTO.getLongitude())){
......@@ -1719,7 +1723,9 @@ public class StoreApiServiceImpl implements StoreApiService {
ServiceResponse<JSONObject> jsonObjectServiceResponse = this.parseStoreSelectJson(storeWidget.getAuthSearchParam());
if(jsonObjectServiceResponse.isSuccess()){
json = jsonObjectServiceResponse.getResult();
jsonObjectList.add(json);
if (json != null) {
jsonObjectList.add(json);
}
}
}
if(storeWidget.getAuthMode() != null && storeWidget.getAuthMode() == 2){
......
......@@ -373,6 +373,12 @@ public class StoreGroupApiServiceImpl implements StoreGroupApiService {
return ServiceResponse.success(storeGroupDTOPage);
}
@Override
public ServiceResponse<List<StoreGroupDTO>> listChildrenStoreGroup(Integer enterpriseId, Integer parentStoreGroupId) {
List<TabStoreGroup> list = this.storeGroupService.listChildrenStoreGroup(enterpriseId, parentStoreGroupId);
return ServiceResponse.success(EntityUtil.changeEntityListByJSON(StoreGroupDTO.class, list));
}
/**
* 刷新缓存,删除缓存
* @param storeGroupId
......
......@@ -179,6 +179,9 @@
<if test="groupLevel != null and groupLevel != '' ">
and group_level = #{groupLevel}
</if>
<if test="parentStoreGroupId !=null and parentStoreGroupId != ''">
and parent_store_group_id = #{parentStoreGroupId}
</if>
order by group_level, sort
</select>
......
......@@ -360,7 +360,7 @@ public class ClerkImportController {
String positionName = row.get(6);
if (validate) {
if (StringUtils.isNotBlank(positionName) && this.lengthValidate(storeCode, 20)) {
bean.setErrorMessage("岗位超过20个字");
bean.setErrorMessage("角色超过20个字");
validate = false;
}
}
......@@ -370,7 +370,7 @@ public class ClerkImportController {
if (validate) {
ClerkPositionDTO positionDTO = positionResp.getResult();
if (positionDTO == null) {
bean.setErrorMessage("职位不存在");
bean.setErrorMessage("角色不存在");
validate = false;
}
}
......
......@@ -22,7 +22,9 @@ import com.gic.enterprise.utils.LicenseUtils;
import com.gic.enterprise.utils.ResultControllerUtils;
import com.gic.enterprise.utils.UserDetailUtils;
import com.gic.log.api.service.LogApiService;
import com.gic.member.api.dto.BatchTaskOperaInfDTO;
import com.gic.member.api.dto.StoreBatchUpdateDTO;
import com.gic.member.api.service.BatchOperationApiService;
import com.gic.member.api.service.StoreUpdateApiService;
import com.gic.redis.data.util.RedisUtil;
import com.gic.store.constant.*;
......@@ -43,6 +45,8 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -53,10 +57,12 @@ import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author zhiwj
......@@ -97,6 +103,8 @@ public class StoreController extends DownloadUtils {
private EnterpriseApiService enterpriseApiService;
@Autowired
private StoreTransferApiService storeTransferApiService;
@Autowired
private BatchOperationApiService batchOperationApiService;
private Map<Integer, SimpleDateFormat> map = new ConcurrentHashMap<>();
......@@ -200,6 +208,7 @@ public class StoreController extends DownloadUtils {
List<StoreDTO> result = page.getResult();
if(CollectionUtils.isNotEmpty(result)){
this.convertCustomField(result);
this.convertTranMember(result);
}
page.setResult(result);
}
......@@ -581,6 +590,13 @@ public class StoreController extends DownloadUtils {
@RequestMapping("transfer-store-member")
public RestResponse transferStoreMember(String storeId, Integer toStoreId){
RedissonClient redisClient = RedisUtil.getRedisClient();
RMap<Integer, String> cacheMap = redisClient.getMap("enterprise:store:transfermember:process");
String cacheStoreId = cacheMap.get(UserDetailUtils.getUserDetail().getEnterpriseId());
if (StringUtils.isNotBlank(cacheStoreId)) {
return RestResponse.failure(ErrorCode.OPERATION_FAILED.getCode(), "请其他门店会员转移完毕后再试");
}
// 把参数改成storeInfoId
StoreSearchDTO storeSearchDTO = new StoreSearchDTO();
storeSearchDTO.setEnterpriseId(UserDetailUtils.getUserDetail().getEnterpriseId());
......@@ -604,6 +620,8 @@ public class StoreController extends DownloadUtils {
logger.info("transfer-store-member:{}", JSON.toJSONString(storeBatchUpdateDTO));
ServiceResponse<Void> response = this.storeUpdateApiService.storeBatchUpdate(storeBatchUpdateDTO);
logger.info("transfer-store-member-result:{}", JSON.toJSONString(response));
cacheMap.put(UserDetailUtils.getUserDetail().getEnterpriseId(), storeId);
for (String store : list) {
StoreDTO storeDTO = storeApiService.getStoreById(UserDetailUtils.getUserDetail().getEnterpriseId(), Integer.valueOf(store)).getResult();
if (storeDTO != null) {
......@@ -613,6 +631,38 @@ public class StoreController extends DownloadUtils {
return EnterpriseRestResponse.failure(response);
}
@RequestMapping("process-store-member")
public RestResponse transferStoreMember(){
ServiceResponse<List<BatchTaskOperaInfDTO>> resp = batchOperationApiService.queryUnderwayTask(UserDetailUtils.getUserDetail().getEnterpriseId());
if (!resp.isSuccess()) {
return ResultControllerUtils.commonResult(resp);
}
List<BatchTaskOperaInfDTO> list = resp.getResult();
if (CollectionUtils.isNotEmpty(list)) {
List<BatchTaskOperaInfDTO> processList = list.stream().filter(e -> e.getTaskType() == 17).collect(Collectors.toList());
return RestResponse.success(processList);
}
return RestResponse.success(Collections.emptyList());
}
public boolean hasTransMember() {
ServiceResponse<List<BatchTaskOperaInfDTO>> resp = batchOperationApiService.queryUnderwayTask(UserDetailUtils.getUserDetail().getEnterpriseId());
if (resp.isSuccess()) {
List<BatchTaskOperaInfDTO> list = resp.getResult();
if (CollectionUtils.isNotEmpty(list)) {
List<BatchTaskOperaInfDTO> processList = list.stream().filter(e -> e.getTaskType() == 17).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(processList)) {
return true;
}
}
}
RedissonClient redisClient = RedisUtil.getRedisClient();
RMap<Integer, String> cacheMap = redisClient.getMap("enterprise:store:transfermember:process");
cacheMap.remove(UserDetailUtils.getUserDetail().getEnterpriseId());
return false;
}
private List<StoreListSourceVO> getStoreAllListSource(Integer enterpriseId) {
List<StoreListSourceVO> list = new ArrayList<>();
ServiceResponse<List<StoreDictDTO>> serviceResponse = this.storeDictApiService.listStoreField(enterpriseId);
......@@ -833,6 +883,21 @@ public class StoreController extends DownloadUtils {
return simpleDateFormat;
}
private void convertTranMember(List<StoreDTO> result) {
this.hasTransMember();
RedissonClient redisClient = RedisUtil.getRedisClient();
RMap<Integer, String> cacheMap = redisClient.getMap("enterprise:store:transfermember:process");
String cacheStoreId = cacheMap.get(UserDetailUtils.getUserDetail().getEnterpriseId());
if (StringUtils.isBlank(cacheStoreId)) {
return;
}
List<Integer> storeIdList = Stream.of(cacheStoreId.split(",")).map(Integer::valueOf).collect(Collectors.toList());
for (StoreDTO storeDTO : result) {
storeDTO.setHasTransMember(storeIdList.contains(storeDTO.getStoreId()) ? 1 : 0);
}
}
/**
* 小康那边跑非实时的分组 需要这个接口转换数据
*/
......
......@@ -63,5 +63,6 @@
<dubbo:reference interface="com.gic.enterprise.service.AuditLogApiService" id="auditLogApiService" timeout="6000"/>
<dubbo:reference interface="com.gic.enterprise.service.EnterpriseApiService" id="enterpriseApiService" timeout="6000"/>
<dubbo:reference interface="com.gic.store.service.DictApiService" id="dictApiService" timeout="6000"/>
<dubbo:reference interface="com.gic.member.api.service.BatchOperationApiService" id="batchOperationApiService" timeout="6000"/>
</beans>
\ No newline at end of file
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