diff --git a/chushang-modules/chushang-module-inspection/inspection-feign/pom.xml b/chushang-modules/chushang-module-inspection/inspection-feign/pom.xml index 1f5899d..89f11e2 100644 --- a/chushang-modules/chushang-module-inspection/inspection-feign/pom.xml +++ b/chushang-modules/chushang-module-inspection/inspection-feign/pom.xml @@ -17,5 +17,9 @@ com.chushang chushang-common-excel + + com.chushang + oss-feign + diff --git a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/dto/TaskDTO.java b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/dto/TaskDTO.java index c47b285..cfa2cb2 100644 --- a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/dto/TaskDTO.java +++ b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/dto/TaskDTO.java @@ -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 */ diff --git a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/po/PollingTask.java b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/po/PollingTask.java index 9c430fe..5a488df 100644 --- a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/po/PollingTask.java +++ b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/po/PollingTask.java @@ -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 diff --git a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/terminal/vo/FiveStoreVO.java b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/terminal/vo/FiveStoreVO.java index 13f2dbf..174daab 100644 --- a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/terminal/vo/FiveStoreVO.java +++ b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/terminal/vo/FiveStoreVO.java @@ -76,7 +76,7 @@ public class FiveStoreVO implements Serializable { */ @JsonIgnore @ExcelIgnore - private Long secondaryBranches; + private Long secondaryBranch; /** * 二级分行编号 diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/PollTaskController.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/PollTaskController.java index 7200620..84efaa3 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/PollTaskController.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/PollTaskController.java @@ -28,7 +28,7 @@ import java.util.List; */ @Slf4j @RestController -@RequestMapping(value = "/task") +@RequestMapping(value = "/inspection/task") public class PollTaskController { @Resource diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/controller/FiveStoreController.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/controller/FiveStoreController.java index c1dce83..03b7ab6 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/controller/FiveStoreController.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/controller/FiveStoreController.java @@ -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); + } + } diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/mapper/FiveStoreMapper.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/mapper/FiveStoreMapper.java index bd0d0d8..035a62d 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/mapper/FiveStoreMapper.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/mapper/FiveStoreMapper.java @@ -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 { + @DataScope(deptAlias = "t") + List pageList(@Param("query") FiveUnifiedStoreDetailsQuery query, + Page page); } diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/service/FiveStoreService.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/service/FiveStoreService.java index aed06d9..ca18d68 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/service/FiveStoreService.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/service/FiveStoreService.java @@ -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{ PageResult pageList(FiveUnifiedStoreDetailsQuery query); + + void download(FiveUnifiedStoreDetailsQuery query, HttpServletResponse response); } diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/service/impl/FiveStoreServiceImpl.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/service/impl/FiveStoreServiceImpl.java index 6561fb6..9249501 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/service/impl/FiveStoreServiceImpl.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/terminal/service/impl/FiveStoreServiceImpl.java @@ -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 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 page = new Page<>(query.getPage(),query.getLimit()); + List 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 export(String params){ + FiveUnifiedStoreDetailsQuery query = JSON.parseObject(params, FiveUnifiedStoreDetailsQuery.class); + List listFiveStores = baseMapper.pageList(query, null); + convert(listFiveStores); + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()){ + ExcelUtils.exportList(outputStream, FiveStoreVO.class, listFiveStores, "五统一商户明细"); + // 上传到oss fileStore 是五统一的商户文件 + Result> listResult = ossService.uploadFile(outputStream.toByteArray(), "五统一商户明细导出.xlsx", false, "", "fileStore", SecurityConstants.INNER); + + if (listResult.isSuccess() && CollectionUtil.isNotEmpty(listResult.getData())){ + List 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 listFiveStores){ + if (CollectionUtil.isNotEmpty(listFiveStores)) + { + // firstLevel + Set firstLevelBranches = listFiveStores.stream().map(FiveStoreVO::getFirstLevelBranch).collect(Collectors.toSet()); + Set secondaryBranches = listFiveStores.stream().map(FiveStoreVO::getSecondaryBranch).collect(Collectors.toSet()); + Set alls = new HashSet<>(); + alls.addAll(firstLevelBranches); + alls.addAll(secondaryBranches); + Map taskMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(alls)){ + List pollingTasks = taskService.listByIds(alls); + taskMap = pollingTasks.stream().collect(Collectors.toMap(PollingTask::getId, pollingTask -> pollingTask, (oldValue, newValue) -> newValue)); + } + Set storeIds = listFiveStores.stream().map(FiveStoreVO::getStoreId).collect(Collectors.toSet()); + Map storeMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(storeIds)){ + List 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()); + } + } + } + } + } diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/resources/mapper/FiveStoreMapper.xml b/chushang-modules/chushang-module-inspection/inspection-service/src/main/resources/mapper/FiveStoreMapper.xml index 51f6245..86475eb 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/resources/mapper/FiveStoreMapper.xml +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/resources/mapper/FiveStoreMapper.xml @@ -10,9 +10,9 @@ - - - + + + @@ -33,4 +33,42 @@ consumption_date, marketer, version, del_state, create_by, create_time, update_by, update_time + + diff --git a/chushang-modules/chushang-module-inspection/pom.xml b/chushang-modules/chushang-module-inspection/pom.xml index 1307b28..def380b 100644 --- a/chushang-modules/chushang-module-inspection/pom.xml +++ b/chushang-modules/chushang-module-inspection/pom.xml @@ -34,6 +34,11 @@ task-feign 1.0.0 + + com.chushang + oss-feign + 1.0.0 +