Commit 5e0510f7 by 陶光胜

Merge branch 'developer' of http://115.159.76.241/base_platform_enterprise/gic-store into developer

parents 2d10c494 a1199fa5
......@@ -66,6 +66,7 @@ public class ClerkDTO implements Serializable {
private String remark;
private Integer operatorId;
private String operatorName;
private String storeName;
public Integer getClerkId() {
return clerkId;
......@@ -178,4 +179,12 @@ public class ClerkDTO implements Serializable {
public void setOperatorName(String operatorName) {
this.operatorName = operatorName;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
}
package com.gic.store.dto;
import java.io.Serializable;
import java.util.List;
/**
*
......@@ -18,6 +19,12 @@ public class ClerkSearchDTO implements Serializable {
private Integer currentPage=1;
private Integer pageSize=20;
private String fileName;
private Integer excelExtension;
private List<String> fieldCodeList;
private Integer dataType;
public String getSearch() {
return search;
}
......@@ -73,4 +80,36 @@ public class ClerkSearchDTO implements Serializable {
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public List<String> getFieldCodeList() {
return fieldCodeList;
}
public void setFieldCodeList(List<String> fieldCodeList) {
this.fieldCodeList = fieldCodeList;
}
public Integer getExcelExtension() {
return excelExtension;
}
public void setExcelExtension(Integer excelExtension) {
this.excelExtension = excelExtension;
}
public Integer getDataType() {
return dataType;
}
public void setDataType(Integer dataType) {
this.dataType = dataType;
}
}
......@@ -40,6 +40,18 @@ public interface ClerkApiService {
ServiceResponse<Page<ClerkStoreListDTO>> listClerk(Integer enterpriseId, ClerkSearchDTO clerkSearchDTO, Integer pageNum, Integer pageSize);
/**
* 获取clerk总数
* @Title: getTotalClerk
* @Description:
* @author zhiwj
* @param enterpriseId
* @param clerkSearchDTO
* @return com.gic.api.base.commons.ServiceResponse<java.lang.Integer>
* @throws
*/
ServiceResponse<Integer> getTotalClerk(Integer enterpriseId, ClerkSearchDTO clerkSearchDTO);
/**
* 批量修改状态
* @Title: updateClerkStatus
* @Description: 批量修改导购状态
......@@ -63,4 +75,5 @@ public interface ClerkApiService {
* @throws
*/
ServiceResponse<List<ClerkDTO>> listClerkByIds(Integer enterpriseId, String clerkIds);
}
......@@ -60,6 +60,8 @@ public interface TabClerkMapper {
List<TabClerk> listClerkByStoreInfoId(@Param("enterpriseId") Integer enterpriseId, @Param("storeClerkIds") List<Integer> storeClerkIds, @Param("search") String search);
Integer getTotalClerk(@Param("enterpriseId") Integer enterpriseId, @Param("storeClerkIds") List<Integer> storeClerkIds, @Param("search") String search);
List<Integer> getStoreInfoIdsBySearch(@Param("enterpriseId") Integer enterpriseId, @Param("search") String search);
Integer updateClerkStatus(@Param("enterpriseId") Integer enterpriseId,@Param("clerkIds") List<Integer> clerkIds, @Param("status") Integer status);
......@@ -67,4 +69,6 @@ public interface TabClerkMapper {
TabClerk getBySelective(TabClerk tabClerk);
List<TabClerk> listClerkByIds(@Param("enterpriseId") Integer enterpriseId, @Param("ids") List<Integer> clerkIdList);
}
\ No newline at end of file
......@@ -79,7 +79,8 @@ public interface ClerkService {
* @throws
*/
List<TabClerk> listClerkByStoreInfoId(Integer enterpriseId, List<Integer> storeIds, String search);
Integer getTotalClerk(Integer enterpriseId, List<Integer> storeInfoIds, String search);
/**
* @Title: getStoreInfoIdsBySearch
* @Description: 查询符合条件的门店id
......@@ -106,4 +107,6 @@ public interface ClerkService {
List<TabClerk> listClerkByIds(Integer enterpriseId, String clerkIds);
TabClerk getById(Integer clerkId);
}
......@@ -89,6 +89,11 @@ public class ClerkServiceImpl implements ClerkService {
}
@Override
public Integer getTotalClerk(Integer enterpriseId, List<Integer> storeInfoIds, String search) {
return tabClerkMapper.getTotalClerk(enterpriseId, storeInfoIds, search);
}
@Override
public List<Integer> getStoreInfoIdsBySearch(Integer enterpriseId, String search) {
return tabClerkMapper.getStoreInfoIdsBySearch(enterpriseId, search);
}
......
......@@ -147,6 +147,38 @@ public class ClerkApiServiceImpl implements ClerkApiService {
return ServiceResponse.success(resultPage);
}
@Override
public ServiceResponse<Integer> getTotalClerk(Integer enterpriseId, ClerkSearchDTO clerkSearchDTO) {
if (clerkSearchDTO.getStoreGroupId() == null) {
return ServiceResponse.failure(ErrorCode.MISS_PARAMETER.getCode(), ErrorCode.MISS_PARAMETER.getMsg());
}
// 分组的id
List<TabStoreGroup> groupList = storeGroupService.listStoreGroupAndChildren(clerkSearchDTO.getStoreGroupId());
List<Integer> groupIds = groupList.stream().map(TabStoreGroup::getStoreGroupId).collect(Collectors.toList());
// 查询条件对应的storeId
String storeIdByClerkSearch;
if (StringUtils.isNotBlank(clerkSearchDTO.getSearch())) {
List<Integer> storeInfoIdsBySearch = clerkService.getStoreInfoIdsBySearch(enterpriseId, clerkSearchDTO.getSearch());
if (CollectionUtils.isEmpty(groupIds) || CollectionUtils.isEmpty(storeInfoIdsBySearch)) {
return ServiceResponse.success();
}
storeIdByClerkSearch = getStoreIdByStoreInfoIds(storeInfoIdsBySearch);
} else {
storeIdByClerkSearch = "";
}
clerkSearchDTO.setEnterpriseId(enterpriseId);
clerkSearchDTO.setStoreIds(storeIdByClerkSearch);
ServiceResponse<Page<StoreDTO>> serviceResponse = listStoreIds(clerkSearchDTO, 1, Integer.MAX_VALUE);
if (!serviceResponse.isSuccess()) {
return ServiceResponse.failure(serviceResponse.getCode(), serviceResponse.getMessage());
}
Page<StoreDTO> page = serviceResponse.getResult();
List<Integer> storeInfoIds = page.getResult().stream().map(StoreDTO::getStoreInfoId).collect(Collectors.toList());
Integer totalClerk = clerkService.getTotalClerk(enterpriseId, storeInfoIds, clerkSearchDTO.getSearch());
return ServiceResponse.success(totalClerk);
}
private String getStoreIdByStoreInfoIds(List<Integer> storeInfoIdsBySearch) {
StoreSearchDBDTO storeSearchDBDTO = new StoreSearchDBDTO();
storeSearchDBDTO.setStoreInfoIdList(storeInfoIdsBySearch);
......
......@@ -222,6 +222,21 @@
and (clerk_code like concat('%', #{search} ,'%') or clerk_name like concat('%', #{search} ,'%') )
</if>
</select>
<select id="getTotalClerk" resultType="int">
select
count(*)
from tab_clerk
where enterprise_id = #{enterpriseId}
<if test="null != storeClerkIds and storeClerkIds.size() &gt; 0">
and store_info_id in
<foreach close=")" collection="storeClerkIds" index="index" item="item" open="(" separator=",">
#{item}
</foreach>
</if>
<if test="search != null and search != '' ">
and (clerk_code like concat('%', #{search} ,'%') or clerk_name like concat('%', #{search} ,'%') )
</if>
</select>
<select id="getStoreInfoIdsBySearch" resultType="java.lang.Integer">
select
distinct store_info_id
......
package com.gic.store.web.controller;
import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.auth.dto.MenuDTO;
import com.gic.auth.service.MenuApiService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.download.utils.DataDownloadUtils;
import com.gic.download.utils.DownloadReport;
import com.gic.download.utils.DownloadUtils;
import com.gic.download.utils.ExecutorPoolSingleton;
import com.gic.download.utils.log.LogUtils;
import com.gic.enterprise.constants.Constants;
import com.gic.enterprise.context.RequestContext;
import com.gic.enterprise.error.ErrorCode;
import com.gic.enterprise.utils.ResultControllerUtils;
import com.gic.enterprise.utils.UserDetailUtils;
import com.gic.store.constant.ClerkLogReasonEnum;
import com.gic.store.dto.ClerkDTO;
import com.gic.store.dto.ClerkLogDTO;
import com.gic.store.dto.ClerkSearchDTO;
import com.gic.store.dto.ClerkStoreListDTO;
import com.gic.store.service.ClerkApiService;
import com.gic.store.service.ClerkLogApiService;
import com.gic.store.web.qo.PageQO;
import com.gic.store.web.qo.clerk.ClerkQO;
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;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
* @author zhiwj
* @date 2019/7/16
*/
@RestController
public class ClerkController {
public class ClerkController extends DownloadUtils {
private Logger logger = LogManager.getLogger(ClerkController.class);
@Autowired
private ClerkApiService clerkApiService;
@Autowired
private ClerkLogApiService clerkLogApiService;
@Autowired
private MenuApiService menuApiService;
@RequestMapping("/list-clerk-field")
public RestResponse listClerkField() {
//language=JSON
String json = "[{\"fliedName\":\"店员名称\",\"fliedCode\":\"clerkName\"},{\"fliedName\":\"店员唯一关联主键\",\"fliedCode\":\"clerkCode\"},{\"fliedName\":\"职位\",\"fliedCode\":\"positionName\"},{\"fliedName\":\"性别\",\"fliedCode\":\"clerkGender\"},{\"fliedName\":\"国际码\",\"fliedCode\":\"nationcode\"},{\"fliedName\":\"手机号\",\"fliedCode\":\"phoneNumber\"},{\"fliedName\":\"好办状态\",\"fliedCode\":\"haobanStatus\"},{\"fliedName\":\"启用状态\",\"fliedCode\":\"status\"}]";
return RestResponse.success(JSON.parseArray(json));
ClerkFiledEnum[] values = ClerkFiledEnum.values();
List<Map<String, Object>> arrayList = new ArrayList<>(values.length);
for (ClerkFiledEnum value : values) {
Map<String, Object> hashMap = new HashMap<>(4);
hashMap.put("fieldCode", value.getFieldCode());
hashMap.put("fieldName", value.getFieldName());
hashMap.put("needEncrypt", value.getNeedEncrypt());
arrayList.add(hashMap);
}
return RestResponse.success(arrayList);
}
@RequestMapping("/export-clerk")
public RestResponse exportClerk(HttpServletRequest request, @RequestBody ClerkSearchDTO clerkSearchDTO) {
clerkSearchDTO.setEnterpriseId(UserDetailUtils.getUserDetail().getEnterpriseId());
ServiceResponse<Integer> totalClerkServiceResponse = clerkApiService.getTotalClerk(UserDetailUtils.getUserDetail().getEnterpriseId(), clerkSearchDTO);
if (totalClerkServiceResponse.getResult() == 0) {
return RestResponse.failure(ErrorCode.NOTEXISTS.getCode(), ErrorCode.NOTEXISTS.getMsg());
}
List<String> fieldCodeList = clerkSearchDTO.getFieldCodeList();
List<String> fieldNameList = new ArrayList<>(fieldCodeList.size());
for (String fieldCode: fieldCodeList) {
String fieldName = ClerkFiledEnum.valueOf(fieldCode).getFieldName();
fieldNameList.add(fieldName);
}
// 开始下载
String dataContent = getDataContent();
// 生成入参数据
DownloadReport report = new DownloadReport();
//申请人ID
report.setApplyUserId(UserDetailUtils.getUserDetail().getUserId());
//数据源(频道页),用 "-" 隔开上级和本级
report.setDataContent(dataContent);
//待下载数据的数据总量
report.setDataCount(totalClerkServiceResponse.getResult());
//报告类型 1:完整数据, 2:脱敏数据, 3:二维码
report.setDataType(clerkSearchDTO.getDataType());
//数据源超链接,用于点击跳转对应频道页面
report.setDataUrl((String) RequestContext.getContext().getRequest().getAttribute("moduleMenuUrl"));
report.setEnterpriseId(UserDetailUtils.getUserDetail().getEnterpriseId());
//待下载文件名
report.setFileName(clerkSearchDTO.getFileName());
//待下载数据的结束时间
report.setReportEndTime(null);
//待下载数据的开始时间
report.setReportStartTime(null);
//调用生成方法,获取reportId
Integer reportId = DataDownloadUtils.createDownloadReport(report);
String path = request.getSession().getServletContext().getRealPath("/excel/csv/collaborator/file/");
//CollaboratorListDTO是分页接口的返回类,不同业务场景对应不同的返回类
ExecutorPoolSingleton.getInstance().executeTask(() -> {
DownloadDataLoader<ClerkDTO> loader = new DownloadDataLoader<ClerkDTO>() {
@Override
protected List<ClerkDTO> getDownloadData(Integer pageNum) throws Exception {
//调用分页查询接口
ServiceResponse<Page<ClerkStoreListDTO>> result = clerkApiService.listClerk(clerkSearchDTO.getEnterpriseId(), clerkSearchDTO, pageNum, 500);
List<ClerkStoreListDTO> clerkStoreList = result.getResult().getResult();
List<ClerkDTO> clerkDTOS = new ArrayList<>();
for (ClerkStoreListDTO clerkStoreListDTO : clerkStoreList) {
List<ClerkDTO> clerkList = clerkStoreListDTO.getClerkList();
for (ClerkDTO clerkDTO : clerkList) {
clerkDTO.setStoreName(clerkStoreListDTO.getStoreName());
}
clerkDTOS.addAll(clerkList);
}
return clerkDTOS;
}
};
try {
//参数说明:excelExtensionCode,Excel后缀名code ,枚举类:ExcelExtensionEnum, Arrays.asList("phone")这个phone是需要加密的字段
download(path, reportId, clerkSearchDTO.getFileName(), clerkSearchDTO.getExcelExtension(), fieldNameList, fieldCodeList, loader, Arrays.asList("phoneNumber"), null);
} catch (Exception e) {
logger.warn("下载错误", e);
}
});
return RestResponse.success();
}
private String getDataContent() {
String dataContent;
Integer moduleMenuId = (Integer) RequestContext.getContext().getRequest().getAttribute("moduleMenuId");
ServiceResponse<MenuDTO> response = menuApiService.getDetailById(moduleMenuId);
MenuDTO menuDTO = response.getResult();
ServiceResponse<MenuDTO> parentResponse = menuApiService.getDetailById(menuDTO.getParentId());
MenuDTO parentMenuDTO = parentResponse.getResult();
if (parentMenuDTO != null) {
dataContent = parentMenuDTO.getMenuName() + "-" + menuDTO.getMenuName();
} else {
dataContent = menuDTO.getMenuName();
}
return dataContent;
}
@RequestMapping("/save-clerk")
......@@ -108,4 +217,35 @@ public class ClerkController {
return ResultControllerUtils.commonResult(response);
}
enum ClerkFiledEnum{
storeName("storeName", "所属门店", 0),
clerkName("clerkName", "店员名称", 0),
positionName("positionName", "职位", 0),
phoneNumber("phoneNumber", "手机号", 1),
haobanStatus("haobanStatus", "好办状态", 0);
;
private String fieldCode;
private String fieldName;
private Integer needEncrypt;
ClerkFiledEnum(String fieldCode, String fieldName, Integer needEncrypt) {
this.fieldCode = fieldCode;
this.fieldName = fieldName;
this.needEncrypt = needEncrypt;
}
public String getFieldCode() {
return fieldCode;
}
public String getFieldName() {
return fieldName;
}
public Integer getNeedEncrypt() {
return needEncrypt;
}
}
}
......@@ -48,4 +48,6 @@
<dubbo:reference interface="com.gic.enterprise.service.DownloadReportApiService" id="downloadReportApiService" timeout="6000"/>
<dubbo:reference interface="com.gic.enterprise.service.EnterpriseInitApiService" id="enterpriseInitApiService" timeout="6000"/>
<dubbo:reference interface="com.gic.auth.service.MenuApiService" id="menuApiService" 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