1. 五统一商户信息

This commit is contained in:
zhaowenyuan 2024-06-24 14:57:43 +08:00
parent 60c4529638
commit 0e8ada017c
11 changed files with 228 additions and 7 deletions

View File

@ -17,5 +17,9 @@
<groupId>com.chushang</groupId>
<artifactId>chushang-common-excel</artifactId>
</dependency>
<dependency>
<groupId>com.chushang</groupId>
<artifactId>oss-feign</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -23,6 +23,9 @@ public class TaskDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@NotNull(message = "任务所属项目id不能为空", groups = {Create.class, Update.class})
private Long projectId;
/**
* 上级ID
*/

View File

@ -32,6 +32,11 @@ public class PollingTask extends BaseEntity {
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 项目id
*/
@TableField(value = "project_id")
private Long projectId;
/**
* 上级id

View File

@ -76,7 +76,7 @@ public class FiveStoreVO implements Serializable {
*/
@JsonIgnore
@ExcelIgnore
private Long secondaryBranches;
private Long secondaryBranch;
/**
* 二级分行编号

View File

@ -28,7 +28,7 @@ import java.util.List;
*/
@Slf4j
@RestController
@RequestMapping(value = "/task")
@RequestMapping(value = "/inspection/task")
public class PollTaskController {
@Resource

View File

@ -1,6 +1,8 @@
package com.chushang.inspection.terminal.controller;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.log.enums.BusinessType;
import com.chushang.inspection.terminal.query.FiveUnifiedStoreDetailsQuery;
import com.chushang.inspection.terminal.service.FiveStoreService;
import com.chushang.security.annotation.RequiresPermissions;
@ -9,6 +11,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
/**
* 五统一商户明细(内蒙古建行随付贷)(st_five_store)表控制层
@ -32,5 +35,14 @@ public class FiveStoreController {
return AjaxResult.success(fiveStoreService.pageList(query));
}
/**
* 下载五统一商户明细内蒙古建行随付贷
*/
@GetMapping("/download")
@SysLog(value = "五统一商户明细(内蒙古建行随付贷)", businessType = BusinessType.EXPORT)
public void download(@Validated FiveUnifiedStoreDetailsQuery query, HttpServletResponse response) {
fiveStoreService.download(query, response);
}
}

View File

@ -1,11 +1,21 @@
package com.chushang.inspection.terminal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chushang.datascope.annotation.DataScope;
import com.chushang.inspection.terminal.po.FiveStore;
import com.chushang.inspection.terminal.query.FiveUnifiedStoreDetailsQuery;
import com.chushang.inspection.terminal.vo.FiveStoreVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @auther: zhao
* @date: 2024/6/21 16:39
*/
public interface FiveStoreMapper extends BaseMapper<FiveStore> {
@DataScope(deptAlias = "t")
List<FiveStoreVO> pageList(@Param("query") FiveUnifiedStoreDetailsQuery query,
Page<FiveStoreVO> page);
}

View File

@ -5,6 +5,8 @@ import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.inspection.terminal.po.FiveStore;
import com.chushang.inspection.terminal.query.FiveUnifiedStoreDetailsQuery;
import javax.servlet.http.HttpServletResponse;
/**
* @auther: zhao
* @date: 2024/6/21 16:39
@ -13,4 +15,6 @@ public interface FiveStoreService extends IService<FiveStore>{
PageResult pageList(FiveUnifiedStoreDetailsQuery query);
void download(FiveUnifiedStoreDetailsQuery query, HttpServletResponse response);
}

View File

@ -1,25 +1,165 @@
package com.chushang.inspection.terminal.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.URLUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chushang.common.core.constant.SecurityConstants;
import com.chushang.common.core.util.FileUtils;
import com.chushang.common.core.web.Result;
import com.chushang.common.excel.utils.ExcelUtils;
import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.datascope.annotation.DataScope;
import com.chushang.inspection.project.po.PollingTask;
import com.chushang.inspection.project.service.PollingTaskService;
import com.chushang.inspection.terminal.po.FiveStore;
import com.chushang.inspection.terminal.po.Store;
import com.chushang.inspection.terminal.query.FiveUnifiedStoreDetailsQuery;
import com.chushang.inspection.terminal.service.FiveStoreService;
import com.chushang.inspection.terminal.service.StoreService;
import com.chushang.inspection.terminal.vo.FiveStoreVO;
import com.chushang.oss.config.UploadConfig;
import com.chushang.oss.entity.vo.FileSourceVo;
import com.chushang.oss.feign.RemoteOssService;
import com.chushang.security.utils.SecurityUtils;
import com.chushang.task.entity.dto.CreateTaskDTO;
import com.chushang.task.enums.ServiceEnum;
import com.chushang.task.enums.TaskTypeEnum;
import com.chushang.task.feign.RemoteTaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chushang.inspection.terminal.mapper.FiveStoreMapper;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/**
* 五统一商户 -- 只有建行内蒙古有
* @auther: zhao
* @date: 2024/6/21 16:39
*/
@Slf4j
@Service
public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore> implements FiveStoreService {
@Resource
PollingTaskService taskService;
@Resource
StoreService storeService;
@Resource
RemoteTaskService remoteTaskService;
@Resource
RemoteOssService ossService;
/**
* 需要使用 代码进行补偿
* s.store_name,
* pt1.number firstLevelBranchNumber,
* pt1.`name` firstLevelBranchName,
*
* pt2.number secondaryBranchesNumber,
* pt2.`name` secondaryBranchesName,
*/
@Override
@DataScope
public PageResult pageList(FiveUnifiedStoreDetailsQuery query) {
return null;
Page<FiveStoreVO> page = new Page<>(query.getPage(),query.getLimit());
List<FiveStoreVO> listFiveStores = baseMapper.pageList(query, page);
convert(listFiveStores);
return new PageResult(
listFiveStores,
page.getTotal(),
page.getPages(),
page.getCurrent());
}
@Override
public void download(FiveUnifiedStoreDetailsQuery query, HttpServletResponse response) {
remoteTaskService.createTask(CreateTaskDTO.builder()
.params(JSON.toJSONString(query))
.taskName("五统一商户明细导出")
.applicationName(ServiceEnum.INSPECTION)
.methodName("export")
.className(this.getClass().getName())
.deptId(SecurityUtils.getDeptId())
.taskType(TaskTypeEnum.DOWN)
.remark("五统一商户明细导出")
.createBy(SecurityUtils.getUsername())
.build(), SecurityConstants.INNER);
}
public Result<String> export(String params){
FiveUnifiedStoreDetailsQuery query = JSON.parseObject(params, FiveUnifiedStoreDetailsQuery.class);
List<FiveStoreVO> listFiveStores = baseMapper.pageList(query, null);
convert(listFiveStores);
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()){
ExcelUtils.exportList(outputStream, FiveStoreVO.class, listFiveStores, "五统一商户明细");
// 上传到oss fileStore 是五统一的商户文件
Result<List<FileSourceVo>> listResult = ossService.uploadFile(outputStream.toByteArray(), "五统一商户明细导出.xlsx", false, "", "fileStore", SecurityConstants.INNER);
if (listResult.isSuccess() && CollectionUtil.isNotEmpty(listResult.getData())){
List<FileSourceVo> data = listResult.getData();
FileSourceVo fileSourceVo = data.get(0);
String filePath = fileSourceVo.getFilePath();
return Result.ok(filePath);
}else {
log.error("生成文件异常, {}, {}", listResult.getCode(), listResult.getMsg());
return Result.failed(listResult.getCode(), listResult.getMsg());
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void convert(List<FiveStoreVO> listFiveStores){
if (CollectionUtil.isNotEmpty(listFiveStores))
{
// firstLevel
Set<Long> firstLevelBranches = listFiveStores.stream().map(FiveStoreVO::getFirstLevelBranch).collect(Collectors.toSet());
Set<Long> secondaryBranches = listFiveStores.stream().map(FiveStoreVO::getSecondaryBranch).collect(Collectors.toSet());
Set<Long> alls = new HashSet<>();
alls.addAll(firstLevelBranches);
alls.addAll(secondaryBranches);
Map<Long, PollingTask> taskMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(alls)){
List<PollingTask> pollingTasks = taskService.listByIds(alls);
taskMap = pollingTasks.stream().collect(Collectors.toMap(PollingTask::getId, pollingTask -> pollingTask, (oldValue, newValue) -> newValue));
}
Set<Long> storeIds = listFiveStores.stream().map(FiveStoreVO::getStoreId).collect(Collectors.toSet());
Map<Long, Store> storeMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(storeIds)){
List<Store> stores = storeService.listByIds(storeIds);
storeMap = stores.stream().collect(Collectors.toMap(Store::getStoreId, store -> store, (oldValue, newValue) -> newValue));
}
for (FiveStoreVO listFiveStore : listFiveStores) {
Long storeId = listFiveStore.getStoreId();
Store store = storeMap.get(storeId);
if (ObjectUtil.isNotEmpty(store)){
listFiveStore.setStoreName(store.getStoreName());
}
Long firstLevelBranch = listFiveStore.getFirstLevelBranch();
Long secondaryBranch = listFiveStore.getSecondaryBranch();
PollingTask firstPollingTask = taskMap.get(firstLevelBranch);
if (ObjectUtil.isNotEmpty(firstPollingTask)){
listFiveStore.setFirstLevelBranchNumber(firstPollingTask.getNumber());
listFiveStore.setFirstLevelBranchName(firstPollingTask.getName());
}
PollingTask secondPollingTask = taskMap.get(secondaryBranch);
if (ObjectUtil.isNotEmpty(secondPollingTask)){
listFiveStore.setFirstLevelBranchNumber(secondPollingTask.getNumber());
listFiveStore.setFirstLevelBranchName(secondPollingTask.getName());
}
}
}
}
}

View File

@ -10,9 +10,9 @@
<result column="dept_id" jdbcType="BIGINT" property="deptId" />
<result column="first_level_branch" jdbcType="BIGINT" property="firstLevelBranch" />
<result column="secondary_branches" jdbcType="BIGINT" property="secondaryBranches" />
<result column="logo_of_newly_signed_merchants_that_year" jdbcType="TINYINT" property="logoOfNewlySignedMerchantsThatYear" />
<result column="logo_of_newly_signed_merchants_of_the_month" jdbcType="TINYINT" property="logoOfNewlySignedMerchantsOfTheMonth" />
<result column="logo_of_newly_signed_merchants_on_the_day" jdbcType="TINYINT" property="logoOfNewlySignedMerchantsOnTheDay" />
<result column="new_year" jdbcType="TINYINT" property="newYear" />
<result column="new_month" jdbcType="TINYINT" property="newMonth" />
<result column="new_day" jdbcType="TINYINT" property="newDay" />
<result column="client_name" jdbcType="VARCHAR" property="clientName" />
<result column="customer_id" jdbcType="TINYINT" property="customerId" />
<result column="marketing_date" jdbcType="TIMESTAMP" property="marketingDate" />
@ -33,4 +33,42 @@
consumption_date, marketer, version, del_state, create_by, create_time, update_by,
update_time
</sql>
<select id="pageList" resultType="com.chushang.inspection.terminal.vo.FiveStoreVO">
SELECT
t.terminal_id AS terminalId,
fs.five_id AS fiveId,
fs.first_level_branch AS firstLevelBranch,
fs.secondary_branches AS secondaryBranch,
t.terminal_no AS terminalNo,
fs.store_id AS storeId,
t.store_no AS storeNo,
fs.new_year AS logoOfNewlySignedMerchantsThatYear,
fs.new_month AS logoOfNewlySignedMerchantsOfTheMonth,
fs.new_day AS logoOfNewlySignedMerchantsOnTheDay,
fs.client_name AS clientName,
fs.marketing_date AS marketingDate,
fs.consumption_date AS consumptionDate,
fs.marketer AS marketer
FROM st_terminal t
LEFT JOIN st_five_store fs ON t.terminal_id= fs.terminal_id
WHERE 1 = 1
<if test="query.terminalNo != null and query.terminalNo != ''">
AND t.terminal_no = #{query.terminalNo}
</if>
<if test="query.no != null and query.no != ''">
AND t.store_no = #{query.no}
</if>
<if test="query.firstLevelBranch != null">
AND fs.first_level_branch = #{query.firstLevelBranch}
</if>
<if test="query.secondaryBranches != null AND query.secondaryBranches.size > 0 ">
AND fs.secondary_branches IN
<foreach collection="query.secondaryBranches" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
${query.sqlParam.dataScpoe}
ORDER BY #{query.orderBy} #{query.isAsc}
</select>
</mapper>

View File

@ -34,6 +34,11 @@
<artifactId>task-feign</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.chushang</groupId>
<artifactId>oss-feign</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>