diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index c02d966cc..7acb159cd 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -195,7 +195,7 @@ public enum ErrorCodeEnum { AUDIT_RESULT_FALSE(109012, "意向加盟合同API本次调用结果与上一次不一致", null), - TIME_NULL_FALSE(109013, "有时间为空", null), + TIME_NULL_FALSE(109013, "完成时间不能为空", null), UNISSUED_STATEMENT_2(109014, "该门店已发布账单", null), diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/BigRegionDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/BigRegionDAO.java index 7ad2de9cc..aa66093cf 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/BigRegionDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/BigRegionDAO.java @@ -5,10 +5,13 @@ import com.cool.store.entity.BigRegionDO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.mapper.BigRegionMapper; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; import java.util.List; +import java.util.stream.Collectors; /** * @Author suzhuhong @@ -32,4 +35,25 @@ public class BigRegionDAO { return bigRegionMapper.queryOrgInfoByBigRegionAndJoinMode(regionId,joinMode); } + public List getRegionIdByGroupName(List groupNameList){ + if (CollectionUtils.isEmpty(groupNameList)){ + return null; + } + Example example = new Example(BigRegionDO.class); + example.createCriteria().andIn("groupName", groupNameList); + List bigRegionDOS = bigRegionMapper.selectByExample(example); + if (CollectionUtils.isEmpty(bigRegionDOS)){ + return null; + } + return bigRegionDOS.stream().map(BigRegionDO::getRegionId).collect(Collectors.toList()); + } + public List getByRegionIdList(List regionIdList){ + if (CollectionUtils.isEmpty(regionIdList)){ + return null; + } + Example example = new Example(BigRegionDO.class); + example.createCriteria().andIn("regionId", regionIdList); + return bigRegionMapper.selectByExample(example); + } + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java index 752b70974..8eb4faa79 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java @@ -1,6 +1,7 @@ package com.cool.store.dao; import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.FranchiseReportDTO; import com.cool.store.dto.LicenseSyncDTO; import com.cool.store.dto.Preparation.PreparationDTO; import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; @@ -12,11 +13,7 @@ import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.point.ShopStatusEnum; import com.cool.store.exception.ServiceException; import com.cool.store.mapper.ShopInfoMapper; -import com.cool.store.request.BranchShopRequest; -import com.cool.store.request.PlanListRequest; -import com.cool.store.request.PointLinePageRequest; -import com.cool.store.request.PreparationRequest; -import com.cool.store.request.platformBuildListRequest; +import com.cool.store.request.*; import com.cool.store.response.MiniShopsResponse; import com.cool.store.response.PlatformBuildListResponse; import com.cool.store.vo.shop.StageShopCountVO; @@ -290,4 +287,8 @@ public class ShopInfoDAO { example.createCriteria().andIn("shopCode", shopCodeList).andEqualTo("deleted", false); return shopInfoMapper.selectByExample(example); } + + public List getShopFranchiseReportList(FranchiseReportRequest request){ + return shopInfoMapper.getShopFranchiseReportList(request); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java index 9b76e07d2..0855df97c 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java @@ -1,5 +1,6 @@ package com.cool.store.mapper; +import com.cool.store.dto.FranchiseReportDTO; import com.cool.store.dto.LicenseSyncDTO; import com.cool.store.dto.Preparation.PreparationDTO; import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; @@ -7,11 +8,7 @@ import com.cool.store.dto.point.LineCountDTO; import com.cool.store.dto.point.ShopPointDTO; import com.cool.store.entity.PointInfoDO; import com.cool.store.entity.ShopInfoDO; -import com.cool.store.request.BranchShopRequest; -import com.cool.store.request.PlanListRequest; -import com.cool.store.request.PointLinePageRequest; -import com.cool.store.request.PreparationRequest; -import com.cool.store.request.platformBuildListRequest; +import com.cool.store.request.*; import com.cool.store.response.MiniShopsResponse; import com.cool.store.response.PlatformBuildListResponse; import com.cool.store.vo.shop.StageShopCountVO; @@ -114,7 +111,7 @@ public interface ShopInfoMapper extends Mapper { /** * selectAllDataOrByShopId - * @param shopId + * @param * @return */ List selectAllDataOrByLineId(@Param("lineId") Long lineId); @@ -141,4 +138,5 @@ public interface ShopInfoMapper extends Mapper { Integer updateShopCity(@Param("list") List list); + List getShopFranchiseReportList(@Param("request") FranchiseReportRequest request); } diff --git a/coolstore-partner-dao/src/main/resources/mapper/BigRegionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/BigRegionMapper.xml index 494582b8e..105dc4415 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/BigRegionMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/BigRegionMapper.xml @@ -14,6 +14,7 @@ + diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml index 8304935e9..5491d7249 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml @@ -482,6 +482,30 @@ a.create_time >= '2025-04-19 00:00:00' and b.downstream_system_salting is null; + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/FranchiseReportDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/FranchiseReportDTO.java new file mode 100644 index 000000000..5299073c8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/FranchiseReportDTO.java @@ -0,0 +1,19 @@ +package com.cool.store.dto; + +import lombok.Data; + +/** + * @Author: WangShuo + * @Date: 2025/05/13/15:59 + * @Version 1.0 + * @注释: + */ +@Data +public class FranchiseReportDTO { + + private Long shopId; + + private Long regionId; + + private Integer storeType; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/BigRegionDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/BigRegionDO.java index 3ce1077d4..d8cdf1d46 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/BigRegionDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/BigRegionDO.java @@ -57,6 +57,17 @@ public class BigRegionDO { @Column(name = "update_time") private Date updateTime; + //集团名称 + @Column(name = "group_name") + private String groupName; + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } /** * @return id */ diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseReportRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseReportRequest.java new file mode 100644 index 000000000..41c82fbff --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseReportRequest.java @@ -0,0 +1,33 @@ +package com.cool.store.request; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @Author: WangShuo + * @Date: 2025/05/13/15:27 + * @Version 1.0 + * @注释: + */ +@Data +public class FranchiseReportRequest { + + @ApiModelProperty(value = "加盟集团") + private List joinGroupName; + + @ApiModelProperty(value = "加盟分部/片区") + private List regionIds; + + @ApiModelProperty(value = "门店类型") + private List storeTypes; + + @ApiModelProperty(value = "建店完成开始 时间格式 2025-05-01 00:00:00") + private String buildStartTime; + + @ApiModelProperty(value = "建店完成结束时间 时间格式 2025-05-01 23:59:59") + private String buildEndTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseReportResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseReportResponse.java new file mode 100644 index 000000000..1ca3b0361 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseReportResponse.java @@ -0,0 +1,62 @@ +package com.cool.store.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author: WangShuo + * @Date: 2025/05/13/15:30 + * @Version 1.0 + * @注释: + */ +@Data +public class FranchiseReportResponse { + + @ApiModelProperty(value = "加盟集团") + private String joinGroupName; + + @ApiModelProperty(value = "加盟分部/片区") + private String regionName; + + @ApiModelProperty(value = "门店数") + private Integer storeNum = 0; + + @ApiModelProperty(value = "鸡排普通店") + private Integer normalStoreNum = 0; + + @ApiModelProperty(value = "鸡排餐厅店") + private Integer restaurantStoreNum = 0; + + @ApiModelProperty(value = "鸡排无展示门店") + private Integer noShowStoreNum = 0; + + @ApiModelProperty(value = "加盟费") + private BigDecimal franchiseFeeTotal = BigDecimal.ZERO; + + @ApiModelProperty(value = "品牌费") + private BigDecimal firstYearBrandingFeeTotal = BigDecimal.ZERO; + + @ApiModelProperty(value = "管理费") + private BigDecimal firstYearManagementFeeTotal = BigDecimal.ZERO; + + @ApiModelProperty(value = "设计费") + private BigDecimal performanceBondTotal = BigDecimal.ZERO; + + @ApiModelProperty(value = "管理/品牌/设计费") + private BigDecimal managementBrandingDesignFeeTotal = BigDecimal.ZERO; + + @ApiModelProperty(value = "保证金") + private BigDecimal loanMarginTotal = BigDecimal.ZERO; + + @ApiModelProperty(value = "昨日日期") + private String yesterdayDate; + + @ApiModelProperty(value = "昨天门店数") + private Integer yesterdayStoreNum = 0; + + private Long regionId; + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseReportService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseReportService.java new file mode 100644 index 000000000..454eae385 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseReportService.java @@ -0,0 +1,18 @@ +package com.cool.store.service; + +import com.cool.store.request.FranchiseReportRequest; +import com.cool.store.response.FranchiseReportResponse; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @Author: WangShuo + * @Date: 2025/05/13/15:22 + * @Version 1.0 + * @注释: + */ +public interface FranchiseReportService { + + List getFranchiseReport(FranchiseReportRequest request); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseReportServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseReportServiceImpl.java new file mode 100644 index 000000000..cc8daab41 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseReportServiceImpl.java @@ -0,0 +1,102 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.BigRegionDAO; +import com.cool.store.dao.FranchiseFeeDAO; +import com.cool.store.dao.ShopInfoDAO; +import com.cool.store.dto.FranchiseReportDTO; +import com.cool.store.entity.BigRegionDO; +import com.cool.store.entity.FranchiseFeeDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.StoreTypeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.FranchiseFeeMapper; +import com.cool.store.request.FranchiseReportRequest; +import com.cool.store.response.FranchiseReportResponse; +import com.cool.store.service.FranchiseReportService; +import com.cool.store.utils.poi.StringUtils; +import com.github.pagehelper.PageInfo; +import groovy.util.logging.Log4j; +import io.swagger.annotations.ApiModelProperty; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author: WangShuo + * @Date: 2025/05/13/15:22 + * @Version 1.0 + * @注释: + */ +@Slf4j +@Service +public class FranchiseReportServiceImpl implements FranchiseReportService { + @Resource + private BigRegionDAO bigRegionDAO; + @Resource + private ShopInfoDAO shopInfoDAO; + @Resource + private FranchiseFeeMapper franchiseFeeMapper; + + @Override + public List getFranchiseReport(FranchiseReportRequest request) { +// if (StringUtils.isBlank(request.getBuildStartTime()) || StringUtils.isBlank(request.getBuildEndTime())) { +// throw new ServiceException(ErrorCodeEnum.TIME_NULL_FALSE); +// } +// //集团查大区 +// List regionIdByGroupName = bigRegionDAO.getRegionIdByGroupName(request.getJoinGroupName()); +// if (CollectionUtils.isNotEmpty(regionIdByGroupName)) { +// request.getRegionIds().addAll(regionIdByGroupName); +// } +// List shopFranchiseReportList = shopInfoDAO.getShopFranchiseReportList(request); +// if (CollectionUtils.isEmpty(shopFranchiseReportList)) { +// log.info("查询门店数据为空"); +// return null; +// } +// List responseList = new ArrayList<>(); +// List shopIds = shopFranchiseReportList.stream().map(FranchiseReportDTO::getShopId).collect(Collectors.toList()); +// Set regionSet = shopFranchiseReportList.stream().map(FranchiseReportDTO::getRegionId).collect(Collectors.toSet()); +// Map> shopByRegionMap = shopFranchiseReportList.stream().collect(Collectors.groupingBy(FranchiseReportDTO::getRegionId)); +// //加盟费账单 +// List franchiseFeeList = franchiseFeeMapper.getFranchiseFeeByShopIds(shopIds); +// Map franchiseFeeMap = franchiseFeeList.stream().collect(Collectors.toMap(FranchiseFeeDO::getShopId, franchiseFeeDO -> franchiseFeeDO)); +// List bigRegionDOList = bigRegionDAO.getByRegionIdList(new ArrayList<>(regionSet)); +// Map bigRegionDOMap = bigRegionDOList.stream().collect(Collectors.toMap(BigRegionDO::getRegionId, bigRegionDO -> bigRegionDO)); +// Map responseByRegionIdMap = new HashMap<>(); +// +// for (FranchiseReportDTO shopFranchiseReportDTO : shopFranchiseReportList) { +// FranchiseReportResponse response = responseByRegionIdMap.get(shopFranchiseReportDTO.getRegionId()); +// if (response == null){ +// response = new FranchiseReportResponse(); +// } +// if (StoreTypeEnum.NO_SHOW_STORE.getCode().equals(shopFranchiseReportDTO.getStoreType())){ +// response.setNoShowStoreNum(response.getNoShowStoreNum() + 1); +// }else if (StoreTypeEnum.ORDINARY_STORE.getCode().equals(shopFranchiseReportDTO.getStoreType())){ +// response.setNormalStoreNum(response.getNormalStoreNum() + 1); +// }else if (StoreTypeEnum.RESTAURANT_STORE.getCode().equals(shopFranchiseReportDTO.getStoreType())){ +// response.setRestaurantStoreNum(response.getRestaurantStoreNum() + 1); +// } +// response.setStoreNum(response.getStoreNum() + 1); +// FranchiseFeeDO franchiseFeeDO = franchiseFeeMap.get(shopFranchiseReportDTO.getShopId()); +// if (franchiseFeeDO != null){ +// response.setFranchiseFeeTotal(response.getFranchiseFeeTotal().add(new BigDecimal(franchiseFeeDO.getYearFranchiseFee()))); +// response.setLoanMarginTotal(response.getLoanMarginTotal().add(new BigDecimal(franchiseFeeDO.getLoanMargin()))); +// response.setFirstYearManagementFeeTotal(response.getFirstYearManagementFeeTotal().add(new BigDecimal(franchiseFeeDO.getFirstYearManageFee()))); +// response.setFirstYearBrandingFeeTotal(response.getFirstYearBrandingFeeTotal().add(new BigDecimal(franchiseFeeDO.getFirstYearFee()))); +// response.setPerformanceBondTotal(response.getPerformanceBondTotal().add(new BigDecimal(franchiseFeeDO.getPerformanceBond()))); +// response.setManagementBrandingDesignFeeTotal(response.getManagementBrandingDesignFeeTotal() +// .add(new BigDecimal(franchiseFeeDO.getYearFranchiseFee())) +// .add(new BigDecimal(franchiseFeeDO.getFirstYearManageFee())) +// .add(new BigDecimal(franchiseFeeDO.getFirstYearFee())) +// .add(new BigDecimal(franchiseFeeDO.getPerformanceBond()))); +// } +// responseByRegionIdMap.put(shopFranchiseReportDTO.getRegionId(), response); +// } +// + return null; + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseReportController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseReportController.java new file mode 100644 index 000000000..13342ae2a --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseReportController.java @@ -0,0 +1,34 @@ +package com.cool.store.controller.webb; + +import com.cool.store.request.FranchiseReportRequest; +import com.cool.store.response.FranchiseReportResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.FranchiseReportService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author: WangShuo + * @Date: 2025/05/13/15:46 + * @Version 1.0 + * @注释: + */ +@RestController +@RequestMapping("/pc/franchiseReport") +@Api(tags = "PC端加盟报表") +public class PCFranchiseReportController { + @Resource + private FranchiseReportService franchiseReportService; + + @RequestMapping("/getList") + @ApiOperation("正新鸡排开店") + public ResponseResult> getList(@RequestBody FranchiseReportRequest request) { + return ResponseResult.success( franchiseReportService.getFranchiseReport(request)); + } +}