|
|
@@ -1,32 +1,39 @@
|
|
|
package com.cyksj.web.controller.manage.distribute;
|
|
|
|
|
|
+import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
|
+import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.cyksj.common.annotation.Log;
|
|
|
import com.cyksj.common.constant.Constant;
|
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
+import com.cyksj.common.util.StringUtil;
|
|
|
import com.cyksj.dto.Result;
|
|
|
import com.cyksj.enums.BusinessType;
|
|
|
import com.cyksj.enums.GatewayResponse;
|
|
|
import com.cyksj.mapper.GoodsDonMapper;
|
|
|
import com.cyksj.mapper.GoodsDonSkuMapper;
|
|
|
import com.cyksj.mapper.UserMapper;
|
|
|
-import com.cyksj.mapper.manage.distribute.DistributeMoneyApplyMapper;
|
|
|
-import com.cyksj.mapper.manage.distribute.DistributePointsExchangeMoneyMapper;
|
|
|
-import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
|
|
|
+import com.cyksj.mapper.manage.cms.CmsUserMapper;
|
|
|
+import com.cyksj.mapper.manage.distribute.*;
|
|
|
import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.request.DistributeApplyMoneyReq;
|
|
|
import com.cyksj.model.request.UserDistributeReq;
|
|
|
import com.cyksj.model.views.*;
|
|
|
import com.cyksj.service.distribute.DistributeService;
|
|
|
+import com.cyksj.service.mange.business.UserBusinessRateService;
|
|
|
import com.cyksj.service.mange.statistics.StatisticsDataService;
|
|
|
import com.ejlchina.searcher.BeanSearcher;
|
|
|
import com.ejlchina.searcher.SearchResult;
|
|
|
import com.ejlchina.searcher.param.Operator;
|
|
|
+import com.ejlchina.searcher.util.MapBuilder;
|
|
|
import com.ejlchina.searcher.util.MapUtils;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.dao.DuplicateKeyException;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
@@ -68,13 +75,28 @@ public class DistributeController {
|
|
|
|
|
|
private final StatisticsDataService statisticsDataService;
|
|
|
|
|
|
+ private final UserBusinessRateService userBusinessRateService;
|
|
|
+
|
|
|
+ private final UserDistributeBusinessRateMapper userDistributeBusinessRateMapper;
|
|
|
+
|
|
|
+ private final HttpServletRequest request;
|
|
|
+
|
|
|
+ private final CmsUserMapper cmsUserMapper;
|
|
|
+
|
|
|
+ private final UserBusinessDefaultRateConfigMapper defaultRateConfigMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 添加固定推广者
|
|
|
*/
|
|
|
@PostMapping
|
|
|
+ @SaCheckPermission("distribute:add")
|
|
|
@Log(module = "分销管理/增加推广者", businessType = BusinessType.POST, isSaveRequestData = true)
|
|
|
+ @Transactional(rollbackFor = Throwable.class)
|
|
|
public Result<String> saveDistributes(@RequestBody @NotNull UserDistributeReq userDistributeReq) {
|
|
|
distributeService.insertDistribute(userDistributeReq);
|
|
|
+ Long businessId = userDistributeReq.getBusinessId();
|
|
|
+ //保存商务人员提成比例
|
|
|
+ userBusinessRateService.saveBusinessRate(businessId);
|
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult("添加成功");
|
|
|
}
|
|
|
|
|
|
@@ -82,6 +104,7 @@ public class DistributeController {
|
|
|
* 删除固定推广者
|
|
|
*/
|
|
|
@DeleteMapping("/del/{id}")
|
|
|
+ @SaCheckPermission("distribute:delete")
|
|
|
@Log(module = "分销管理/删除推广者", businessType = BusinessType.DELETE, isSaveRequestData = true)
|
|
|
public Result<String> deleteDistributesById(@PathVariable Long id) {
|
|
|
if (id == null || id < 1) {
|
|
|
@@ -95,6 +118,7 @@ public class DistributeController {
|
|
|
* 推广者编辑
|
|
|
*/
|
|
|
@PutMapping
|
|
|
+ @SaCheckPermission("distribute:update")
|
|
|
@Log(module = "分销管理/编辑推广者", businessType = BusinessType.PUT, isSaveRequestData = true)
|
|
|
public Result<String> editDistribute(@RequestBody UserDistributeReq userDistributeReq) {
|
|
|
distributeService.editDistribute(userDistributeReq);
|
|
|
@@ -117,7 +141,13 @@ public class DistributeController {
|
|
|
*/
|
|
|
@GetMapping
|
|
|
public Result<SearchResult<UserDistributeViews>> distributeList(HttpServletRequest request) {
|
|
|
- SearchResult<UserDistributeViews> search = beanSearcher.search(UserDistributeViews.class, MapUtils.flatBuilder(request.getParameterMap()).build());
|
|
|
+ long adminId = StpUtil.getLoginIdAsLong();
|
|
|
+ MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
|
|
|
+ //是否是商务人员
|
|
|
+ if (userBusinessRateService.isBusiness(adminId)) {
|
|
|
+ builder.field(UserDistributeViews::getBusinessId, adminId);
|
|
|
+ }
|
|
|
+ SearchResult<UserDistributeViews> search = beanSearcher.search(UserDistributeViews.class, builder.build());
|
|
|
DistributePointsExchangeMoney pointsMoneyRate = distributePointsExchangeMoneyMapper.selectOne(null);
|
|
|
Optional.ofNullable(search.getDataList()).ifPresent(list -> list.forEach(view -> {
|
|
|
BigDecimal num = view.getPoints().divide(BigDecimal.valueOf(pointsMoneyRate.getPoints()), RoundingMode.DOWN);
|
|
|
@@ -226,6 +256,7 @@ public class DistributeController {
|
|
|
* 提现列表
|
|
|
*/
|
|
|
@GetMapping("/get/applyMoney/list")
|
|
|
+ @SaCheckPermission("distribute:applyView")
|
|
|
public Result<SearchResult<DistributeMoneyApplyView>> applyMoneyList(HttpServletRequest request) {
|
|
|
SearchResult<DistributeMoneyApplyView> search = beanSearcher.search(DistributeMoneyApplyView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
|
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult(search);
|
|
|
@@ -324,4 +355,168 @@ public class DistributeController {
|
|
|
.build());
|
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult(number.intValue());
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 绑定固定分销者的商务人员详情
|
|
|
+ */
|
|
|
+ @GetMapping("/get/business/list")
|
|
|
+ public Result<SearchResult<DistributeBusinessView>> getDistributeBusinessView() {
|
|
|
+ long adminId = StpUtil.getLoginIdAsLong();
|
|
|
+ MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
|
|
|
+ //是否是商务人员
|
|
|
+ if (userBusinessRateService.isBusiness(adminId)) {
|
|
|
+ builder.field(DistributeBusinessView::getBusinessId, adminId);
|
|
|
+ }
|
|
|
+ SearchResult<DistributeBusinessView> search = beanSearcher.search(DistributeBusinessView.class, builder.build());
|
|
|
+ search.getDataList().forEach(data->{
|
|
|
+ Number numOfRelation = beanSearcher.searchCount(UserDistribute.class, MapUtils.builder().field(UserDistribute::getBusinessId, data.getBusinessId()).field(UserDistribute::getDeleted, true).build());
|
|
|
+ data.setNumOfRelation(numOfRelation.intValue());
|
|
|
+ });
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(search);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 商务人员提成详情
|
|
|
+ */
|
|
|
+ @GetMapping("/get/takeMoney/detail")
|
|
|
+ public Result<SearchResult<BusinessTakeMoneyDetail>> getTakeMoneyDetail(String firstMonthDate, String secondMonthDate) {
|
|
|
+ long adminId = StpUtil.getLoginIdAsLong();
|
|
|
+ MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
|
|
|
+ //是否是商务人员
|
|
|
+ if (userBusinessRateService.isBusiness(adminId)) {
|
|
|
+ builder.field(BusinessTakeMoneyDetail::getBusinessId, adminId);
|
|
|
+ }
|
|
|
+ String timeSql = StringUtil.EMPTY;
|
|
|
+ if (StrUtil.isNotBlank(firstMonthDate)) {
|
|
|
+ timeSql += String.format("date_format(ubr.order_created_time,'%%Y-%%m') >= '%s'", firstMonthDate);
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(secondMonthDate)) {
|
|
|
+ timeSql += String.format("and date_format(ubr.order_created_time,'%%Y-%%m') <= '%s'", secondMonthDate);
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(timeSql)) {
|
|
|
+ builder.put("time", timeSql);
|
|
|
+ }
|
|
|
+ SearchResult<BusinessTakeMoneyDetail> search = beanSearcher.search(BusinessTakeMoneyDetail.class, builder.build());
|
|
|
+ search.getDataList().forEach(data -> {
|
|
|
+ User user = userMapper.selectById(data.getUserId());
|
|
|
+ Optional.ofNullable(user).ifPresent(u -> {
|
|
|
+ data.setNickname(u.getNickname());
|
|
|
+ data.setCreatedTime(u.getCreatedTime());
|
|
|
+ });
|
|
|
+ CmsUser business = cmsUserMapper.selectById(data.getBusinessId());
|
|
|
+ Optional.ofNullable(business).ifPresent(bs -> data.setBusinessName(bs.getNickname()));
|
|
|
+ });
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(search);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 商务提成head
|
|
|
+ */
|
|
|
+ @GetMapping("/get/business/headData")
|
|
|
+ public Result<BusinessTakeMoneyHeadView> getTakeMoneyHeadDetail(String firstMonthDate, String secondMonthDate) {
|
|
|
+ long adminId = StpUtil.getLoginIdAsLong();
|
|
|
+ MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
|
|
|
+ //是否是商务人员
|
|
|
+ if (userBusinessRateService.isBusiness(adminId)) {
|
|
|
+ builder.field(BusinessTakeMoneyHeadView::getBusinessId, adminId);
|
|
|
+ }
|
|
|
+ String timeSql = StringUtil.EMPTY;
|
|
|
+ if (StrUtil.isNotBlank(firstMonthDate)) {
|
|
|
+ timeSql += String.format("date_format(ubr.order_created_time,'%%Y-%%m') >= '%s'", firstMonthDate);
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(secondMonthDate)) {
|
|
|
+ timeSql += String.format("and date_format(ubr.order_created_time,'%%Y-%%m') <= '%s'", secondMonthDate);
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(timeSql)) {
|
|
|
+ builder.put("time", timeSql);
|
|
|
+ }
|
|
|
+ BusinessTakeMoneyHeadView headView = beanSearcher.searchFirst(BusinessTakeMoneyHeadView.class, builder.build());
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(headView);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查看商务人员提成比例
|
|
|
+ */
|
|
|
+ @GetMapping("/get/business/rate")
|
|
|
+ public Result<List<UserDistributeBusinessRateRecordView>> getUserDistributeBusinessRateDetail(Long businessId) {
|
|
|
+ List<UserDistributeBusinessRateRecordView> userDistributeBusinessRate = beanSearcher.searchAll(UserDistributeBusinessRateRecordView.class, MapUtils.builder()
|
|
|
+ .field(UserDistributeBusinessRateRecordView::getBusinessId, businessId)
|
|
|
+ .orderBy(UserDistributeBusinessRateRecordView::getGoodsId).asc()
|
|
|
+ .build());
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(userDistributeBusinessRate);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改商务人员提成比例
|
|
|
+ */
|
|
|
+ @PutMapping("/put/business/rate")
|
|
|
+ @Log(module = "分销管理/修改商务人员比例", businessType = BusinessType.PUT, isSaveRequestData = true)
|
|
|
+ public Result<String> updateBusinessRate(@RequestBody @Validated List<UserDistributeBusinessRate> rates) {
|
|
|
+ rates.forEach(userDistributeBusinessRate->{
|
|
|
+ Long rateId = userDistributeBusinessRate.getId();
|
|
|
+ UserDistributeBusinessRate businessRate = Optional.ofNullable(userDistributeBusinessRateMapper.selectById(rateId)).orElse(new UserDistributeBusinessRate());
|
|
|
+ BeanUtil.copyProperties(userDistributeBusinessRate, businessRate);
|
|
|
+ Number number = beanSearcher.searchCount(GoodsDonSkuView.class, MapUtils.builder()
|
|
|
+ .field(GoodsDonSkuView::getGoodsId, userDistributeBusinessRate.getGoodsId())
|
|
|
+ .field(GoodsDonSkuView::getSkuId, userDistributeBusinessRate.getSkuId())
|
|
|
+ .field(GoodsDonSkuView::getGoodsDonDeleted, true)
|
|
|
+ .build());
|
|
|
+ if (number.intValue() == 0) {
|
|
|
+ userDistributeBusinessRateMapper.delete(Wrappers.lambdaQuery(UserDistributeBusinessRate.class)
|
|
|
+ .eq(UserDistributeBusinessRate::getBusinessId, userDistributeBusinessRate.getBusinessId())
|
|
|
+ .eq(UserDistributeBusinessRate::getGoodsId, userDistributeBusinessRate.getGoodsId())
|
|
|
+ .eq(UserDistributeBusinessRate::getSkuId, userDistributeBusinessRate.getSkuId()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (businessRate.getId() == null) {
|
|
|
+ try {
|
|
|
+ userDistributeBusinessRateMapper.insert(businessRate);
|
|
|
+ } catch (DuplicateKeyException e) {
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ userDistributeBusinessRateMapper.updateById(businessRate);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult("修改比例成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 商务默认分配平台比例
|
|
|
+ */
|
|
|
+ @GetMapping("/get/defaultRateConfig")
|
|
|
+ public Result<List<UserBusinessDefaultRateConfigView>> getDefaultRateConfig() {
|
|
|
+ List<UserBusinessDefaultRateConfigView> search = beanSearcher.searchAll(UserBusinessDefaultRateConfigView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(search);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 编辑商务默认平台比例
|
|
|
+ */
|
|
|
+ @PutMapping("/update/business/defaultRate")
|
|
|
+ public Result<String> updateBusinessDefaultRate(@RequestBody List<UserBusinessDefaultRateConfig> configs) {
|
|
|
+ configs.forEach(rateConfig->{
|
|
|
+ Long rateConfigId = rateConfig.getId();
|
|
|
+ UserBusinessDefaultRateConfig config = Optional.ofNullable(defaultRateConfigMapper.selectById(rateConfigId)).orElse(new UserBusinessDefaultRateConfig());
|
|
|
+ BeanUtil.copyProperties(rateConfig, config);
|
|
|
+ Number number = beanSearcher.searchCount(GoodsDonSkuView.class, MapUtils.builder()
|
|
|
+ .field(GoodsDonSkuView::getGoodsId, rateConfig.getGoodsId())
|
|
|
+ .field(GoodsDonSkuView::getGoodsDonDeleted, true)
|
|
|
+ .build());
|
|
|
+ if (number.intValue() == 0) {
|
|
|
+ defaultRateConfigMapper.delete(Wrappers.lambdaQuery(UserBusinessDefaultRateConfig.class)
|
|
|
+ .eq(UserBusinessDefaultRateConfig::getGoodsId, rateConfig.getGoodsId()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (rateConfig.getId() == null) {
|
|
|
+ try {
|
|
|
+ defaultRateConfigMapper.insert(config);
|
|
|
+ return;
|
|
|
+ } catch (DuplicateKeyException e) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ defaultRateConfigMapper.updateById(config);
|
|
|
+ });
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult();
|
|
|
+ }
|
|
|
}
|