Commit 8f2a6e88 by zhiwj

门店对外接口

parent 97db5d20
......@@ -37,5 +37,9 @@ public interface StoreImportApiService {
ServiceResponse<List<StoreTmpDTO>> listAllStoreTmp(Integer enterpriseId);
ServiceResponse<List<List<String>>> listError(Integer enterpriseId);
ServiceResponse<Page> pageError(Integer enterpriseId, Integer currentPage, Integer pageSize);
// List<StoreTmpDTO> listStoreTmp(Integer enterpriseId, Boolean isSuccess, Boolean isWait);
}
......@@ -55,4 +55,8 @@ public interface TabStoreExtendMapper {
int updateByPrimaryKey(TabStoreExtend record);
List<TabStoreExtend> list(@Param("enterpriseId") Integer enterpriseId, @Param("storeId") Integer storeId);
TabStoreExtend getStoreExtendByStoreIdAndStoreFieldId(@Param("storeId") Integer storeId, @Param("storeFieldId") Integer storeFieldId);
int countStoreExtendStoreField(@Param("storeField") Integer storeField, @Param("storeFieldSelectId") Integer storeFieldSelectId);
}
\ No newline at end of file
......@@ -5,6 +5,8 @@ import com.gic.store.entity.TabStore;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TabStoreMapper {
/**
* 根据主键删除
......@@ -66,4 +68,6 @@ public interface TabStoreMapper {
Integer countByBrandId(@Param("brandId") Integer brandId);
Page listStore(StoreDTO storeDTO);
List<TabStore> listStoreByRegionAndStatus(@Param("regionIdList") List<Integer> regionIdList,@Param("statusList") List<Integer> statusList);
}
\ No newline at end of file
......@@ -15,4 +15,19 @@ public interface StoreExtendService {
List<TabStoreExtend> listByStoreId(Integer enterpriseId, Integer storeId);
List<StoreExtendDTO> convertStoreExtendToDTO(List<TabStoreExtend> extendList);
TabStoreExtend getStoreExtendByStoreIdAndFieldId(Integer storeId, Integer storeFieldId);
/**
* 判断自定义属性是否在使用
* @return true:在使用 false:不在使用
*/
boolean storeExtendHasStoreField(Integer storeField);
/**
* 判断自定义属性值是否在使用
* @return true:在使用 false:不在使用
*/
boolean storeExtendHasStoreFieldSelect(Integer storeField, Integer storeFieldSelectId);
}
......@@ -4,6 +4,8 @@ import com.gic.store.dto.StoreDTO;
import com.gic.store.entity.TabStore;
import com.github.pagehelper.Page;
import java.util.List;
/**
* @author zhiwj
* @date 2019/6/27
......@@ -54,4 +56,6 @@ public interface StoreService {
Page listStore(StoreDTO storeDTO, Integer pageNum, Integer pageSize);
Integer checkCompleteStatus(StoreDTO storeDTO);
List<TabStore> listStoreByRegionAndStatus(List<Integer> regionIdList, List<Integer> statusList);
}
......@@ -67,4 +67,19 @@ public class StoreExtendServiceImpl implements StoreExtendService {
return Collections.emptyList();
}
}
@Override
public TabStoreExtend getStoreExtendByStoreIdAndFieldId(Integer storeId, Integer storeFieldId) {
return tabStoreExtendMapper.getStoreExtendByStoreIdAndStoreFieldId(storeId, storeFieldId);
}
@Override
public boolean storeExtendHasStoreField(Integer storeField) {
return tabStoreExtendMapper.countStoreExtendStoreField(storeField, null) > 0;
}
@Override
public boolean storeExtendHasStoreFieldSelect(Integer storeField, Integer storeFieldSelectId) {
return tabStoreExtendMapper.countStoreExtendStoreField(storeField, storeFieldSelectId) > 0;
}
}
......@@ -12,7 +12,9 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* @author zhiwj
......@@ -140,4 +142,12 @@ public class StoreServiceImpl implements StoreService {
: GlobalInfo.DATA_STATUS_DELETE
;
}
@Override
public List<TabStore> listStoreByRegionAndStatus(List<Integer> regionIdList, List<Integer> statusList) {
if (CollectionUtils.isEmpty(regionIdList) || CollectionUtils.isEmpty(statusList)) {
return Collections.emptyList();
}
return tabStoreMapper.listStoreByRegionAndStatus(regionIdList, statusList);
}
}
......@@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
......@@ -41,6 +42,9 @@ public class StoreImportApiServiceImpl implements StoreImportApiService {
private StoreService storeService;
@Autowired
private StoreApiService storeApiService;
@Autowired
private StoreImportService storeImportService;
@Autowired
......@@ -115,7 +119,13 @@ public class StoreImportApiServiceImpl implements StoreImportApiService {
@Override
public ServiceResponse<List<StoreTmpDTO>> listStoreTmp(Integer enterpriseId, Boolean isRight) {
return ServiceResponse.success(EntityUtil.changeEntityListByOrika(StoreTmpDTO.class, storeImportService.listStoreTmp(enterpriseId, isRight)));
List<StoreTmpDTO> result = EntityUtil.changeEntityListByOrika(StoreTmpDTO.class, storeImportService.listStoreTmp(enterpriseId, isRight));
for (StoreTmpDTO storeTmpDTO : result) {
String customField = storeTmpDTO.getCustomField();
List<StoreExtendDTO> extendList = storeExtendService.convertStoreExtendToDTO(JSON.parseArray(customField, TabStoreExtend.class));
storeTmpDTO.setExtendList(extendList);
}
return ServiceResponse.success(result);
}
@Override
......@@ -123,6 +133,66 @@ public class StoreImportApiServiceImpl implements StoreImportApiService {
return ServiceResponse.success(EntityUtil.changeEntityListByOrika(StoreTmpDTO.class, storeImportService.listAllStoreTmp(enterpriseId)));
}
@Override
public ServiceResponse<List<List<String>>> listError(Integer enterpriseId) {
List<List<String>> resultList = new LinkedList<>();
List<StoreTmpDTO> dataList = this.listStoreTmp(enterpriseId, Boolean.FALSE).getResult();
// title
// 系统title
// 自定义title
List<String> title = getTitle(enterpriseId, dataList.get(0).getRegionId());
resultList.add(title);
// 数据
// 普通数据
// 自定义数据
for (int i = 0; i < dataList.size(); i++) {
List<String> list = new LinkedList<>();
StoreTmpDTO storeTmpDTO = dataList.get(i);
//{"序号", "门店名称", "门店代码", "门店类型", "门店状态", "门店电话", "门店所属分组", "关联门店品牌", "省", "市", "区县", "门店地址(不包括省市区)", "经度", "纬度"};
list.add(i + 1 + "");
list.add(storeTmpDTO.getStoreName());
list.add(storeTmpDTO.getStoreCode());
list.add(storeTmpDTO.getStoreType());
list.add(storeTmpDTO.getErpStatus());
list.add(storeTmpDTO.getConactsPhone());
list.add(storeTmpDTO.getStoreGroupName());
list.add(storeTmpDTO.getBrands());
list.add(storeTmpDTO.getProvince());
list.add(storeTmpDTO.getCity());
list.add(storeTmpDTO.getCounty());
list.add(storeTmpDTO.getAddress());
list.add(storeTmpDTO.getLongitude());
list.add(storeTmpDTO.getLatitude());
List<StoreExtendDTO> extendList = storeTmpDTO.getExtendList();
if (CollectionUtils.isNotEmpty(extendList)) {
List<String> valueList = extendList.stream().map(StoreExtendDTO::getValue).collect(Collectors.toList());
list.addAll(valueList);
}
list.add(storeTmpDTO.getErrorMessage());
resultList.add(list);
}
return ServiceResponse.success(resultList);
}
private List<String> getTitle(Integer enterpriseId, Integer regionId) {
List<String> titleList = storeApiService.listImportTitle(enterpriseId, regionId).getResult().get(0);
titleList.add("错误信息");
return titleList;
}
@Override
public ServiceResponse<Page> pageError(Integer enterpriseId, Integer currentPage, Integer pageSize) {
List<List<String>> resultList = new LinkedList<>();
Page page = this.listStoreTmp(enterpriseId, Boolean.FALSE, currentPage, pageSize).getResult();
List<StoreTmpDTO> result = page.getResult();
return null;
}
@Override
public ServiceResponse<String> importDataToStore(Integer enterpriseId, String userId, String uuId) {
......@@ -134,13 +204,4 @@ public class StoreImportApiServiceImpl implements StoreImportApiService {
return ServiceResponse.failure(ErrorCode.ERR_3.getCode(), "队列错误");
}
// @Autowired
// TabStoreTmpMapper tabStoreTmpMapper;
//
// @Override
// public List<StoreTmpDTO> listStoreTmp(Integer enterpriseId, Boolean isSuccess, Boolean isWait) {
// return EntityUtil.changeEntityListByOrika(StoreTmpDTO.class, tabStoreTmpMapper.listStoreTmp(enterpriseId, isSuccess, isWait));
// }
}
......@@ -145,4 +145,19 @@
from tab_store_extend
where enterprise_id = #{enterpriseId} and store_id = #{storeId}
</select>
<select id="getStoreExtendByStoreIdAndStoreFieldId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from tab_store_extend
where store_id = #{storeId} and store_field_id = #{storeFieldId}
</select>
<select id="countStoreExtendStoreField" resultType="java.lang.Integer">
select count(1)
from tab_store_extend
where store_field_id = #{storeField}
<if test="storeFieldSelectId != null">
and brand_ids REGEXP '^${storeFieldSelectId}$|^${storeFieldSelectId},.*$|^.*,${storeFieldSelectId},.*$|^.*,${storeFieldSelectId}$'
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -335,4 +335,18 @@
<include refid="Base_Column_List" />
from tab_store
</select>
<select id="listStoreByRegionAndStatus" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from tab_store
where
region_id in
<foreach collection="regionIdList" index="index" item="regionId" open="(" separator="," close=")">
#{regionId}
</foreach>
and status in
<foreach collection="statusList" index="index" item="status" open="(" separator="," close=")">
#{status}
</foreach>
</select>
</mapper>
\ No newline at end of file
......@@ -77,7 +77,9 @@ public class ExcelUtils {
XSSFRow row1 = sheet.createRow(0);
row1.setZeroHeight(true);
XSSFCell cell1 = row1.createCell(0);
cell1.setCellValue(regionIdStr);
if (StringUtils.isNotBlank(regionIdStr)) {
cell1.setCellValue(regionIdStr);
}
XSSFRow rowm = sheet.createRow(1); // 产生表格标题行
XSSFCell cellTiltle = rowm.createCell(0); //创建表格标题列
......@@ -98,20 +100,25 @@ public class ExcelUtils {
cellRowName.setCellValue(text); // 设置列头单元格的值
cellRowName.setCellStyle(columnTopStyle); // 设置列头单元格样式
}
int descriptionNum = description.size(); // 定义所需列数
XSSFRow descriptionRow = sheet.createRow(4); // 在索引2的位置创建行(最顶端的行开始的第二行)
for (int n = 0; n < descriptionNum; n++) {
XSSFCell cellRowName = descriptionRow.createCell(n); // 创建列头对应个数的单元格
cellRowName.setCellType(XSSFCell.CELL_TYPE_STRING); // 设置列头单元格的数据类型
XSSFRichTextString text = new XSSFRichTextString(description.get(n));
cellRowName.setCellValue(text); // 设置列头单元格的值
cellRowName.setCellStyle(columnTopStyle); // 设置列头单元格样式
// 定义数据开始的行数
int dataLine = 4;
if (CollectionUtils.isNotEmpty(description)) {
int descriptionNum = description.size(); // 定义所需列数
XSSFRow descriptionRow = sheet.createRow(dataLine); // 在索引2的位置创建行(最顶端的行开始的第二行)
dataLine++;
for (int n = 0; n < descriptionNum; n++) {
XSSFCell cellRowName = descriptionRow.createCell(n); // 创建列头对应个数的单元格
cellRowName.setCellType(XSSFCell.CELL_TYPE_STRING); // 设置列头单元格的数据类型
XSSFRichTextString text = new XSSFRichTextString(description.get(n));
cellRowName.setCellValue(text); // 设置列头单元格的值
cellRowName.setCellStyle(columnTopStyle); // 设置列头单元格样式
}
}
// 将查询出的数据设置到sheet对应的单元格中
for (int i = 0; i < dataList.size(); i++) {
List<String> obj = dataList.get(i); // 遍历每个对象
XSSFRow row = sheet.createRow(i + 5); // 创建所需的行数
XSSFRow row = sheet.createRow(i + dataLine); // 创建所需的行数
for (int j = 0; j < obj.size(); j++) {
XSSFCell cell = null; // 设置单元格的数据类型
if (j == 0) {
......
......@@ -83,5 +83,4 @@ public class StoreController {
return RestResponse.failure(serviceResponse.getCode(), serviceResponse.getMessage());
}
}
}
\ No newline at end of file
......@@ -68,34 +68,26 @@ public class StoreImportController {
List<List<String>> list = new ArrayList<>();
ServiceResponse<List<List<String>>> titleServiceResponse = storeApiService.listImportTitle(enterpriseId, Integer.parseInt(regionIdStr));
if (titleServiceResponse.isSuccess()) {
List<String> list3 = new ArrayList<>();
Collections.addAll(list3, "1", "杭州测试总店", "A001", "自营", "上线", "12345678912", "杭州门店", "品牌1、品牌2", "浙江省", "杭州市", "西湖区", "华星时代广场", "经度", "纬度");
Collections.addAll(list, list3);
int size = list3.size();
for (int i = 0; i < titleServiceResponse.getResult().get(0).size() - size; i++) {
list3.add(" ");
}
Workbook workbook = ExcelUtils.getWorkbook("门店导入模板", titleServiceResponse.getResult().get(0), titleServiceResponse.getResult().get(1), list, regionIdStr);
String fileName = "门店资料导入模板.xlsx";
byte[] bytesName = fileName.getBytes("UTF-8");
fileName = new String(bytesName, "ISO-8859-1");
response.setHeader("content-disposition", "attachment;fileName=" + fileName);
OutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
return RestResponse.success();
} else {
//
return RestResponse.failure(ErrorCode.ERR_5.getCode(), "网络错误");
// 测试数据
List<String> list3 = new ArrayList<>();
Collections.addAll(list3, "1", "杭州测试总店", "A001", "自营", "上线", "12345678912", "杭州门店", "品牌1、品牌2", "浙江省", "杭州市", "西湖区", "华星时代广场", "经度", "纬度");
Collections.addAll(list, list3);
int size = list3.size();
for (int i = 0; i < titleServiceResponse.getResult().get(0).size() - size; i++) {
list3.add(" ");
}
Workbook workbook = ExcelUtils.getWorkbook("门店导入模板", titleServiceResponse.getResult().get(0), titleServiceResponse.getResult().get(1), list, regionIdStr);
String fileName = "门店资料导入模板.xlsx";
byte[] bytesName = fileName.getBytes("UTF-8");
fileName = new String(bytesName, "ISO-8859-1");
response.setHeader("content-disposition", "attachment;fileName=" + fileName);
OutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
return RestResponse.success();
}
@RequestMapping("/store-tmp-file-upload")
......@@ -164,7 +156,7 @@ public class StoreImportController {
}
} catch (Exception e) {
logger.warn(e);
return RestResponse.failure(ErrorCode.ERR_5.getCode(), "excel验证不通过");
return RestResponse.failure(ErrorCode.ERR_5.getCode(), "异步队列调用失败");
}
} catch (Exception e) {
logger.warn(e);
......@@ -182,7 +174,7 @@ public class StoreImportController {
Integer enterpriseId = 1111;
Map<String, Object> result = new HashMap<String, Object>();
List<StoreTmpDTO> successList = storeImportApiService.listStoreTmp(enterpriseId, true).getResult();
ServiceResponse<Page> serviceResponse = storeImportApiService.listStoreTmp(enterpriseId, false, page.getCurrentPage(), page.getPageSize());
ServiceResponse<Page> serviceResponse = storeImportApiService.pageError(enterpriseId, page.getCurrentPage(), page.getPageSize());
List<StoreTmpDTO> totalList = storeImportApiService.listAllStoreTmp(enterpriseId).getResult();
Page pageResponse = serviceResponse.getResult();
result.put("errorData", pageResponse);
......@@ -192,18 +184,29 @@ public class StoreImportController {
return RestResponse.success(result);
}
@RequestMapping("export-error-data")
public void exportErrorData(HttpServletRequest request, HttpServletResponse response) throws IOException {
@RequestMapping("/export-error-data")
public RestResponse exportErrorData(HttpServletRequest request, HttpServletResponse response) throws IOException {
Integer enterpriseId = 1111;
String fileName = "门店导入错误记录.xlsx";
List<StoreTmpDTO> listErrorData = storeImportApiService.listStoreTmp(enterpriseId, false).getResult();
if (!listErrorData.isEmpty()) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
fileName = sdf.format(listErrorData.get(0).getUpdateTime()) + fileName;
List<List<String>> errorList = storeImportApiService.listError(enterpriseId).getResult();
List<String> titleList = errorList.get(0);
errorList.remove(0);
Workbook workbook = ExcelUtils.getWorkbook("门店导入模板", titleList, null, errorList, null);
byte[] bytesName = fileName.getBytes("UTF-8");
fileName = new String(bytesName, "ISO-8859-1");
response.setHeader("content-disposition", "attachment;fileName=" + fileName);
OutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
return RestResponse.success();
} else {
return;
return RestResponse.failure(ErrorCode.ERR_3.getCode(), "没有错误日志");
}
// todo
}
private StoreTmpDTO validateData(Map<Integer, String> row, Integer enterpriseId, Integer regionId) {
......@@ -416,7 +419,7 @@ public class StoreImportController {
final String erpStatusTmp = erpStatus.replace("\\s+", "");
long count = list.stream().filter(e -> e.getKey().equals(erpStatusTmp)).count();
if (count > 0) {
return (int)count;
return (int) count;
}
}
return -1;
......@@ -429,7 +432,7 @@ public class StoreImportController {
final String storeTypeTmp = storeType.replace("\\s+", "");
long count = list.stream().filter(e -> e.getKey().equals(storeTypeTmp)).count();
if (count > 0) {
return (int)count;
return (int) count;
}
}
return -1;
......
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