Commit be3fc7d4 by 陶光胜

Merge branch 'developer' into 'master'

Developer

See merge request !37
parents acad7a73 1a0d2321
......@@ -87,6 +87,7 @@ public class ClerkTmpDTO implements Serializable {
*/
private String operatorName;
private String clerkType;
private boolean replace;
public Integer getClerkTmpId() {
return clerkTmpId;
......@@ -231,4 +232,12 @@ public class ClerkTmpDTO implements Serializable {
public void setRegionName(String regionName) {
this.regionName = regionName;
}
public void setReplace(boolean replace) {
this.replace = replace;
}
public boolean getReplace() {
return replace;
}
}
......@@ -51,10 +51,11 @@ public interface ClerkImportApiService {
* @param enterpriseId 企业id
* @param userId 操作人
* @param uuId 上传任务的唯一标识
* @param isReplace
* @return com.gic.api.base.commons.ServiceResponse<java.lang.String>
* @throws
*/
ServiceResponse<String> importDataToClerk(Integer enterpriseId, String userId, String uuId);
ServiceResponse<String> importDataToClerk(Integer enterpriseId, String userId, String uuId, boolean isReplace);
/**
* @Title: listClerkTmp
......@@ -124,4 +125,16 @@ public interface ClerkImportApiService {
* @throws
*/
ServiceResponse<List<List<String>>> listError(Integer enterpriseId);
/**
* @Title: validateClerkCode
* @Description:
* @author zhiwj
* @param enterpriseId
* @param storeInfoId
* @param clerkCode
* @return com.gic.api.base.commons.ServiceResponse<java.lang.Boolean>
* @throws
*/
ServiceResponse<Boolean> validateClerkCode(Integer enterpriseId, Integer storeInfoId, String clerkCode);
}
......@@ -15,10 +15,11 @@ public interface ClerkTaskApiService {
* @param enterpriseId 企业id
* @param userId 操作人
* @param uuId 上传唯一参数
* @param isReplace
* @return java.lang.String
* @throws
*/
String importDataToClerk(Integer enterpriseId, String userId, String uuId);
String importDataToClerk(Integer enterpriseId, String userId, String uuId, boolean isReplace);
/**
* @Title: run
......
......@@ -54,7 +54,7 @@ public interface TabStorePhotoMapper {
*/
int updateByPrimaryKey(TabStorePhoto record);
List<TabStorePhoto> listStorePhoto(@Param("enterpriseId") Integer enterpriseId, @Param("storeInfoId") Integer storeId);
List<TabStorePhoto> listStorePhoto(@Param("enterpriseId") Integer enterpriseId, @Param("storeInfoId") Integer storeInfoId);
int updateAllStorePhoto(@Param("imageCode") String imageCode, @Param("imageUrl")String imageUrl, @Param("sort") int sort, @Param("enterpriseId") Integer enterpriseId);
......
......@@ -10,7 +10,7 @@ import java.util.List;
* @date 2019/6/27
*/
public interface StorePhotoService {
void editStoreImage(Integer enterpriseId, Integer storeId, List<StorePhotoDTO> photoList, List<Integer> delPhotos);
void editStoreImage(Integer enterpriseId, Integer storeInfoId, List<StorePhotoDTO> photoList, List<Integer> delPhotos);
List<TabStorePhoto> listStorePhoto(Integer enterpriseId, Integer storeId);
List<TabStorePhoto> listStorePhoto(Integer enterpriseId, Integer storeInfoId);
}
......@@ -31,12 +31,10 @@ public class StoreBusinessTimeServiceImpl implements StoreBusinessTimeService {
@Override
@Transactional(rollbackFor = Exception.class)
public void editStoreBusinessTime(Integer enterpriseId, Integer storeInfoId, List<StoreBusinessTimeDTO> businessTimeList, List<Integer> delBusinessTimes) {
// if (CollectionUtils.isNotEmpty(delBusinessTimes)) {
// for (Integer delId : delBusinessTimes) {
// tabStoreBusinessTimeMapper.deleteByPrimaryKey(delId);
// }
// }
tabStoreBusinessTimeMapper.deleteBystoreInfoIds(enterpriseId, Collections.singletonList(storeInfoId));
if (CollectionUtils.isNotEmpty(businessTimeList) || CollectionUtils.isNotEmpty(delBusinessTimes)) {
tabStoreBusinessTimeMapper.deleteBystoreInfoIds(enterpriseId, Collections.singletonList(storeInfoId));
}
if (CollectionUtils.isNotEmpty(businessTimeList)) {
for (StoreBusinessTimeDTO storeBusinessTimeDTO : businessTimeList) {
if (StringUtils.isNotBlank(storeBusinessTimeDTO.getWeekday())) {
......
......@@ -26,17 +26,13 @@ public class StorePhotoServiceImpl implements StorePhotoService {
@Override
@Transactional(rollbackFor = Exception.class)
public void editStoreImage(Integer enterpriseId, Integer storeId, List<StorePhotoDTO> photoList, List<Integer> delPhotos) {
// if (CollectionUtils.isNotEmpty(delPhotos)) {
// for (Integer delId : delPhotos) {
// TabStorePhoto storePhoto = new TabStorePhoto();
// storePhoto.setStorePhotoId(delId);
// storePhoto.setStatus(GlobalInfo.DATA_STATUS_DELETE);
// tabStorePhotoMapper.updateByPrimaryKeySelective(storePhoto);
// }
// }
// 删除老的
tabStorePhotoMapper.deleteBystoreInfoIds(enterpriseId, Collections.singletonList(storeId));
public void editStoreImage(Integer enterpriseId, Integer storeInfoId, List<StorePhotoDTO> photoList, List<Integer> delPhotos) {
if (CollectionUtils.isNotEmpty(photoList) || CollectionUtils.isNotEmpty(delPhotos)) {
// 删除老的
tabStorePhotoMapper.deleteBystoreInfoIds(enterpriseId, Collections.singletonList(storeInfoId));
}
if (CollectionUtils.isNotEmpty(photoList)) {
for (int i = 0; i < photoList.size(); i++) {
......@@ -48,7 +44,7 @@ public class StorePhotoServiceImpl implements StorePhotoService {
storePhoto.setImageUrl(storePhotoDTO.getImageUrl());
storePhoto.setSort(storePhotoDTO.getSort());
storePhoto.setStatus(GlobalInfo.DATA_STATUS_NORMAL);
storePhoto.setStoreInfoId(storeId);
storePhoto.setStoreInfoId(storeInfoId);
storePhoto.setSort(i);
if (storePhotoDTO.getStorePhotoId() == null) {
storePhoto.setCreateTime(new Date());
......@@ -61,7 +57,7 @@ public class StorePhotoServiceImpl implements StorePhotoService {
}
@Override
public List<TabStorePhoto> listStorePhoto(Integer enterpriseId, Integer storeId) {
return tabStorePhotoMapper.listStorePhoto(enterpriseId, storeId);
public List<TabStorePhoto> listStorePhoto(Integer enterpriseId, Integer storeInfoId) {
return tabStorePhotoMapper.listStorePhoto(enterpriseId, storeInfoId);
}
}
\ No newline at end of file
......@@ -11,9 +11,12 @@ import com.gic.store.dao.mapper.TabStoreInfoMapper;
import com.gic.store.dao.mapper.TabStoreMapper;
import com.gic.store.dao.mapper.TabStorePhotoMapper;
import com.gic.store.dto.StoreDTO;
import com.gic.store.dto.StoreExtendDTO;
import com.gic.store.dto.StoreSearchDBDTO;
import com.gic.store.entity.TabStore;
import com.gic.store.entity.TabStoreField;
import com.gic.store.entity.TabStoreInfo;
import com.gic.store.service.StoreFieldService;
import com.gic.store.service.StoreService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
......@@ -45,6 +48,8 @@ public class StoreServiceImpl implements StoreService {
TabStorePhotoMapper tabStorePhotoMapper;
@Autowired
private TabStoreMapper tabStoreMapper;
@Autowired
private StoreFieldService storeFieldService;
@Override
public Integer save(StoreDTO copy) {
......@@ -187,12 +192,21 @@ public class StoreServiceImpl implements StoreService {
@Override
public Integer checkCompleteStatus(StoreDTO storeDTO) {
List<StoreExtendDTO> storeExtendList = storeDTO.getStoreExtendList();
for (StoreExtendDTO storeExtendDTO : storeExtendList) {
TabStoreField field = storeFieldService.getStoreFieldById(storeExtendDTO.getStoreFieldId());
if (field != null) {
if (StringUtils.isNotBlank(field.getStoreFieldDetail()) && field.getStoreFieldDetail().contains("\"isMust\":1") && StringUtils.isBlank(storeExtendDTO.getValue())) {
return GlobalInfo.DATA_STATUS_DELETE;
}
}
}
return StringUtils.isNotBlank(storeDTO.getStoreName()) &&
storeDTO.getRegionId() != null &&
StringUtils.isNotBlank(storeDTO.getStoreCode()) &&
CollectionUtils.isNotEmpty(storeDTO.getPhotoList()) &&
// storeDTO.getStoreType() != null &&
// storeDTO.getErpStatus() != null &&
storeDTO.getStoreType() != null &&
storeDTO.getErpStatus() != null &&
StringUtils.isNotBlank(storeDTO.getConactsPhone()) &&
CollectionUtils.isNotEmpty(storeDTO.getBusinessTimeList()) &&
StringUtils.isNotBlank(storeDTO.getBusinessTimeList().get(0).getWeekday()) &&
......
......@@ -81,8 +81,18 @@ public class ClerkApiServiceImpl implements ClerkApiService {
}
// 校验参数
if (StringUtils.isBlank(clerkDTO.getClerkCode())) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "门店下导购代码不能为空");
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "导购代码不可为空");
}
if (StringUtils.isBlank(clerkDTO.getClerkName())) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "导购姓名不可为空");
}
if ("null".equals(clerkDTO.getClerkCode().toLowerCase())) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "导购代码不可为null");
}
if (!clerkDTO.getClerkCode().matches("^[\\w\\d]{1,30}$")) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "导购代码仅支持数字和英文字符");
}
try {
RedisUtil.lock("enterprise:clerk:position:" + clerkDTO.getStoreInfoId(), 3L, TimeUnit.SECONDS, 3L);
......
......@@ -5,8 +5,10 @@ import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.PageHelperUtils;
import com.gic.store.dto.ClerkTmpDTO;
import com.gic.store.entity.TabClerk;
import com.gic.store.service.ClerkImportApiService;
import com.gic.store.service.ClerkImportService;
import com.gic.store.service.ClerkService;
import com.gic.store.service.ClerkTaskApiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -28,6 +30,9 @@ public class ClerkImportApiServiceImpl implements ClerkImportApiService {
@Autowired
private ClerkTaskApiService clerkTaskService;
@Autowired
private ClerkService clerkService;
@Override
public ServiceResponse<Boolean> hasImportingClerk(Integer enterpriseId) {
return ServiceResponse.success(clerkImportService.hasImportingClerk(enterpriseId));
......@@ -46,8 +51,8 @@ public class ClerkImportApiServiceImpl implements ClerkImportApiService {
}
@Override
public ServiceResponse<String> importDataToClerk(Integer enterpriseId, String userId, String uuId) {
return ServiceResponse.success(clerkTaskService.importDataToClerk(enterpriseId, userId, uuId));
public ServiceResponse<String> importDataToClerk(Integer enterpriseId, String userId, String uuId, boolean isReplace) {
return ServiceResponse.success(clerkTaskService.importDataToClerk(enterpriseId, userId, uuId, isReplace));
}
@Override
......@@ -116,4 +121,10 @@ public class ClerkImportApiServiceImpl implements ClerkImportApiService {
}
return ServiceResponse.success(resultList);
}
@Override
public ServiceResponse<Boolean> validateClerkCode(Integer enterpriseId, Integer storeInfoId, String clerkCode) {
TabClerk clerk = clerkService.getClerkByCode(enterpriseId, clerkCode, storeInfoId);
return ServiceResponse.success(clerk != null);
}
}
package com.gic.store.service.outer.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.EntityUtil;
import com.gic.store.constant.*;
import com.gic.store.dto.ClerkDTO;
import com.gic.store.dto.ClerkTmpDTO;
import com.gic.store.dto.StoreDTO;
import com.gic.store.dto.StoreRegionDTO;
import com.gic.store.dto.*;
import com.gic.store.entity.TabClerk;
import com.gic.store.entity.TabClerkPosition;
import com.gic.store.entity.TabClerkTmp;
import com.gic.store.service.*;
......@@ -14,6 +14,7 @@ import com.task.allocation.api.AbstractTaskAllocationOperation;
import com.task.allocation.exception.TaskAllocationException;
import com.task.allocation.qo.InitTaskQO;
import com.task.allocation.util.TaskAllocationSdkClient;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -35,6 +36,8 @@ public class ClerkTaskServiceImpl extends AbstractTaskAllocationOperation implem
@Autowired
private ClerkApiService clerkApiService;
@Autowired
private ClerkService clerkService;
@Autowired
private StoreService storeService;
......@@ -44,7 +47,7 @@ public class ClerkTaskServiceImpl extends AbstractTaskAllocationOperation implem
private StoreRegionService storeRegionService;
@Override
public String importDataToClerk(Integer enterpriseId, String userId, String uuId) {
public String importDataToClerk(Integer enterpriseId, String userId, String uuId, boolean isReplace) {
logger.info("enterpriseId:{}, userId:{}, uuId:{}", enterpriseId, userId, uuId);
String message = "";
InitTaskQO initTaskQo = new InitTaskQO();
......@@ -53,8 +56,14 @@ public class ClerkTaskServiceImpl extends AbstractTaskAllocationOperation implem
// key
initTaskQo.setTaskMqKey(Constants.CLERK_BATCH_IMPORT_MQ_KEY);// 注册的队列名称
initTaskQo.setTaskType(Constants.CLERK_BATCH_IMPORT_TASK_TYPE);// 任务类型
initTaskQo.setParams(enterpriseId.toString());// 你自己处理需要的参数
initTaskQo.setTaskSignKey(uuId);// 任务类型 唯一标识符
JSONObject params = new JSONObject();
//如果门店code重复,是否替换更新
params.put("isReplace", isReplace);
params.put("enterpriseId", enterpriseId);
initTaskQo.setParams(params.toString());
try {
TaskAllocationSdkClient instance = TaskAllocationSdkClient.getInstance();// 初始化sdk
instance.initTask(initTaskQo);// 初始化接口
......@@ -68,9 +77,18 @@ public class ClerkTaskServiceImpl extends AbstractTaskAllocationOperation implem
@Override
public List<Object> getListTasks(String params) {
List<TabClerkTmp> list = clerkImportService.listUnImportClerk(params);
JSONObject json = JSON.parseObject(params);
String enterpriseId = json.getString("enterpriseId");
boolean isReplace = json.getBoolean("isReplace");
List<TabClerkTmp> list = clerkImportService.listUnImportClerk(enterpriseId);
logger.info("导购批量导入放入队列数据数量:{}", list.size());
List listTask = EntityUtil.changeEntityListByOrika(ClerkTmpDTO.class, list);
List<ClerkTmpDTO> taskList = EntityUtil.changeEntityListByJSON(ClerkTmpDTO.class, list);
if (CollectionUtils.isNotEmpty(taskList)) {
for (ClerkTmpDTO dto : taskList) {
dto.setReplace(isReplace);
}
}
List listTask = taskList;
return listTask;
}
......@@ -113,8 +131,20 @@ public class ClerkTaskServiceImpl extends AbstractTaskAllocationOperation implem
clerkImportService.updateData(t);
return;
}
ClerkDTO clerkDTO = new ClerkDTO();
// 判断code是否重复
TabClerk clerk = clerkService.getClerkByCode(t.getEnterpriseId(), t.getClerkCode(), store.getStoreInfoId());
if (clerk != null) {
if (t.getReplace()) {
//替换更新code重复的记录
clerkDTO.setClerkId(clerk.getClerkId());
} else {
t.setErrorMessage("门店code已经存在");
clerkImportService.updateData(t);
return;
}
}
clerkDTO.setEnterpriseId(t.getEnterpriseId());
clerkDTO.setStoreInfoId(store.getStoreInfoId());
clerkDTO.setClerkName(t.getClerkName().trim());
......
......@@ -217,7 +217,7 @@ public class StoreImportApiServiceImpl implements StoreImportApiService {
List<String> rowNameList = new ArrayList<>();
Collections.addAll(rowNameList, rowName);
String[] description = { "", "不能超过20个字", "必填,不能超过20个字符,为erp系统中门店唯一识别码", "门店类型描述", "门店状态描述", "门店电话描述", "门店在GIC的所属分组描述", "门店在GIC的所属店招品牌", "省描述", "市描述", "区县描述", "门店地址(不包括省市区)描述", "", "" };
String[] description = { "", "不能超过20个字", "必填,不能超过20个字符,为erp系统中门店唯一识别码", "门店字段管理中勾选的门店类型", "门店字段管理中勾选的门店状态", "不超过15位,仅支持数字和“-”", "门店在GIC的所属分组描述", "门店在GIC的所属店招品牌", "省描述", "市描述", "区县描述", "门店地址(不包括省市区)描述", "经度", "纬度" };
List<String> descriptionList = new ArrayList<>();
Collections.addAll(descriptionList, description);
......
......@@ -23,7 +23,6 @@ import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
......@@ -118,6 +117,7 @@ public class StoreTaskServiceImpl extends AbstractTaskAllocationOperation implem
} else {
t.setErrorMessage("门店code已经存在");
storeImportService.updateData(t);
return;
}
}
storeDTO.setStoreCode(t.getStoreCode().trim());
......@@ -127,10 +127,9 @@ public class StoreTaskServiceImpl extends AbstractTaskAllocationOperation implem
// 判断门店品牌
String brands = t.getBrands();
if (StringUtils.isNotBlank(brands)) {
String[] brandArr = brands.trim().split("、");
List<TabStoreBrand> storeBrandList = storeBrandService.listAllStoreBrand(t.getEnterpriseId(), null);
TabStoreBrand storeBrand = storeBrandService.getByStoreBrandName(t.getEnterpriseId(), brands);
List<Integer> list = new ArrayList<>();
// String[] brandArr = brands.trim().split("、");
// List<TabStoreBrand> storeBrandList = storeBrandService.listAllStoreBrand(t.getEnterpriseId(), null);
// List<Integer> list = new ArrayList<>();
// for (String brandName : brandArr) {
// for (TabStoreBrand storeBrand : storeBrandList) {
// if (storeBrand.getStoreBrandName().equals(brandName)) {
......@@ -140,6 +139,7 @@ public class StoreTaskServiceImpl extends AbstractTaskAllocationOperation implem
// }
// }
// storeDTO.setBrandIds(Joiner.on(GlobalInfo.FLAG_COMMA).join(list));
TabStoreBrand storeBrand = storeBrandService.getByStoreBrandName(t.getEnterpriseId(), brands);
storeDTO.setBrandIds(storeBrand.getStoreBrandId().toString());
}
// 判断省市区
......
......@@ -117,6 +117,12 @@ public class ClerkImportController {
if (file.getSize() > 0) {
String fileName = file.getOriginalFilename();
String uuId = request.getParameter("uuId");
String repeatStoreCodeConfig = request.getParameter("repeatClerkCodeConfig");
if (StringUtils.isBlank(repeatStoreCodeConfig)) {
repeatStoreCodeConfig = "0";
}
//如果门店code重复,是否替换更新
boolean isReplace = "1".equals(repeatStoreCodeConfig);
if (fileName.endsWith("xlsx") || fileName.endsWith("xls")) {
try {
Workbook workbook = ExcelUtils.getWorkbookFromUpload(file.getInputStream(), fileName);
......@@ -128,7 +134,7 @@ public class ClerkImportController {
int logCount = 0;
StringBuilder sb = new StringBuilder();
for (Map<Integer, String> row : data) {
ClerkTmpDTO bean = this.validateData(row, enterpriseId);
ClerkTmpDTO bean = this.validateData(row, enterpriseId, isReplace);
try {
bean.setSignKey(uuId);
// 保存数据到临时表
......@@ -151,8 +157,10 @@ public class ClerkImportController {
LogUtils.createLog("批量导入", sb.toString());
if (clerkImportApiService.hasImportingClerk(enterpriseId).getResult()) {
// userId
Integer userId = UserDetailUtils.getUserDetail().getUserInfo().getUserId();
// 开队列
String r = clerkImportApiService.importDataToClerk(enterpriseId, "123", uuId).getResult();
String r = clerkImportApiService.importDataToClerk(enterpriseId, userId.toString(), uuId, isReplace).getResult();
if (StringUtils.isNotBlank(r)) {
logger.warn("队列错误, {}", r);
return RestResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "网络错误");
......@@ -251,7 +259,7 @@ public class ClerkImportController {
}
private ClerkTmpDTO validateData(Map<Integer, String> row, Integer enterpriseId) {
private ClerkTmpDTO validateData(Map<Integer, String> row, Integer enterpriseId, boolean isReplace) {
boolean validate = true;
ClerkTmpDTO bean = new ClerkTmpDTO();
bean.setEnterpriseId(enterpriseId);
......@@ -354,8 +362,16 @@ public class ClerkImportController {
} else if (StoreOwnTypeEnum.OWNER.getCode() != storeDTO.getOwnType()) {
bean.setErrorMessage("不能在被授权门店下导入导购");
validate = false;
}else if (!isReplace) {
// 验证code唯一
if (clerkImportApiService.validateClerkCode(enterpriseId, storeDTO.getStoreInfoId(), clerkCode).getResult()) {
bean.setErrorMessage("导购编码重复");
validate = false;
}
}
}
// 验证岗位
String positionName = row.get(6);
if (validate) {
......
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