master:档口客户销售优惠管理功能完善;

pull/1121/head
liujiang 2025-04-10 11:19:03 +08:00
parent 3b2d3cdacb
commit 51dbe457cf
24 changed files with 484 additions and 199 deletions

View File

@ -89,14 +89,14 @@ public class StoreCustomerController extends XktBaseController {
@ApiOperation(value = "获取档口客户详细信息", httpMethod = "GET", response = R.class)
@GetMapping(value = "/{storeCusId}")
public R<StoreCusVO> getInfo(@PathVariable("storeCusId") Long storeCusId) {
return R.ok(BeanUtil.toBean(storeCusService.selectStoreCustomerByStoreCusId(storeCusId), StoreCusVO.class));
return R.ok(BeanUtil.toBean(storeCusService.selectByStoreCusId(storeCusId), StoreCusVO.class));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:customer:list')")
@ApiOperation(value = "查询档口客户列表", httpMethod = "GET", response = R.class)
@ApiOperation(value = "查询档口客户列表", httpMethod = "POST", response = R.class)
@PostMapping("/page")
public R<Page<StoreCusPageResDTO>> selectPage(@Validated @RequestBody StoreCusPageVO pageVO) {
return R.ok(storeCusService.selectPage(BeanUtil.toBean(pageVO, StoreCusPageDTO.class)));

View File

@ -4,12 +4,13 @@ import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.XktBaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.web.controller.xkt.vo.storeCusProdDiscount.StoreCusProdBatchDiscountVO;
import com.ruoyi.web.controller.xkt.vo.storeCusProdDiscount.StoreCusProdDiscExistVO;
import com.ruoyi.web.controller.xkt.vo.storeCusProdDiscount.StoreCusProdDiscPageVO;
import com.ruoyi.web.controller.xkt.vo.storeCusProdDiscount.StoreCusProdDiscountVO;
import com.ruoyi.xkt.domain.StoreCustomerProductDiscount;
import com.ruoyi.xkt.dto.storeCusProdDiscount.StoreCusProdDiscountDTO;
import com.ruoyi.xkt.dto.storeCusProdDiscount.*;
import com.ruoyi.xkt.service.IStoreCustomerProductDiscountService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -18,9 +19,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* Controller
*
@ -30,10 +28,10 @@ import java.util.List;
@Api(tags = "档口客户优惠")
@RestController
@RequiredArgsConstructor
@RequestMapping("/rest/v1/cus-discounts")
@RequestMapping("/rest/v1/cus-disc")
public class StoreCustomerProductDiscountController extends XktBaseController {
final IStoreCustomerProductDiscountService storeCusProdDiscountSvc;
final IStoreCustomerProductDiscountService storeCusProdDiscService;
/**
*
@ -43,60 +41,40 @@ public class StoreCustomerProductDiscountController extends XktBaseController {
@Log(title = "销售出库时,新增或修改档口客户优惠", businessType = BusinessType.UPDATE)
@PutMapping
public R<Integer> edit(@Validated @RequestBody StoreCusProdDiscountVO cusProdDisVO) {
return R.ok(storeCusProdDiscountSvc.updateStoreCusProdDiscount(BeanUtil.toBean(cusProdDisVO, StoreCusProdDiscountDTO.class)));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:discount:list')")
@GetMapping("/list")
public TableDataInfo list(StoreCustomerProductDiscount storeCustomerProductDiscount) {
startPage();
List<StoreCustomerProductDiscount> list = storeCusProdDiscountSvc.selectStoreCustomerProductDiscountList(storeCustomerProductDiscount);
return getDataTable(list);
return R.ok(storeCusProdDiscService.updateStoreCusProdDiscount(BeanUtil.toBean(cusProdDisVO, StoreCusProdDiscountDTO.class)));
}
/**
*
*
*/
@PreAuthorize("@ss.hasPermi('system:discount:export')")
@Log(title = "档口客户优惠", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, StoreCustomerProductDiscount storeCustomerProductDiscount) {
List<StoreCustomerProductDiscount> list = storeCusProdDiscountSvc.selectStoreCustomerProductDiscountList(storeCustomerProductDiscount);
ExcelUtil<StoreCustomerProductDiscount> util = new ExcelUtil<StoreCustomerProductDiscount>(StoreCustomerProductDiscount.class);
util.exportExcel(response, list, "档口客户优惠数据");
@PreAuthorize("@ss.hasPermi('system:discount:edit')")
@ApiOperation(value = "客户销售管理 批量减价、批量抹零减价", httpMethod = "PUT", response = R.class)
@Log(title = "客户销售管理 批量减价、批量抹零减价", businessType = BusinessType.UPDATE)
@PutMapping("/batch")
public R<Integer> batchDiscount(@Validated @RequestBody StoreCusProdBatchDiscountVO batchDiscVO) {
return R.ok(storeCusProdDiscService.batchDiscount(BeanUtil.toBean(batchDiscVO, StoreCusProdBatchDiscountDTO.class)));
}
/**
*
*
*/
@PreAuthorize("@ss.hasPermi('system:discount:query')")
@GetMapping(value = "/{storeCusProdDiscId}")
public R getInfo(@PathVariable("storeCusProdDiscId") Long storeCusProdDiscId) {
return success(storeCusProdDiscountSvc.selectStoreCustomerProductDiscountByStoreCusProdDiscId(storeCusProdDiscId));
@PreAuthorize("@ss.hasPermi('system:customer:list')")
@ApiOperation(value = "查询客户销售管理列表", httpMethod = "POST", response = R.class)
@PostMapping("/page")
public R<Page<StoreCusProdDiscPageResDTO>> selectPage(@Validated @RequestBody StoreCusProdDiscPageVO pageVO) {
return R.ok(storeCusProdDiscService.selectPage(BeanUtil.toBean(pageVO, StoreCusProdDiscPageDTO.class)));
}
/**
*
*
*/
@PreAuthorize("@ss.hasPermi('system:discount:add')")
@Log(title = "档口客户优惠", businessType = BusinessType.INSERT)
@PostMapping
public R add(@RequestBody StoreCustomerProductDiscount storeCustomerProductDiscount) {
return success(storeCusProdDiscountSvc.insertStoreCustomerProductDiscount(storeCustomerProductDiscount));
@PreAuthorize("@ss.hasPermi('system:customer:list')")
@ApiOperation(value = "新增客户销售定价时,根据入参查询是否已存在优惠", httpMethod = "POST", response = R.class)
@PostMapping("/exists")
public R discountExist(@Validated @RequestBody StoreCusProdDiscExistVO existVO) {
storeCusProdDiscService.discountExist(BeanUtil.toBean(existVO, StoreCusProdDiscExistDTO.class));
return R.ok();
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:discount:remove')")
@Log(title = "档口客户优惠", businessType = BusinessType.DELETE)
@DeleteMapping("/{storeCusProdDiscIds}")
public R remove(@PathVariable Long[] storeCusProdDiscIds) {
return success(storeCusProdDiscountSvc.deleteStoreCustomerProductDiscountByStoreCusProdDiscIds(storeCusProdDiscIds));
}
}

View File

@ -0,0 +1,52 @@
package com.ruoyi.web.controller.xkt.vo.storeCusProdDiscount;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口客户批量减价、批量抹零")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreCusProdBatchDiscountVO {
@NotNull(message = "档口ID不能为空!")
@ApiModelProperty(name = "档口ID")
private Long storeId;
@NotNull(message = "优惠列表不能为空!")
@Valid
@ApiModelProperty(value = "优惠列表", required = true)
List<DiscountItemVO> discountList;
@Data
@ApiModel(value = "档口优惠列表")
public static class DiscountItemVO {
@NotNull(message = "档口商品ID不能为空!")
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@NotNull(message = "档口商品颜色ID不能为空!")
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@NotNull(message = "优惠金额不能为空!")
@ApiModelProperty(value = "优惠金额", required = true)
private Integer discount;
@NotNull(message = "档口客户ID不能为空!")
@ApiModelProperty(value = "档口ID", required = true)
private Long storeCusId;
@ApiModelProperty(value = "档口客户名称", required = true)
@NotBlank(message = "档口客户名称不能为空!")
private String storeCusName;
}
}

View File

@ -0,0 +1,58 @@
package com.ruoyi.web.controller.xkt.vo.storeCusProdDiscount;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口客户批量减价、批量抹零")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreCusProdDiscExistVO {
@NotNull(message = "档口ID不能为空!")
@ApiModelProperty(name = "档口ID")
private Long storeId;
@NotNull(message = "优惠列表不能为空!")
@Valid
@ApiModelProperty(value = "优惠列表", required = true)
List<DiscountItemVO> discountList;
@Data
@ApiModel(value = "档口优惠列表")
public static class DiscountItemVO {
@NotNull(message = "档口商品ID不能为空!")
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@NotBlank(message = "商品货号不能为空!")
@ApiModelProperty(name = "商品货号")
private String prodArtNum;
@ApiModelProperty(name = "商品颜色名称")
@NotBlank(message = "商品颜色名称不能为空!")
private String colorName;
@NotNull(message = "档口商品颜色ID不能为空!")
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@NotNull(message = "优惠金额不能为空!")
@ApiModelProperty(value = "优惠金额", required = true)
private Integer discount;
@NotNull(message = "档口客户ID不能为空!")
@ApiModelProperty(value = "档口客户ID", required = true)
private Long storeCusId;
@NotBlank(message = "档口客户名称不能为空!")
@ApiModelProperty(value = "档口客户名称", required = true)
private String storeCusName;
}
}

View File

@ -0,0 +1,29 @@
package com.ruoyi.web.controller.xkt.vo.storeCusProdDiscount;
import com.ruoyi.web.controller.xkt.vo.BasePageVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("档口客户销售分页查询入参")
@Data
public class StoreCusProdDiscPageVO extends BasePageVO {
@ApiModelProperty(value = "客户名称")
private String cusName;
@ApiModelProperty(value = "商品货号")
private String prodArtNum;
@ApiModelProperty(value = "档口ID", required = true)
@NotNull(message = "档口ID不能为空")
private Long storeId;
}

View File

@ -33,6 +33,6 @@ public class StoreCusProdDiscountVO {
private String phone;
@NotNull(message = "优惠金额不能为空!")
@ApiModelProperty(value = "优惠金额", required = true)
private BigDecimal discount;
private Integer discount;
}

View File

@ -30,6 +30,9 @@ public class StoreCusVO {
@ApiModelProperty(value = "客户联系电话")
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "联系电话格式不正确,请输入有效的中国大陆手机号")
private String phone;
@NotNull(message = "大小码加价不能为空!")
@ApiModelProperty(value = "大小码加价 0 不加 1加价", required = true)
private Integer addOverPrice;
@ApiModelProperty(value = "备注")
private String remark;

View File

@ -50,6 +50,10 @@ public class StoreCustomer extends XktBaseEntity {
@Excel(name = "客户备注")
private String remark;
/**
* 0 1
*/
private Integer addOverPrice;
@Override

View File

@ -59,7 +59,7 @@ public class StoreCustomerProductDiscount extends XktBaseEntity {
*
*/
@Excel(name = "优惠金额")
private BigDecimal discount;
private Integer discount;
@Override

View File

@ -0,0 +1,43 @@
package com.ruoyi.xkt.dto.storeCusProdDiscount;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口客户批量减价、批量抹零")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreCusProdBatchDiscountDTO {
@ApiModelProperty(name = "档口ID")
private Long storeId;
@ApiModelProperty(value = "优惠列表")
private List<DiscountItemDTO> discountList;
@Data
@Valid
@ApiModel(value = "档口优惠列表")
public static class DiscountItemDTO {
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(value = "优惠金额")
private Integer discount;
@ApiModelProperty(value = "档口ID")
private Long storeCusId;
@ApiModelProperty(value = "档口客户名称")
private String storeCusName;
}
}

View File

@ -0,0 +1,46 @@
package com.ruoyi.xkt.dto.storeCusProdDiscount;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口客户批量减价、批量抹零")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreCusProdDiscExistDTO {
@ApiModelProperty(name = "档口ID")
private Long storeId;
@ApiModelProperty(value = "优惠列表")
List<DiscountItemDTO> discountList;
@Data
@ApiModel(value = "档口优惠列表")
public static class DiscountItemDTO {
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "商品货号")
private String prodArtNum;
@ApiModelProperty(name = "商品颜色名称")
private String colorName;
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(value = "优惠金额")
private Integer discount;
@ApiModelProperty(value = "档口客户ID")
private Long storeCusId;
@ApiModelProperty(value = "档口客户名称")
private String storeCusName;
}
}

View File

@ -0,0 +1,26 @@
package com.ruoyi.xkt.dto.storeCusProdDiscount;
import com.ruoyi.xkt.dto.BasePageDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("档口客户销售分页查询入参")
@Data
public class StoreCusProdDiscPageDTO extends BasePageDTO {
@ApiModelProperty(value = "客户名称")
private String cusName;
@ApiModelProperty(value = "商品货号")
private String prodArtNum;
@ApiModelProperty(value = "档口ID")
private Long storeId;
}

View File

@ -0,0 +1,40 @@
package com.ruoyi.xkt.dto.storeCusProdDiscount;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口客户销售管理分页数据")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreCusProdDiscPageResDTO {
@ApiModelProperty(value = "档口客户商品优惠ID")
private Long storeCusProdDiscId;
@ApiModelProperty(value = "档口ID")
private Long storeId;
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "档口客户ID")
private Long storeCusId;
@ApiModelProperty(name = "档口客户名称")
private String storeCusName;
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(name = "优惠金额")
private Integer discount;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}

View File

@ -28,6 +28,6 @@ public class StoreCusProdDiscountDTO {
@ApiModelProperty(value = "客户联系电话")
private String phone;
@ApiModelProperty(value = "优惠金额")
private BigDecimal discount;
private Integer discount;
}

View File

@ -26,6 +26,8 @@ public class StoreCusDTO {
private String cusName;
@ApiModelProperty(value = "客户联系电话")
private String phone;
@ApiModelProperty(value = "大小码加价 0 不加 1加价")
private Integer addOverPrice;
@ApiModelProperty("备注")
private String remark;

View File

@ -7,7 +7,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Date;
/**
@ -20,16 +19,17 @@ import java.util.Date;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreCusPageResDTO {
@ApiModelProperty(value = "档口客户ID", notes = "新增为空,编辑必传")
@ApiModelProperty(value = "档口客户ID")
@JsonProperty("storeCusId")
private Long id;
@ApiModelProperty(value = "档口ID")
private Long storeId;
@NotBlank(message = "客户名称不能为空!")
@ApiModelProperty(value = "客户名称")
private String cusName;
@ApiModelProperty(value = "客户联系电话")
private String phone;
@ApiModelProperty(value = "大小码加价 0 不加 1加价")
private Integer addOverPrice;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("创建时间")

View File

@ -2,6 +2,8 @@ package com.ruoyi.xkt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.xkt.domain.StoreCustomerProductDiscount;
import com.ruoyi.xkt.dto.storeCusProdDiscount.StoreCusProdDiscPageDTO;
import com.ruoyi.xkt.dto.storeCusProdDiscount.StoreCusProdDiscPageResDTO;
import java.util.List;
@ -12,51 +14,7 @@ import java.util.List;
* @date 2025-03-26
*/
public interface StoreCustomerProductDiscountMapper extends BaseMapper<StoreCustomerProductDiscount> {
/**
*
*
* @param id
* @return
*/
public StoreCustomerProductDiscount selectStoreCustomerProductDiscountByStoreCusProdDiscId(Long id);
/**
*
*
* @param storeCustomerProductDiscount
* @return
*/
public List<StoreCustomerProductDiscount> selectStoreCustomerProductDiscountList(StoreCustomerProductDiscount storeCustomerProductDiscount);
List<StoreCusProdDiscPageResDTO> selectDiscPage(StoreCusProdDiscPageDTO pageDTO);
/**
*
*
* @param storeCustomerProductDiscount
* @return
*/
public int insertStoreCustomerProductDiscount(StoreCustomerProductDiscount storeCustomerProductDiscount);
/**
*
*
* @param storeCustomerProductDiscount
* @return
*/
public int updateStoreCustomerProductDiscount(StoreCustomerProductDiscount storeCustomerProductDiscount);
/**
*
*
* @param id
* @return
*/
public int deleteStoreCustomerProductDiscountByStoreCusProdDiscId(Long id);
/**
*
*
* @param storeCusProdDiscIds
* @return
*/
public int deleteStoreCustomerProductDiscountByStoreCusProdDiscIds(Long[] storeCusProdDiscIds);
}

View File

@ -1,9 +1,7 @@
package com.ruoyi.xkt.service;
import com.ruoyi.xkt.domain.StoreCustomerProductDiscount;
import com.ruoyi.xkt.dto.storeCusProdDiscount.StoreCusProdDiscountDTO;
import java.util.List;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.xkt.dto.storeCusProdDiscount.*;
/**
* Service
@ -12,29 +10,6 @@ import java.util.List;
* @date 2025-03-26
*/
public interface IStoreCustomerProductDiscountService {
/**
*
*
* @param storeCusProdDiscId
* @return
*/
public StoreCustomerProductDiscount selectStoreCustomerProductDiscountByStoreCusProdDiscId(Long storeCusProdDiscId);
/**
*
*
* @param storeCustomerProductDiscount
* @return
*/
public List<StoreCustomerProductDiscount> selectStoreCustomerProductDiscountList(StoreCustomerProductDiscount storeCustomerProductDiscount);
/**
*
*
* @param storeCustomerProductDiscount
* @return
*/
public int insertStoreCustomerProductDiscount(StoreCustomerProductDiscount storeCustomerProductDiscount);
/**
*
@ -42,21 +17,29 @@ public interface IStoreCustomerProductDiscountService {
* @param cusProdDisDTO
* @return
*/
public Integer updateStoreCusProdDiscount(StoreCusProdDiscountDTO cusProdDisDTO);
Integer updateStoreCusProdDiscount(StoreCusProdDiscountDTO cusProdDisDTO);
/**
*
*
*
* @param storeCusProdDiscIds
* @return
* @param batchDiscDTO
* @return Integer
*/
public int deleteStoreCustomerProductDiscountByStoreCusProdDiscIds(Long[] storeCusProdDiscIds);
Integer batchDiscount(StoreCusProdBatchDiscountDTO batchDiscDTO);
/**
*
*
*
* @param storeCusProdDiscId
* @return
* @param pageDTO
* @return Page<StoreCusProdDiscPageResDTO>
*/
public int deleteStoreCustomerProductDiscountByStoreCusProdDiscId(Long storeCusProdDiscId);
Page<StoreCusProdDiscPageResDTO> selectPage(StoreCusProdDiscPageDTO pageDTO);
/**
*
* @param existDTO DTO
* @return String
*/
void discountExist(StoreCusProdDiscExistDTO existDTO);
}

View File

@ -22,7 +22,7 @@ public interface IStoreCustomerService {
* @param storeCusId
* @return
*/
public StoreCusDTO selectStoreCustomerByStoreCusId(Long storeCusId);
public StoreCusDTO selectByStoreCusId(Long storeCusId);
/**
*

View File

@ -2,14 +2,16 @@ package com.ruoyi.xkt.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.xkt.domain.StoreCustomer;
import com.ruoyi.xkt.domain.StoreCustomerProductDiscount;
import com.ruoyi.xkt.domain.StoreProductColor;
import com.ruoyi.xkt.dto.storeCusProdDiscount.StoreCusProdDiscountDTO;
import com.ruoyi.xkt.dto.storeCusProdDiscount.*;
import com.ruoyi.xkt.mapper.StoreCustomerMapper;
import com.ruoyi.xkt.mapper.StoreCustomerProductDiscountMapper;
import com.ruoyi.xkt.mapper.StoreProductColorMapper;
@ -20,10 +22,11 @@ import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -36,7 +39,7 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class StoreCustomerProductDiscountServiceImpl implements IStoreCustomerProductDiscountService {
final StoreCustomerProductDiscountMapper cusProdDiscountMapper;
final StoreCustomerProductDiscountMapper cusProdDiscMapper;
final StoreCustomerMapper storeCusMapper;
final StoreProductColorMapper storeProdColorMapper;
@ -57,13 +60,13 @@ public class StoreCustomerProductDiscountServiceImpl implements IStoreCustomerPr
}
StoreCustomer storeCus = CollectionUtils.isNotEmpty(storeCusList) ? storeCusList.get(0) : this.createStoreCustomer(cusProdDisDTO);
// 获取当前档口客户已有的优惠
List<StoreCustomerProductDiscount> cusProdDisList = Optional.ofNullable(cusProdDiscountMapper.selectList(new LambdaQueryWrapper<StoreCustomerProductDiscount>()
List<StoreCustomerProductDiscount> cusProdDisList = Optional.ofNullable(cusProdDiscMapper.selectList(new LambdaQueryWrapper<StoreCustomerProductDiscount>()
.eq(StoreCustomerProductDiscount::getStoreCusName, cusProdDisDTO.getStoreCusName()).eq(StoreCustomerProductDiscount::getDelFlag, Constants.UNDELETED)
.eq(StoreCustomerProductDiscount::getStoreId, cusProdDisDTO.getStoreId()))).orElse(new ArrayList<>());
// 已存在优惠但优惠额度低于当前优惠,则更新该部分优惠
List<StoreCustomerProductDiscount> updateList = cusProdDisList.stream()
// 找到所有优惠低于当前优惠额度的列表
.filter(x -> cusProdDisDTO.getDiscount().compareTo(ObjectUtils.defaultIfNull(x.getDiscount(), BigDecimal.ZERO)) > 0)
.filter(x -> cusProdDisDTO.getDiscount().compareTo(ObjectUtils.defaultIfNull(x.getDiscount(), 0)) > 0)
// 更新最新的优惠
.peek(x -> x.setDiscount(cusProdDisDTO.getDiscount())).collect(Collectors.toList());
// 已有优惠的id
@ -81,69 +84,104 @@ public class StoreCustomerProductDiscountServiceImpl implements IStoreCustomerPr
updateList.addAll(addDiscountList);
}
// 更新及新增当前客户优惠
return this.cusProdDiscountMapper.insertOrUpdate(updateList).size();
return this.cusProdDiscMapper.insertOrUpdate(updateList).size();
}
/**
*
*
* @param batchDiscDTO
* @return Integer
*/
@Override
@Transactional
public Integer batchDiscount(StoreCusProdBatchDiscountDTO batchDiscDTO) {
// 获取当前客户已有优惠列表
List<StoreCustomerProductDiscount> prodCusDiscList = this.cusProdDiscMapper.selectList(new LambdaQueryWrapper<StoreCustomerProductDiscount>()
.in(StoreCustomerProductDiscount::getStoreCusId, batchDiscDTO.getDiscountList().stream()
.map(StoreCusProdBatchDiscountDTO.DiscountItemDTO::getStoreCusId).distinct().collect(Collectors.toList()))
.eq(StoreCustomerProductDiscount::getDelFlag, Constants.UNDELETED)
.eq(StoreCustomerProductDiscount::getStoreId, batchDiscDTO.getStoreId())
.in(StoreCustomerProductDiscount::getStoreProdColorId, batchDiscDTO.getDiscountList().stream()
.map(StoreCusProdBatchDiscountDTO.DiscountItemDTO::getStoreProdColorId).distinct().collect(Collectors.toList())));
// 数据库已有的客户优惠map
Map<String, StoreCustomerProductDiscount> prodCusDiscMap = prodCusDiscList.stream().collect(Collectors
.toMap(item -> item.getStoreCusId().toString() + item.getStoreProdColorId().toString(), Function.identity()));
// 最新的优惠金额
List<StoreCustomerProductDiscount> updateList = new ArrayList<>();
// 入参优惠列表
batchDiscDTO.getDiscountList().forEach(itemDTO -> {
// 如果已存在优惠则叠加
if (prodCusDiscMap.containsKey(itemDTO.getStoreCusId().toString() + itemDTO.getStoreProdColorId().toString())) {
StoreCustomerProductDiscount prodColorDisc = prodCusDiscMap.get(itemDTO.getStoreCusId().toString() + itemDTO.getStoreProdColorId().toString());
// 优惠金额进行累加
prodColorDisc.setDiscount(ObjectUtils.defaultIfNull(prodColorDisc.getDiscount(), 0) + ObjectUtils.defaultIfNull(itemDTO.getDiscount(), 0));
updateList.add(prodColorDisc);
// 不存在优惠则新增
} else {
// 新增优惠
updateList.add(new StoreCustomerProductDiscount() {{
setDiscount(itemDTO.getDiscount());
setStoreId(batchDiscDTO.getStoreId());
setStoreCusName(itemDTO.getStoreCusName());
setStoreCusId(itemDTO.getStoreCusId());
setStoreProdColorId(itemDTO.getStoreProdColorId());
setStoreProdId(itemDTO.getStoreProdId());
}});
}
});
if (CollectionUtils.isEmpty(updateList)) {
return 0;
}
return this.cusProdDiscMapper.updateById(updateList).size();
}
/**
*
*
*
* @param storeCusProdDiscId
* @return
* @param pageDTO
* @return Page<StoreCusProdDiscPageResDTO>
*/
@Override
@Transactional(readOnly = true)
public StoreCustomerProductDiscount selectStoreCustomerProductDiscountByStoreCusProdDiscId(Long storeCusProdDiscId) {
return cusProdDiscountMapper.selectStoreCustomerProductDiscountByStoreCusProdDiscId(storeCusProdDiscId);
public Page<StoreCusProdDiscPageResDTO> selectPage(StoreCusProdDiscPageDTO pageDTO) {
PageHelper.startPage(pageDTO.getPageNum(), pageDTO.getPageSize());
List<StoreCusProdDiscPageResDTO> list = this.cusProdDiscMapper.selectDiscPage(pageDTO);
return Page.convert(new PageInfo<>(list));
}
/**
*
*
*
* @param storeCustomerProductDiscount
* @return
* @param existDTO DTO
* @return String
*/
@Override
@Transactional(readOnly = true)
public List<StoreCustomerProductDiscount> selectStoreCustomerProductDiscountList(StoreCustomerProductDiscount storeCustomerProductDiscount) {
return cusProdDiscountMapper.selectStoreCustomerProductDiscountList(storeCustomerProductDiscount);
}
/**
*
*
* @param storeCustomerProductDiscount
* @return
*/
@Override
@Transactional
public int insertStoreCustomerProductDiscount(StoreCustomerProductDiscount storeCustomerProductDiscount) {
storeCustomerProductDiscount.setCreateTime(DateUtils.getNowDate());
return cusProdDiscountMapper.insertStoreCustomerProductDiscount(storeCustomerProductDiscount);
}
/**
*
*
* @param storeCusProdDiscIds
* @return
*/
@Override
@Transactional
public int deleteStoreCustomerProductDiscountByStoreCusProdDiscIds(Long[] storeCusProdDiscIds) {
return cusProdDiscountMapper.deleteStoreCustomerProductDiscountByStoreCusProdDiscIds(storeCusProdDiscIds);
}
/**
*
*
* @param storeCusProdDiscId
* @return
*/
@Override
@Transactional
public int deleteStoreCustomerProductDiscountByStoreCusProdDiscId(Long storeCusProdDiscId) {
return cusProdDiscountMapper.deleteStoreCustomerProductDiscountByStoreCusProdDiscId(storeCusProdDiscId);
public void discountExist(StoreCusProdDiscExistDTO existDTO) {
List<StoreCustomerProductDiscount> discountList = this.cusProdDiscMapper.selectList(new LambdaQueryWrapper<StoreCustomerProductDiscount>()
.eq(StoreCustomerProductDiscount::getStoreId, existDTO.getStoreId())
.in(StoreCustomerProductDiscount::getStoreProdColorId, existDTO.getDiscountList().stream().map(StoreCusProdDiscExistDTO.DiscountItemDTO::getStoreProdColorId).collect(Collectors.toList()))
.in(StoreCustomerProductDiscount::getStoreCusId, existDTO.getDiscountList().stream().map(StoreCusProdDiscExistDTO.DiscountItemDTO::getStoreCusId).collect(Collectors.toList()))
.eq(StoreCustomerProductDiscount::getDelFlag, Constants.UNDELETED));
if (CollectionUtils.isEmpty(discountList)) {
return;
}
StringBuilder sb = new StringBuilder();
// 判断存在哪些优惠,给与提示
Map<String, StoreCustomerProductDiscount> existDiscMap = discountList.stream().collect(Collectors
.toMap(x -> x.getStoreCusId().toString() + x.getStoreProdColorId().toString(), Function.identity()));
// 根据入参一次确认
existDTO.getDiscountList().forEach(x -> {
final String existKey = x.getStoreCusId().toString() + x.getStoreProdColorId().toString();
if (existDiscMap.containsKey(existKey)) {
sb.append("客户:").append(x.getStoreCusName()).append("、商品:").append(x.getProdArtNum()).append(x.getColorName())
.append("、已存在优惠:").append(existDiscMap.get(existKey).getDiscount()).append("元").append("\n");
}
});
if (sb.length() > 0) {
throw new ServiceException(sb.toString(), HttpStatus.ERROR);
}
}
/**

View File

@ -111,7 +111,7 @@ public class StoreCustomerServiceImpl implements IStoreCustomerService {
*/
@Override
@Transactional(readOnly = true)
public StoreCusDTO selectStoreCustomerByStoreCusId(Long storeCusId) {
public StoreCusDTO selectByStoreCusId(Long storeCusId) {
StoreCustomer storeCus = Optional.ofNullable(storeCusMapper.selectOne(new LambdaQueryWrapper<StoreCustomer>()
.eq(StoreCustomer::getId, storeCusId).eq(StoreCustomer::getDelFlag, Constants.UNDELETED)))
.orElseThrow(() -> new ServiceException("档口客户不存在!", HttpStatus.ERROR));

View File

@ -55,7 +55,7 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService {
final StoreProductColorPriceMapper prodColorPriceMapper;
final StoreProductFileMapper prodFileMapper;
final StoreProductCategoryAttributeMapper prodCateAttrMapper;
final StoreCertificateMapper storeCertMapper;
/**
*
@ -213,6 +213,9 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService {
Store store = Optional.ofNullable(this.storeMapper.selectOne(new LambdaQueryWrapper<Store>()
.eq(Store::getId, storeId).eq(Store::getDelFlag, Constants.UNDELETED)))
.orElseThrow(() -> new ServiceException("档口不存在!", HttpStatus.ERROR));
// 档口认证
StoreCertificate storeCert = this.storeCertMapper.selectOne(new LambdaQueryWrapper<StoreCertificate>()
.eq(StoreCertificate::getStoreId, storeId).eq(StoreCertificate::getDelFlag, Constants.UNDELETED));
// 获取商品基本信息
StoreProduct storeProd = Optional.ofNullable(this.storeProdMapper.selectOne(new LambdaQueryWrapper<StoreProduct>()
.eq(StoreProduct::getId, storeProdId).eq(StoreProduct::getDelFlag, Constants.UNDELETED)
@ -281,7 +284,8 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService {
.setFileUrl(fileMap.get(x.getFileId()).getFileUrl()).setFileSize(fileMap.get(x.getFileId()).getFileSize()) : decorationDTO;
}).collect(Collectors.toList());
return new StoreHomeProdResDTO() {{
setStore(BeanUtil.toBean(store, StoreBasicDTO.class).setStoreId(storeId));
setStore(BeanUtil.toBean(store, StoreBasicDTO.class).setStoreId(storeId)
.setLicenseName(ObjectUtils.isNotEmpty(storeCert) ? storeCert.getLicenseName() : null));
setStoreProd(storeProdDTO);
setStoreProdStatusCount(statusCountDTO);
setRecommendedList(recommendedList);

View File

@ -37,8 +37,6 @@ import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.ruoyi.common.constant.Constants.ORDER_NUM_1;
/**
* Service
*

View File

@ -93,4 +93,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="selectDiscPage" resultType="com.ruoyi.xkt.dto.storeCusProdDiscount.StoreCusProdDiscPageResDTO">
SELECT
scpd.id AS storeCusProdDiscId,
sp.prod_art_num AS prodArtNum,
scpd.store_id AS storeId,
scpd.store_prod_id AS storeProdId,
scpd.store_cus_id AS storeCusId,
scpd.store_cus_name AS storeCusName,
scpd.store_prod_color_id AS storeProdColorId,
scpd.discount,
scpd.update_time
FROM
store_customer_product_discount scpd
LEFT JOIN store_product sp ON scpd.store_prod_id = sp.id
WHERE
scpd.del_flag = 0 AND scpd.store_id = #{storeId}
<if test="cusName != null and cusName != ''"> AND scpd.store_cus_name = #{cusName}</if>
<if test="prodArtNum != null and prodArtNum != ''"> AND sp.prod_art_num like concat('%', #{prodArtNum}, '%')</if>
</select>
</mapper>