Merge #111 into master from cc_20260417_bonus

fix:工资奖金

* cc_20260417_bonus: (28 commits squashed)

  - feat:工资奖金发放

  - fix:工资奖金发放

  - fix:工资奖金发放

  - fix:工资奖金发放

  - fix:工资奖金发放

  - fix:门店实收相关接口

  - fix:新品销售门店级接口

  - fix:新品销售菜品列表接口;规则新增返回id

  - fix:新品销售菜品详情接口

  - fix:新品销售菜品接口补充

  - fix:小程序接口补充

  - fix

  - fix:新增实收、新品销售测试接口

  - fix:新增实收、新品销售测试接口

  - fix

  - fix:新增门店菜品列表接口

  - fix:同规则下无法新增相同菜品规则;新增小程序门店列表接口

  - fix

  - fix:小程序用户获取来源修改

  - fix:实收规则新增上月日均实收字段

  - fix:规则限制

  - fix:小程序上月日均实收

  - fix:查询异常

  - fix:查询异常

  - fix:菜品员工明细字段赋值异常

  - fix:排序

  - fix:排序

  - fix:员工实收列表新增门店筛选条件

Signed-off-by: 王非凡 <accounts_67eba0c5fee9c49c80c8e2b4@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>

CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/111
This commit is contained in:
王非凡
2026-04-27 10:41:08 +00:00
committed by 正新
parent 97f8a8669c
commit 22fcfc6a90
95 changed files with 5466 additions and 8 deletions

View File

@@ -0,0 +1,164 @@
package com.cool.store.controller.webb;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.request.bonus.*;
import com.cool.store.response.ResponseResult;
import com.cool.store.response.storeopen.StoreRecipesResponse;
import com.cool.store.service.bonus.BonusService;
import com.cool.store.vo.bonus.*;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* <p>
* 工资奖金发放 前端控制器
* </p>
*
* @author wangff
* @since 2026/4/21
*/
@Api(tags = "工资奖金发放")
@RestController
@RequestMapping("/pc/bonus")
@RequiredArgsConstructor
public class BonusController {
private final BonusService bonusService;
@ApiOperation("新增规则")
@PostMapping("/addRule")
public ResponseResult<String> addRule(@RequestBody @Validated BonusRuleAddRequest request) {
return ResponseResult.success(bonusService.addRule(request, CurrentUserHolder.getUserId()));
}
@ApiOperation("编辑规则")
@PostMapping("/updateRule")
public ResponseResult<Boolean> updateRule(@RequestBody @Validated BonusRuleUpdateRequest request) {
return ResponseResult.success(bonusService.updateRule(request, CurrentUserHolder.getUserId()));
}
@ApiOperation("启用规则")
@PostMapping("/enableRule")
public ResponseResult<Boolean> enableRule(@RequestBody @Validated BonusRuleEnableRequest request) {
return ResponseResult.success(bonusService.enableRule(request));
}
@ApiOperation("规则详情")
@GetMapping("/ruleDetail")
@ApiImplicitParam(name = "ruleId", value = "规则id", required = true, dataType = "Long", paramType = "query")
public ResponseResult<BonusRuleVO> getRuleDetail(@NotNull(message = "规则id不能为空") Long ruleId) {
return ResponseResult.success(bonusService.getRuleDetail(ruleId));
}
@ApiOperation("规则列表查询")
@PostMapping("/list")
public ResponseResult<PageInfo<BonusRuleListVO>> getList(@RequestBody BonusRuleQueryRequest request) {
return ResponseResult.success(bonusService.getList(request));
}
@ApiOperation("实收实算")
@PostMapping("/receivedCompute")
public ResponseResult<BonusReceivedComputeVO> receivedCompute(@RequestBody @Validated BonusReceivedComputeRequest request) {
return ResponseResult.success(bonusService.receivedCompute(request));
}
@ApiOperation("新品销售实算")
@PostMapping("/productCompute")
public ResponseResult<BonusProductComputeVO> productCompute(@RequestBody @Validated BonusProductComputeRequest request) {
return ResponseResult.success(bonusService.productCompute(request));
}
@ApiOperation("门店实收奖金发放列表")
@PostMapping("/receivedStoreList")
public ResponseResult<PageInfo<BonusReceivedStoreListVO>> getReceivedStoreList(@RequestBody BonusReceivedStoreQueryRequest request) {
return ResponseResult.success(bonusService.getReceivedStoreList(request));
}
@ApiOperation("门店实收奖金详情")
@GetMapping("/receivedStoreDetail")
@ApiImplicitParam(name = "id", value = "门店实收奖金id", required = true, dataType = "Long", paramType = "query")
public ResponseResult<BonusReceivedStoreDetailVO> getReceivedStoreDetail(@NotNull(message = "id不能为空") Long id) {
return ResponseResult.success(bonusService.getReceivedStoreDetail(id));
}
@ApiOperation("员工实收奖金发放列表")
@PostMapping("/receivedEmployeeList")
public ResponseResult<PageInfo<BonusReceivedEmployeeListVO>> getReceivedEmployeeList(@RequestBody BonusReceivedEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getReceivedEmployeeList(request));
}
@ApiOperation("员工实收奖金详情")
@GetMapping("/receivedEmployeeDetail")
@ApiImplicitParam(name = "id", value = "员工实收奖金id", required = true, dataType = "Long", paramType = "query")
public ResponseResult<BonusReceivedStoreDetailVO> getReceivedEmployeeDetail(@NotNull(message = "id不能为空") Long id) {
return ResponseResult.success(bonusService.getReceivedEmployeeDetail(id));
}
@ApiOperation("新品销售奖金发放-门店列表")
@PostMapping("/newProductStoreList")
public ResponseResult<PageInfo<BonusProductStoreListVO>> getNewProductStoreList(@RequestBody BonusProductQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductStoreList(request));
}
@ApiOperation("新品销售奖金-门店详情")
@PostMapping("/newProductStoreDetail")
@ApiImplicitParam(name = "id", value = "门店新品销售奖金id", required = true, dataType = "Long", paramType = "query")
public ResponseResult<BonusProductStoreDetailVO> getNewProductStoreDetail(@RequestBody @Validated BonusProductMonthlyQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductStoreDetail(request));
}
@ApiOperation("新品销售奖金-菜品列表")
@PostMapping("/newProductRecipeList")
public ResponseResult<PageInfo<BonusProductRecipeListVO>> getNewProductRecipeList(@RequestBody BonusProductQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductRecipeList(request));
}
@ApiOperation("新品销售奖金-菜品详情")
@PostMapping("/newProductRecipeDetail")
public ResponseResult<PageInfo<BonusProductRecipeDetailVO>> getNewProductRecipeDetail(@RequestBody @Validated BonusProductRecipeQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductRecipeDetail(request));
}
@ApiOperation("新品销售奖金-员工列表")
@PostMapping("/newProductEmployeeList")
public ResponseResult<PageInfo<BonusProductEmployeeListVO>> getNewProductEmployeeList(@RequestBody BonusProductEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductEmployeeList(request));
}
@ApiOperation("新品销售奖金-员工详情")
@PostMapping("/newProductEmployeeDetail")
public ResponseResult<BonusProductStoreDetailVO> getNewProductEmployeeDetail(@RequestBody @Validated BonusProductMonthlyQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductEmployeeDetail(request));
}
@ApiOperation("新品销售奖金-菜品+员工列表")
@PostMapping("/newProductRecipeEmployeeList")
public ResponseResult<PageInfo<BonusProductRecipeEmployeeListVO>> getNewProductRecipeEmployeeList(@RequestBody BonusProductEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductRecipeEmployeeList(request));
}
@ApiOperation("新品销售奖金-菜品+员工详情")
@PostMapping("/newProductRecipeEmployeeDetail")
public ResponseResult<PageInfo<BonusProductRecipeEmployeeDetailVO>> getNewProductRecipeEmployeeDetail(@RequestBody @Validated BonusProductRecipeEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductRecipeEmployeeDetail(request));
}
@ApiOperation("员工奖金明细")
@PostMapping("/employeeBonusDetail")
public ResponseResult<PageInfo<BonusEmployeeDetailVO>> getEmployeeBonusDetail(@RequestBody BonusProductEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getEmployeeMonthlyDetail(request));
}
@ApiOperation("门店菜品列表")
@GetMapping("/recipeList")
public ResponseResult<List<StoreRecipesResponse>> getRecipeList(@RequestParam @NotNull(message = "门店id不能为空") String storeId) {
return ResponseResult.success(bonusService.getRecipes(storeId));
}
}

View File

@@ -2,6 +2,7 @@ package com.cool.store.controller.webb;
import com.cool.store.common.PageBasicInfo;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.dto.store.StoreUserDTO;
import com.cool.store.request.store.StoreListRequest;
import com.cool.store.request.UserStoreRequest;
import com.cool.store.response.MiniShopsResponse;
@@ -15,6 +16,8 @@ import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* PC门店 前端控制器
@@ -42,4 +45,9 @@ public class PCStoreController {
return ResponseResult.success(storeService.getAuthStoreList(request));
}
@ApiOperation("门店人员列表")
@GetMapping("/storeUserPositionList")
public ResponseResult<List<StoreUserDTO>> getStoreUserPositionList(String storeId, String userName) {
return ResponseResult.success(storeService.getStoreUserPositionList(storeId, userName));
}
}

View File

@@ -1,8 +1,10 @@
package com.cool.store.controller.webb;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.annotation.Debounce;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dao.*;
import com.cool.store.dao.bonus.BonusDistributionRuleDAO;
import com.cool.store.dao.fees.WalletPayInfoDAO;
import com.cool.store.dto.*;
import com.cool.store.dto.contract.ContractCallbackDTO;
@@ -13,11 +15,9 @@ import com.cool.store.dto.xgj.XgjPartnerPageDTO;
import com.cool.store.dto.wallet.*;
import com.cool.store.dto.xgj.XgjPayResultDTO;
import com.cool.store.entity.*;
import com.cool.store.entity.bonus.BonusDistributionRuleDO;
import com.cool.store.entity.fees.WalletPayInfoDO;
import com.cool.store.enums.DownSystemTypeEnum;
import com.cool.store.enums.FranchiseBrandEnum;
import com.cool.store.enums.MessageEnum;
import com.cool.store.enums.SMSMsgEnum;
import com.cool.store.enums.*;
import com.cool.store.enums.point.ShopSubStageStatusEnum;
import com.cool.store.enums.wechat.WechatTemplateEnum;
import com.cool.store.handler.WeChatHandler;
@@ -31,6 +31,9 @@ import com.cool.store.request.bigdata.ProfitDataRequest;
import com.cool.store.request.close.store.CloseStoreApplyRequest;
import com.cool.store.request.huoma.ShopBasicInfoRequest;
import com.cool.store.request.oppty.*;
import com.cool.store.request.storeopen.StoreMonthRevenueRequest;
import com.cool.store.request.storeopen.StoreRecipeDailySalesRequest;
import com.cool.store.request.storeopen.StoreRecipesRequest;
import com.cool.store.request.wallet.*;
import com.cool.store.request.xgj.PushFranchiseFeeRequest;
import com.cool.store.request.xgj.*;
@@ -43,7 +46,11 @@ import com.cool.store.response.huoma.ShopBaseInfoResponse;
import com.cool.store.response.oppty.CityResponse;
import com.cool.store.response.oppty.OpportunityDetailResponse;
import com.cool.store.response.oppty.OpportunityInfoPageResponse;
import com.cool.store.response.storeopen.StoreMonthRevenueResponse;
import com.cool.store.response.storeopen.StoreRecipeDailySalesResponse;
import com.cool.store.response.storeopen.StoreRecipesResponse;
import com.cool.store.service.*;
import com.cool.store.service.bonus.BonusService;
import com.cool.store.service.close.CloseStoreService;
import com.cool.store.service.fees.WalletPayInfoService;
import com.cool.store.service.impl.CommonService;
@@ -138,6 +145,65 @@ public class PCTestController {
@Resource
WalletPayInfoService walletPayInfoService;
@Resource
ThirdStoreOpenDataService thirdStoreOpenDataService;
@Resource
BonusService bonusService;
@Resource
BonusDistributionRuleDAO bonusRuleDAO;
@PostMapping("/processReceivedRule")
@Debounce(timeMs = 10000, diffUser = false)
public ResponseResult<Boolean> processReceivedRule(Long ruleId, String payMonth) {
BonusDistributionRuleDO ruleDO = bonusRuleDAO.getById(ruleId);
if (Objects.isNull(ruleDO)) {
return ResponseResult.fail(ErrorCodeEnum.BONUS_RULE_NOT_EXIST);
}
// 删除所有实收数据
bonusService.deleteMonthlyReceived(ruleDO, payMonth);
bonusService.processReceivedRule(ruleDO, payMonth);
return ResponseResult.success(true);
}
@PostMapping("/processNewProductRule")
@Debounce(timeMs = 10000, diffUser = false)
public ResponseResult<Boolean> processNewProductRule(Long ruleId, String payDate) {
BonusDistributionRuleDO ruleDO = bonusRuleDAO.getById(ruleId);
if (Objects.isNull(ruleDO)) {
return ResponseResult.fail(ErrorCodeEnum.BONUS_RULE_NOT_EXIST);
}
bonusService.deleteMonthlyNewProduct(ruleDO, payDate);
bonusService.processNewProductRule(ruleDO, payDate);
return ResponseResult.success(true);
}
@PostMapping("/dailyNewProductBonus")
public ResponseResult<Boolean> dailyNewProductBonus() {
xxlJobHandler.dailyNewProductBonus();
return ResponseResult.success(true);
}
@PostMapping("/monthlyReceivedBonus")
public ResponseResult<Boolean> monthlyReceivedBonus() {
xxlJobHandler.monthlyReceivedBonus();
return ResponseResult.success(true);
}
@PostMapping("/getMonthRevenue")
public ResponseResult<List<StoreMonthRevenueResponse>> getMonthRevenue(@RequestBody StoreMonthRevenueRequest request) {
return ResponseResult.success(thirdStoreOpenDataService.getMonthRevenue(request));
}
@PostMapping("/getRecipeDailySales")
public ResponseResult<List<StoreRecipeDailySalesResponse>> getRecipeDailySales(@RequestBody StoreRecipeDailySalesRequest request) {
return ResponseResult.success(thirdStoreOpenDataService.getRecipeDailySales(request));
}
@PostMapping("/getRecipes")
public ResponseResult<List<StoreRecipesResponse>> getRecipes(@RequestBody StoreRecipesRequest request) {
return ResponseResult.success(thirdStoreOpenDataService.getRecipes(request));
}
@PostMapping("/walletReceiptRePush")
public ResponseResult<Boolean> walletReceiptRePush(Long id) {
walletPayInfoService.rePushReceipt(id);

View File

@@ -0,0 +1,174 @@
package com.cool.store.controller.webc;
import com.cool.store.context.PartnerUserHolder;
import com.cool.store.request.bonus.*;
import com.cool.store.response.ResponseResult;
import com.cool.store.response.storeopen.StoreRecipesResponse;
import com.cool.store.service.bonus.BonusService;
import com.cool.store.vo.bonus.*;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
* Mini工资奖金发放
* </p>
*
* @author wangff
* @since 2026/4/23
*/
@Api(tags = "Mini工资奖金发放")
@RestController
@RequestMapping("/mini/bonus")
@RequiredArgsConstructor
@Valid
public class MiniBonusController {
private final BonusService bonusService;
@ApiOperation("新增规则")
@PostMapping("/addRule")
public ResponseResult<String> addRule(@RequestBody @Validated BonusRuleAddRequest request) {
return ResponseResult.success(bonusService.addRule(request, PartnerUserHolder.getUser().getPartnerId()));
}
@ApiOperation("编辑规则")
@PostMapping("/updateRule")
public ResponseResult<Boolean> updateRule(@RequestBody @Validated BonusRuleUpdateRequest request) {
return ResponseResult.success(bonusService.updateRule(request, PartnerUserHolder.getUser().getPartnerId()));
}
@ApiOperation("启用规则")
@PostMapping("/enableRule")
public ResponseResult<Boolean> enableRule(@RequestBody @Validated BonusRuleEnableRequest request) {
return ResponseResult.success(bonusService.enableRule(request));
}
@ApiOperation("规则详情")
@GetMapping("/ruleDetail")
@ApiImplicitParam(name = "ruleId", value = "规则id", required = true, dataType = "Long", paramType = "query")
public ResponseResult<BonusRuleVO> getRuleDetail(@NotNull(message = "规则id不能为空") Long ruleId) {
return ResponseResult.success(bonusService.getRuleDetail(ruleId));
}
@ApiOperation("规则列表查询")
@PostMapping("/list")
public ResponseResult<PageInfo<BonusRuleListVO>> getList(@RequestBody BonusRuleQueryRequest request) {
return ResponseResult.success(bonusService.getList(request));
}
@ApiOperation("实收实算")
@PostMapping("/receivedCompute")
public ResponseResult<BonusReceivedComputeVO> receivedCompute(@RequestBody @Validated BonusReceivedComputeRequest request) {
return ResponseResult.success(bonusService.receivedCompute(request));
}
@ApiOperation("新品销售实算")
@PostMapping("/productCompute")
public ResponseResult<BonusProductComputeVO> productCompute(@RequestBody @Validated BonusProductComputeRequest request) {
return ResponseResult.success(bonusService.productCompute(request));
}
@ApiOperation("门店实收奖金发放列表")
@PostMapping("/receivedStoreList")
public ResponseResult<PageInfo<BonusReceivedStoreListVO>> getReceivedStoreList(@RequestBody BonusReceivedStoreQueryRequest request) {
return ResponseResult.success(bonusService.getReceivedStoreList(request));
}
@ApiOperation("门店实收奖金详情")
@GetMapping("/receivedStoreDetail")
@ApiImplicitParam(name = "id", value = "门店实收奖金id", required = true, dataType = "Long", paramType = "query")
public ResponseResult<BonusReceivedStoreDetailVO> getReceivedStoreDetail(@NotNull(message = "id不能为空") Long id) {
return ResponseResult.success(bonusService.getReceivedStoreDetail(id));
}
@ApiOperation("员工实收奖金发放列表")
@PostMapping("/receivedEmployeeList")
public ResponseResult<PageInfo<BonusReceivedEmployeeListVO>> getReceivedEmployeeList(@RequestBody BonusReceivedEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getReceivedEmployeeList(request));
}
@ApiOperation("员工实收奖金详情")
@GetMapping("/receivedEmployeeDetail")
@ApiImplicitParam(name = "id", value = "员工实收奖金id", required = true, dataType = "Long", paramType = "query")
public ResponseResult<BonusReceivedStoreDetailVO> getReceivedEmployeeDetail(@NotNull(message = "id不能为空") Long id) {
return ResponseResult.success(bonusService.getReceivedEmployeeDetail(id));
}
@ApiOperation("新品销售奖金发放-门店列表")
@PostMapping("/newProductStoreList")
public ResponseResult<PageInfo<BonusProductStoreListVO>> getNewProductStoreList(@RequestBody BonusProductQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductStoreList(request));
}
@ApiOperation("新品销售奖金-门店详情")
@PostMapping("/newProductStoreDetail")
@ApiImplicitParam(name = "id", value = "门店新品销售奖金id", required = true, dataType = "Long", paramType = "query")
public ResponseResult<BonusProductStoreDetailVO> getNewProductStoreDetail(@RequestBody @Validated BonusProductMonthlyQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductStoreDetail(request));
}
@ApiOperation("新品销售奖金-菜品列表")
@PostMapping("/newProductRecipeList")
public ResponseResult<PageInfo<BonusProductRecipeListVO>> getNewProductRecipeList(@RequestBody BonusProductQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductRecipeList(request));
}
@ApiOperation("新品销售奖金-菜品详情")
@PostMapping("/newProductRecipeDetail")
public ResponseResult<PageInfo<BonusProductRecipeDetailVO>> getNewProductRecipeDetail(@RequestBody @Validated BonusProductRecipeQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductRecipeDetail(request));
}
@ApiOperation("新品销售奖金-员工列表")
@PostMapping("/newProductEmployeeList")
public ResponseResult<PageInfo<BonusProductEmployeeListVO>> getNewProductEmployeeList(@RequestBody BonusProductEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductEmployeeList(request));
}
@ApiOperation("新品销售奖金-员工详情")
@PostMapping("/newProductEmployeeDetail")
public ResponseResult<BonusProductStoreDetailVO> getNewProductEmployeeDetail(@RequestBody @Validated BonusProductMonthlyQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductEmployeeDetail(request));
}
@ApiOperation("新品销售奖金-菜品+员工列表")
@PostMapping("/newProductRecipeEmployeeList")
public ResponseResult<PageInfo<BonusProductRecipeEmployeeListVO>> getNewProductRecipeEmployeeList(@RequestBody BonusProductEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductRecipeEmployeeList(request));
}
@ApiOperation("新品销售奖金-菜品+员工详情")
@PostMapping("/newProductRecipeEmployeeDetail")
public ResponseResult<PageInfo<BonusProductRecipeEmployeeDetailVO>> getNewProductRecipeEmployeeDetail(@RequestBody @Validated BonusProductRecipeEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getNewProductRecipeEmployeeDetail(request));
}
@ApiOperation("员工奖金明细")
@PostMapping("/employeeBonusDetail")
public ResponseResult<PageInfo<BonusEmployeeDetailVO>> getEmployeeBonusDetail(@RequestBody BonusProductEmployeeQueryRequest request) {
return ResponseResult.success(bonusService.getEmployeeMonthlyDetail(request));
}
@ApiOperation("门店菜品列表")
@GetMapping("/recipeList")
public ResponseResult<List<StoreRecipesResponse>> getRecipeList(@RequestParam @NotNull(message = "门店id不能为空") String storeId) {
return ResponseResult.success(bonusService.getRecipes(storeId));
}
@ApiOperation("门店上月日均实收")
@GetMapping("/receivedDailyLast")
public ResponseResult<BigDecimal> getReceivedDailyLast(@RequestParam @NotBlank(message = "门店id不能为空") String storeId) {
return ResponseResult.success(bonusService.receivedDailyLast(storeId));
}
}

View File

@@ -0,0 +1,35 @@
package com.cool.store.controller.webc;
import com.cool.store.dto.store.StoreUserDTO;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.StoreService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* Mini门店 前端控制器
* </p>
*
* @author wangff
* @since 2026/4/24
*/
@Api(tags = "mini门店")
@RestController
@RequestMapping("/mini/stores")
@RequiredArgsConstructor
public class MiniStoreController {
private final StoreService storeService;
@ApiOperation("门店人员列表")
@GetMapping("/storeUserPositionList")
public ResponseResult<List<StoreUserDTO>> getStoreUserPositionList(String storeId, String userName) {
return ResponseResult.success(storeService.getStoreUserPositionList(storeId, userName));
}
}

View File

@@ -4,11 +4,13 @@ import cn.hutool.core.collection.CollStreamUtil;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dao.*;
import com.cool.store.dao.bonus.BonusDistributionRuleDAO;
import com.cool.store.dao.tp.TpApplyFormDAO;
import com.cool.store.dao.wallet.WalletTradeDAO;
import com.cool.store.dto.*;
import com.cool.store.dto.store.StoreOrderTimeDTO;
import com.cool.store.entity.*;
import com.cool.store.entity.bonus.BonusDistributionRuleDO;
import com.cool.store.entity.tp.TpApplyFormDO;
import com.cool.store.entity.wallet.WalletTradeDO;
import com.cool.store.enums.*;
@@ -27,6 +29,7 @@ import com.cool.store.request.tp.TpApplyQueryRequest;
import com.cool.store.request.close.store.CloseStoreApplyRequest;
import com.cool.store.response.bigdata.LatestOrderDateResponse;
import com.cool.store.service.*;
import com.cool.store.service.bonus.BonusService;
import com.cool.store.service.close.CloseStoreRefundService;
import com.cool.store.service.close.CloseStoreService;
import com.cool.store.service.fees.WalletPayInfoService;
@@ -50,6 +53,7 @@ import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@@ -139,6 +143,14 @@ public class XxlJobHandler {
SplitOrderService splitOrderService;
@Resource
WithdrawApplicationService withdrawApplicationService;
@Resource
BonusDistributionRuleDAO ruleDAO;
@Resource
BonusService bonusService;
private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM");
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
/**
@@ -756,4 +768,90 @@ public class XxlJobHandler {
}
log.info("------end withdrawUpdate------");
}
/**
* 每月统计上一个月门店的实收数据并入库
* 建议每月1日凌晨执行
*/
@XxlJob("monthlyReceivedBonus")
public void monthlyReceivedBonus() {
MDCUtils.put(CommonConstants.REQUEST_ID, UUID.randomUUID().toString());
log.info("------start monthlyReceivedBonus------");
// 计算上一个月
LocalDate lastMonth = LocalDate.now().minusMonths(1);
String payMonth = lastMonth.format(MONTH_FORMATTER);
log.info("统计月份: {}", payMonth);
try {
// 获取类型为1实收的启用规则列表
int pageNum = 1, pageSize = CommonConstants.BATCH_SIZE;
boolean hasNext = true;
while (hasNext) {
PageHelper.startPage(pageNum, pageSize);
List<BonusDistributionRuleDO> rules = ruleDAO.getEnabledRulesByTypeAndMonth(1, payMonth);
if (CollectionUtils.isEmpty(rules)) {
break;
}
hasNext = rules.size() >= pageSize;
// 按门店分组处理
for (BonusDistributionRuleDO rule : rules) {
try {
log.info("处理门店:{}, ruleId;{}", rule.getStoreId(), rule.getId());
bonusService.processReceivedRule(rule, payMonth);
} catch (Exception e) {
log.error("处理实收规则失败, ruleId: {}, storeId: {}", rule.getId(), rule.getStoreId(), e);
}
}
pageNum++;
}
log.info("------end monthlyReceivedBonus------");
} catch (Exception e) {
log.error("monthlyReceivedBonus执行失败", e);
XxlJobHelper.handleFail("执行失败: " + e.getMessage());
}
}
/**
* 每天统计前一天的新品销售数据并入库
* 建议每天凌晨执行
*/
@XxlJob("dailyNewProductBonusJob")
public void dailyNewProductBonus() {
MDCUtils.put(CommonConstants.REQUEST_ID, UUID.randomUUID().toString());
log.info("------start dailyNewProductBonus------");
// 计算前一天
LocalDate yesterday = LocalDate.now().minusDays(1);
String payDate = yesterday.format(DATE_FORMATTER);
String payMonth = yesterday.format(MONTH_FORMATTER);
log.info("统计日期: {}", payDate);
try {
// 获取类型为2新品销售的启用规则列表
int pageNum = 1, pageSize = CommonConstants.BATCH_SIZE;
boolean hasNext = true;
while (hasNext) {
PageHelper.startPage(pageNum, pageSize);
List<BonusDistributionRuleDO> rules = ruleDAO.getEnabledRulesByTypeAndMonth(2, payMonth);
if (CollectionUtils.isEmpty(rules)) {
break;
}
hasNext = rules.size() >= pageSize;
// 按门店分组处理
for (BonusDistributionRuleDO rule : rules) {
try {
log.info("处理门店:{}, ruleId;{}", rule.getStoreId(), rule.getId());
bonusService.processNewProductRule(rule, payDate);
} catch (Exception e) {
log.error("处理新品销售规则失败, ruleId: {}, storeId: {}", rule.getId(), rule.getStoreId(), e);
}
}
}
log.info("------end dailyNewProductBonus------");
} catch (Exception e) {
log.error("dailyNewProductBonus执行失败", e);
XxlJobHelper.handleFail("执行失败: " + e.getMessage());
}
}
}

View File

@@ -178,4 +178,9 @@ wallet.api.yzt.key=360155690205317
cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM=
cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
wallet.org.id=140732221567301
wallet.org.id=140732221567301
store.open.url=https://zhengxin.zhidiansoft.com:5943
store.open.appId=289704779317445
store.open.appKey=IGSAEQoakR2HEaYx
store.open.secret=aPsA99K1obFeFm3m

View File

@@ -176,4 +176,9 @@ liePin.secretKey=dns6x4f1p14a36u4t22xvteppmz07ir2
liePin.aesSecretKey=_nkULTpkBHHZeWgQ
liePin.baseUrl=https://open-xhopen-qa53.qa.xunhou.cn
liePin.tenantId=12833
liePin.mobile=13345565081
liePin.mobile=13345565081
store.open.url=https://zhengxin.zhidiansoft.com:5943
store.open.appId=289704779317445
store.open.appKey=IGSAEQoakR2HEaYx
store.open.secret=aPsA99K1obFeFm3m

View File

@@ -173,4 +173,9 @@ wallet.api.yzt.key=375393764171845
cool.api.rsa.private.key=MIIEoQIBAAKCAQEAleyT39qxm9Vi4d3f/pF4yI3EATtLlP870dFfk5Rwj1MEM4OVTUeoBrld5GwTARQYzuyZETTZPh9taFCVtLFVsQv4waTqDf/7vnfBbvrTZ2mvZv6H/M6BTQnTx5UmOIP1RsA933ce7v/hmG/DlMaHU3JVC840Ae1q7uJZ2yA6+r6aAGdTGMSH4oQ+U9omJOJbgbuti9DsBuGDDKZ1uMhrWW/l4El5y2Qdu/71wIQuI08kPegmuGl4+FLRJ2OnoGsp+BRXKpFbN0fq0YwPQhjzSHsKg64qimmzRRr5Ewd+4w1/27dJ6mopQd4zvf7+VQ4wEZgATTe/hjBw1njOOBD/WQIDAQABAoIBACSFU0ZSEzbXRbWoo0JzdF1Cb28vXwuGGy/S1XnxTHQVcG4ODSYcoPk2WYFltEFsgFiTuPvAiHUCGdgx3S39jtbIiEm/nwZXB5+Ps46RykKkM4ae1UiHk2bNUIoLMprMxkh8VvYjIeVtbqp/+0A4FkoFDWOJURDxIT3c5K+ky8k9mKz59SiOkNoiayPQTEjzZPgKSsT64286PGmE9v4BlpyxQ1bLXeZaQGAkQ7YVtU5XJgbMM86hgmFlTcHVMGeMoQvJTfcsLlRg8ucX/zzBTHR7fZP6i5OJl5CYLbzHbTyHN9KRYDYv066SvbGLNa+4NO2cY+L6NehiwAkkFxSGKkMCgYEAoVgEjOqLyL1CpeaW7ckWQSbcae0a6J61b6meCkRaKrwcWi7ut9OfmvkCae2qsMsHQlitFM8blrnhtJxMt3EhWKYHI1seZto6YR0mzEEz5IVM3OStIZN7RY4Fg6AyB0C5Gure3GgGHaSs5J8AbCpJyLjTWuOdcnThgHHe4Mw2dGsCgYEA7eF0TpAbdYn8xjqNEgeRSSXYpwtRQ1zrpH0b1KQBxx/fvoZPzWG0SYIi6eYV5bxV5EDnCKlXXFD3ztMfThPFUGt8hHAG6CKpsiVNvYDVhAzXN18JQJtRQRO/4S0f42C8os87ToL1nlM83c8hegrsGO+JnoTzKf8KkpYqTNrvrEsCf1HuYGEuuc02TqHwdrRJaQOsuEESJpf6ACiz+Y09KIyK+drR+mdfD62ixZcFGaitcQJABaSLh3cC7ZrJxCtjR4u8w+MwYj/Ykcy/APS4J6HkDyQc+84RFog7lpFAyCbmtxj0LDfAm1pyRVnTZGOJFe7X7Hw7GbkFoX2YVZXSHdUCgYEA6rCuYPxIOxSicKg/mfQhYLuYHmZKDF3WlnhgRtBweJZ31q8IeKbWild8PqukGv5O910ZEzCPYiL3+fPNROi4mPkS5k7oYYohRgMLydUb0qYghx6aMEWMStpDStOMTHaaZT5zUqhdz5Br0qKScqfn+0oIyn58sYhQVAMXRLAUGjUCgYAYiuiTme9S9gSt1pZrDbPxXlbVm6PjlkP/OKrmBj5gq8iYeKzmYKp66UKFo6ZeeRcKiXLWdQS0i0rKBPux8kmfIwbrfbuYAVGE0GmUdEMNsBQvEjxpwo3afyB5F70tdnm4EBo0qeqJxuBK8DLpBFka2yfzEo/3Z6i0X/XqIwq/7A==
cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAleyT39qxm9Vi4d3f/pF4yI3EATtLlP870dFfk5Rwj1MEM4OVTUeoBrld5GwTARQYzuyZETTZPh9taFCVtLFVsQv4waTqDf/7vnfBbvrTZ2mvZv6H/M6BTQnTx5UmOIP1RsA933ce7v/hmG/DlMaHU3JVC840Ae1q7uJZ2yA6+r6aAGdTGMSH4oQ+U9omJOJbgbuti9DsBuGDDKZ1uMhrWW/l4El5y2Qdu/71wIQuI08kPegmuGl4+FLRJ2OnoGsp+BRXKpFbN0fq0YwPQhjzSHsKg64qimmzRRr5Ewd+4w1/27dJ6mopQd4zvf7+VQ4wEZgATTe/hjBw1njOOBD/WQIDAQAB
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
wallet.org.id=420289242456261
wallet.org.id=420289242456261
store.open.url=https://zhengxin.zhidiansoft.com:5943
store.open.appId=289704779317445
store.open.appKey=IGSAEQoakR2HEaYx
store.open.secret=aPsA99K1obFeFm3m

View File

@@ -178,4 +178,9 @@ wallet.url=https://api.dev.wenmatech.com:443
wallet.api.yzt.key=360155690205317
cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM=
cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
store.open.url=https://zhengxin.zhidiansoft.com:5943
store.open.appId=289704779317445
store.open.appKey=IGSAEQoakR2HEaYx
store.open.secret=aPsA99K1obFeFm3m