master:条码功能完善;
parent
b9f117069e
commit
7d7728766b
|
|
@ -1,6 +1,23 @@
|
|||
package com.ruoyi.web.controller.xkt;
|
||||
|
||||
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.enums.BusinessType;
|
||||
import com.ruoyi.web.controller.xkt.vo.storeProdColorSize.StoreSaleSnResVO;
|
||||
import com.ruoyi.web.controller.xkt.vo.storeProdColorSize.StoreProdSnVO;
|
||||
import com.ruoyi.web.controller.xkt.vo.storeProdColorSize.StoreSaleSnVO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdSnDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnDTO;
|
||||
import com.ruoyi.xkt.service.IStoreProductColorSizeService;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
|
@ -10,8 +27,40 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
* @author ruoyi
|
||||
* @date 2025-03-26
|
||||
*/
|
||||
@ApiModel(value = "商品条码处理")
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/rest/v1/prod-color-sizes")
|
||||
public class StoreProductColorSizeController extends XktBaseController {
|
||||
|
||||
final IStoreProductColorSizeService prodColorSizeService;
|
||||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
|
||||
@Log(title = "[销售出库]根据条码查询商品信息", businessType = BusinessType.INSERT)
|
||||
@ApiOperation(value = "[销售出库]根据条码查询商品信息", httpMethod = "POST", response = R.class)
|
||||
@PostMapping("/sn/store-sale")
|
||||
public R<StoreSaleSnResVO> storeSaleSn(@Validated @RequestBody StoreSaleSnVO snVO) {
|
||||
return R.ok(BeanUtil.toBean(prodColorSizeService.storeSaleSn(BeanUtil.toBean(snVO, StoreSaleSnDTO.class)), StoreSaleSnResVO.class));
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
|
||||
@Log(title = "[商品入库、库存盘点]根据条码查询商品信息", businessType = BusinessType.INSERT)
|
||||
@ApiOperation(value = "[商品入库、库存盘点]根据条码查询商品信息", httpMethod = "POST", response = R.class)
|
||||
@PostMapping("/sn")
|
||||
public R<StoreSaleSnResVO> sn(@Validated @RequestBody StoreProdSnVO snVO) {
|
||||
return R.ok(BeanUtil.toBean(prodColorSizeService.sn(BeanUtil.toBean(snVO, StoreProdSnDTO.class)), StoreSaleSnResVO.class));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO 档口扫描货号,获取商品信息
|
||||
// TODO 档口扫描货号,获取商品信息
|
||||
// TODO 档口扫描货号,获取商品信息
|
||||
|
||||
|
||||
// TODO 打印条码
|
||||
// TODO 打印条码
|
||||
// TODO 打印条码
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,12 +39,6 @@ public class StoreSaleController extends XktBaseController {
|
|||
|
||||
final IStoreSaleService storeSaleService;
|
||||
|
||||
|
||||
// TODO 提醒杰、销售明细 增加 支付方式显示
|
||||
// TODO 提醒杰、销售明细 增加 支付方式显示
|
||||
// TODO 提醒杰、销售明细 增加 支付方式显示
|
||||
|
||||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
|
||||
@ApiOperation(value = "根据当前客户查询最近的销售业绩,以及欠款金额", httpMethod = "GET", response = R.class)
|
||||
@GetMapping("/cus-overall")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
package com.ruoyi.web.controller.xkt.vo.storeProdColorSize;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class StoreProdSnResVO {
|
||||
|
||||
@ApiModelProperty(value = "错误列表")
|
||||
List<String> failList;
|
||||
@ApiModelProperty(value = "成功列表")
|
||||
List<SPSDetailVO> successList;
|
||||
|
||||
@Data
|
||||
public static class SPSDetailVO {
|
||||
@ApiModelProperty(value = "档口商品ID")
|
||||
private Long storeProdId;
|
||||
@ApiModelProperty(value = "档口商品颜色尺码ID")
|
||||
private Long storeProdColorId;
|
||||
@ApiModelProperty(value = "颜色")
|
||||
private String colorName;
|
||||
@ApiModelProperty(value = "尺码")
|
||||
private Integer size;
|
||||
@ApiModelProperty(value = "商品货号")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "销售条码")
|
||||
private String sn;
|
||||
@ApiModelProperty(value = "销售单价")
|
||||
private BigDecimal price;
|
||||
@ApiModelProperty(value = "档口客户优惠金额")
|
||||
private BigDecimal discount;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package com.ruoyi.web.controller.xkt.vo.storeProdColorSize;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class StoreProdSnVO {
|
||||
|
||||
@NotNull(message = "档口ID不能为空!")
|
||||
@ApiModelProperty(value = "档口ID", required = true)
|
||||
private String storeId;
|
||||
@NotNull(message = "条码列表不能为空!")
|
||||
@ApiModelProperty(value = "条码列表", required = true)
|
||||
private List<String> snList;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.ruoyi.web.controller.xkt.vo.storeProdColorSize;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class StoreSaleSnResVO {
|
||||
|
||||
@ApiModelProperty(value = "是否成功")
|
||||
private Boolean success;
|
||||
@ApiModelProperty(value = "档口商品ID")
|
||||
private Long storeProdId;
|
||||
@ApiModelProperty(value = "档口商品颜色尺码ID")
|
||||
private Long storeProdColorId;
|
||||
@ApiModelProperty(value = "颜色")
|
||||
private String colorName;
|
||||
@ApiModelProperty(value = "尺码")
|
||||
private Integer size;
|
||||
@ApiModelProperty(value = "商品货号")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "销售条码")
|
||||
private String sn;
|
||||
@ApiModelProperty(value = "销售单价")
|
||||
private BigDecimal price;
|
||||
@ApiModelProperty(value = "档口客户优惠金额")
|
||||
private BigDecimal discount;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package com.ruoyi.web.controller.xkt.vo.storeProdColorSize;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class StoreSaleSnVO {
|
||||
|
||||
@NotNull(message = "档口ID不能为空!")
|
||||
@ApiModelProperty(value = "档口ID", required = true)
|
||||
private String storeId;
|
||||
@NotNull(message = "档口客户ID不能为空!")
|
||||
@ApiModelProperty(value = "档口客户ID", required = true)
|
||||
private Long storeCusId;
|
||||
@NotNull(message = "是否退货不能为空!")
|
||||
@ApiModelProperty(value = "是否退货", required = true)
|
||||
private Boolean refund;
|
||||
@NotBlank(message = "条码不能为空!")
|
||||
@ApiModelProperty(value = "条码")
|
||||
private String sn;
|
||||
|
||||
}
|
||||
|
|
@ -47,6 +47,8 @@ public class StoreProdStockAndDiscountResVO {
|
|||
public static class SPSADSizeVO {
|
||||
@ApiModelProperty(value = "尺码")
|
||||
private Integer size;
|
||||
@ApiModelProperty(value = "是否是标准尺码")
|
||||
private Integer standard;
|
||||
@ApiModelProperty(value = "库存")
|
||||
private Integer stock;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,10 +62,12 @@ public class StoreSaleResVO {
|
|||
private String colorName;
|
||||
@ApiModelProperty(value = "尺码")
|
||||
private Integer size;
|
||||
@ApiModelProperty(value = "大小码加价 0 不加 1加价")
|
||||
private Integer addOverPrice;
|
||||
@ApiModelProperty(value = "商品货号")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "销售条码")
|
||||
private String sns;
|
||||
private String sn;
|
||||
@ApiModelProperty(value = "销售单价")
|
||||
private BigDecimal price;
|
||||
@ApiModelProperty(value = "给客户优惠后单价")
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ public class StoreSaleVO {
|
|||
@NotBlank(message = "商品货号不能为空!")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "销售条码")
|
||||
private String sns;
|
||||
private String sn;
|
||||
@NotNull(message = "销售单价不能为空!")
|
||||
@ApiModelProperty(value = "销售单价", required = true)
|
||||
private BigDecimal price;
|
||||
|
|
|
|||
|
|
@ -617,4 +617,43 @@ INSERT INTO `sys_product_category` VALUES (47, '人字拖', 8, 3, '0', 'https://
|
|||
INSERT INTO `sys_product_category` VALUES (48, '一字拖', 8, 4, '0', 'https://pics1.baidu.com/feed/6609c93d70cf3bc758366c966adb10aecc112a85.png@f_auto?token=89fe04971fb0579147e9ccc52683a013', '', 0, '0', '', '2025-04-15 19:57:04', '', '2025-04-15 19:57:04');
|
||||
INSERT INTO `sys_product_category` VALUES (49, '其他拖鞋', 8, 5, '0', 'https://pics1.baidu.com/feed/6609c93d70cf3bc758366c966adb10aecc112a85.png@f_auto?token=89fe04971fb0579147e9ccc52683a013', '', 0, '0', '', '2025-04-15 19:57:12', '', '2025-04-15 19:57:12');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for store
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `store`;
|
||||
CREATE TABLE `store` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '档口ID',
|
||||
`user_id` bigint UNSIGNED NOT NULL COMMENT '档口负责人ID',
|
||||
`store_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '档口名称',
|
||||
`store_weight` int NULL DEFAULT NULL COMMENT '权重',
|
||||
`store_logo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '档口logo',
|
||||
`brand_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '品牌名称',
|
||||
`contact_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系人',
|
||||
`contact_phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话',
|
||||
`contact_back_phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备选联系电话',
|
||||
`wechat_account` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信账号',
|
||||
`qq_account` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'QQ账号',
|
||||
`alipay_account` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支付宝账号',
|
||||
`operate_years` int UNSIGNED NULL DEFAULT NULL COMMENT '经营年限',
|
||||
`store_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '档口地址',
|
||||
`fac_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '工厂地址',
|
||||
`prod_scale` tinyint UNSIGNED NULL DEFAULT NULL COMMENT '生产规模',
|
||||
`integrity_gold` decimal(10, 2) NULL DEFAULT NULL COMMENT '保证金',
|
||||
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`trial_end_time` date NULL DEFAULT NULL COMMENT '试用截止时间',
|
||||
`storage_usage` decimal(10, 3) NULL DEFAULT NULL COMMENT '已使用文件大小',
|
||||
`template_num` int UNSIGNED NULL DEFAULT NULL COMMENT '档口模板ID',
|
||||
`store_status` tinyint UNSIGNED NULL DEFAULT NULL COMMENT '档口状态',
|
||||
`reject_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '拒绝理由',
|
||||
`version` bigint UNSIGNED NOT NULL COMMENT '版本号',
|
||||
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '删除标志(0代表存在 2代表删除)',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 10001 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '档口' ROW_FORMAT = Dynamic;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
|
@ -44,35 +44,22 @@ public class StoreProductColorSize extends XktBaseEntity {
|
|||
@Excel(name = "商品尺码")
|
||||
private Integer size;
|
||||
/**
|
||||
* 档口商品颜色尺码的前缀
|
||||
* 档口商品颜色尺码的前缀 1000100000001 xxxx
|
||||
*/
|
||||
@Excel(name = "档口商品颜色尺码的前缀")
|
||||
private String barcodePrefix;
|
||||
private String snPrefix;
|
||||
/**
|
||||
* 其它系统商品颜色尺码前缀 4260003836 xxx
|
||||
*/
|
||||
private String otherSnPrefix;
|
||||
/**
|
||||
* 下一个编号
|
||||
*/
|
||||
private Integer nextBarcode;
|
||||
private Integer nextSn;
|
||||
/**
|
||||
* 是否是标准尺码(0不是 1是)
|
||||
*/
|
||||
@Excel(name = "是否是标准尺码", readConverterExp = "0=不是,1=是")
|
||||
private Integer standard;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("id", getId())
|
||||
.append("storeColorId", getStoreColorId())
|
||||
.append("storeProdId", getStoreProdId())
|
||||
.append("size", getSize())
|
||||
.append("barcodePrefix", getBarcodePrefix())
|
||||
.append("standard", getStandard())
|
||||
.append("version", getVersion())
|
||||
.append("delFlag", getDelFlag())
|
||||
.append("createBy", getCreateBy())
|
||||
.append("createTime", getCreateTime())
|
||||
.append("updateBy", getUpdateBy())
|
||||
.append("updateTime", getUpdateTime())
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,15 @@ public class StoreSaleDetail extends XktBaseEntity {
|
|||
*/
|
||||
@Excel(name = "档口商品销售ID")
|
||||
private Long storeSaleId;
|
||||
/**
|
||||
* 档口客户ID
|
||||
*/
|
||||
@Excel(name = "档口客户ID")
|
||||
private Long storeCusId;
|
||||
/**
|
||||
* 档口客户名称呢
|
||||
*/
|
||||
private String storeCusName;
|
||||
/**
|
||||
* 档口ID
|
||||
*/
|
||||
|
|
@ -96,7 +105,7 @@ public class StoreSaleDetail extends XktBaseEntity {
|
|||
* 条码
|
||||
*/
|
||||
@Excel(name = "条码")
|
||||
private String sns;
|
||||
private String sn;
|
||||
/**
|
||||
* 单据日期
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
package com.ruoyi.xkt.dto.storeProdColorSize;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class StoreProdSnDTO {
|
||||
|
||||
@ApiModelProperty(value = "档口ID")
|
||||
private String storeId;
|
||||
@ApiModelProperty(value = "条码列表")
|
||||
private List<String> snList;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package com.ruoyi.xkt.dto.storeProdColorSize;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class StoreProdSnResDTO {
|
||||
|
||||
@ApiModelProperty(value = "错误列表")
|
||||
List<String> failList;
|
||||
@ApiModelProperty(value = "成功列表")
|
||||
List<SPSDetailDTO> successList;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class SPSDetailDTO {
|
||||
@ApiModelProperty(value = "档口商品ID")
|
||||
private Long storeProdId;
|
||||
@ApiModelProperty(value = "档口商品颜色尺码ID")
|
||||
private Long storeProdColorId;
|
||||
@ApiModelProperty(value = "颜色")
|
||||
private String colorName;
|
||||
@ApiModelProperty(value = "尺码")
|
||||
private Integer size;
|
||||
@ApiModelProperty(value = "商品货号")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "条码前缀")
|
||||
private String snPrefix;
|
||||
@ApiModelProperty(value = "销售条码")
|
||||
private String sn;
|
||||
@ApiModelProperty(value = "销售单价")
|
||||
private BigDecimal price;
|
||||
@ApiModelProperty(value = "档口客户优惠金额")
|
||||
private BigDecimal discount;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.ruoyi.xkt.dto.storeProdColorSize;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class StoreSaleSnDTO {
|
||||
|
||||
@ApiModelProperty(value = "档口ID")
|
||||
private String storeId;
|
||||
@ApiModelProperty(value = "档口客户ID")
|
||||
private Long storeCusId;
|
||||
@ApiModelProperty(value = "是否退货")
|
||||
private Boolean refund;
|
||||
@ApiModelProperty(value = "条码")
|
||||
private String sn;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package com.ruoyi.xkt.dto.storeProdColorSize;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class StoreSaleSnResDTO {
|
||||
|
||||
@ApiModelProperty(value = "是否成功")
|
||||
private Boolean success;
|
||||
@ApiModelProperty(value = "档口商品ID")
|
||||
private Long storeProdId;
|
||||
@ApiModelProperty(value = "档口商品颜色尺码ID")
|
||||
private Long storeProdColorId;
|
||||
@ApiModelProperty(value = "颜色")
|
||||
private String colorName;
|
||||
@ApiModelProperty(value = "尺码")
|
||||
private Integer size;
|
||||
@ApiModelProperty(value = "商品货号")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "销售条码")
|
||||
private String sn;
|
||||
@ApiModelProperty(value = "销售单价")
|
||||
private BigDecimal price;
|
||||
@ApiModelProperty(value = "档口客户优惠金额")
|
||||
private BigDecimal discount;
|
||||
|
||||
}
|
||||
|
|
@ -47,6 +47,8 @@ public class StoreProdStockAndDiscountResDTO {
|
|||
public static class SPSADSizeDTO {
|
||||
@ApiModelProperty(value = "尺码")
|
||||
private Integer size;
|
||||
@ApiModelProperty(value = "是否是标准尺码")
|
||||
private Integer standard;
|
||||
@ApiModelProperty(value = "库存")
|
||||
private Integer stock;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public class StoreSaleDTO {
|
|||
@ApiModelProperty(value = "商品货号")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "销售条码")
|
||||
private String sns;
|
||||
private String sn;
|
||||
@ApiModelProperty(value = "销售单价")
|
||||
private BigDecimal price;
|
||||
@ApiModelProperty(value = "给客户优惠后单价")
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
|
|||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
|
@ -51,6 +52,7 @@ public class StoreSaleResDTO {
|
|||
private List<SSDetailDTO> detailList;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class SSDetailDTO {
|
||||
@ApiModelProperty(value = "档口商品ID")
|
||||
private Long storeProdId;
|
||||
|
|
@ -62,10 +64,12 @@ public class StoreSaleResDTO {
|
|||
private String colorName;
|
||||
@ApiModelProperty(value = "尺码")
|
||||
private Integer size;
|
||||
@ApiModelProperty(value = "大小码加价 0 不加 1加价")
|
||||
private Integer addOverPrice;
|
||||
@ApiModelProperty(value = "商品货号")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "销售条码")
|
||||
private String sns;
|
||||
private String sn;
|
||||
@ApiModelProperty(value = "销售单价")
|
||||
private BigDecimal price;
|
||||
@ApiModelProperty(value = "给客户优惠后单价")
|
||||
|
|
|
|||
|
|
@ -2,8 +2,10 @@ package com.ruoyi.xkt.mapper;
|
|||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.xkt.domain.StoreProductColorSize;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdColorSizeDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdSizeDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdSnResDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnResDTO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -17,6 +19,11 @@ import java.util.List;
|
|||
@Repository
|
||||
public interface StoreProductColorSizeMapper extends BaseMapper<StoreProductColorSize> {
|
||||
|
||||
/**
|
||||
* 将商品颜色价格尺码置为无效
|
||||
*
|
||||
* @param storeProdId 档口商品ID
|
||||
*/
|
||||
void updateDelFlagByStoreProdId(Long storeProdId);
|
||||
|
||||
/**
|
||||
|
|
@ -27,4 +34,31 @@ public interface StoreProductColorSizeMapper extends BaseMapper<StoreProductColo
|
|||
*/
|
||||
List<StoreProdSizeDTO> selectListByStoreProdId(Long storeProdId);
|
||||
|
||||
/**
|
||||
* 查询步橘网的条码信息
|
||||
*
|
||||
* @param snPrefix 条码前缀
|
||||
* @param storeId 档口ID
|
||||
* @param storeCusId 档口客户ID
|
||||
* @return StoreSaleBarcodeResDTO
|
||||
*/
|
||||
StoreSaleSnResDTO selectSn(@Param("snPrefix") String snPrefix, @Param("storeId") String storeId, @Param("storeCusId") Long storeCusId);
|
||||
|
||||
/**
|
||||
* 查询其它系统条码信息
|
||||
*
|
||||
* @param snPrefix 条码前缀
|
||||
* @param storeId 档口ID
|
||||
* @param storeCusId 档口客户ID
|
||||
* @return StoreSaleBarcodeResDTO
|
||||
*/
|
||||
StoreSaleSnResDTO selectOtherSn(@Param("snPrefix") String snPrefix, @Param("storeId") String storeId, @Param("storeCusId") Long storeCusId);
|
||||
|
||||
/**
|
||||
* 查询普通商品的条码信息
|
||||
*
|
||||
* @param snList 条码列表
|
||||
* @return List<StoreProdSnsResDTO.SPSDetailDTO>
|
||||
*/
|
||||
List<StoreProdSnResDTO.SPSDetailDTO> selectSnList(@Param("snList") List<String> snList, @Param("storeId") String storeId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package com.ruoyi.xkt.mapper;
|
|||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.xkt.domain.StoreSaleDetail;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnResDTO;
|
||||
|
||||
/**
|
||||
* 档口销售明细Mapper接口
|
||||
|
|
@ -11,4 +13,10 @@ import com.ruoyi.xkt.domain.StoreSaleDetail;
|
|||
*/
|
||||
public interface StoreSaleDetailMapper extends BaseMapper<StoreSaleDetail> {
|
||||
|
||||
/**
|
||||
* 根据条码查询档口销售明细销售记录
|
||||
* @param barcodeDTO 条码信息
|
||||
* @return
|
||||
*/
|
||||
StoreSaleSnResDTO selectBySn(StoreSaleSnDTO barcodeDTO);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
package com.ruoyi.xkt.service;
|
||||
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdSnDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdSnResDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnResDTO;
|
||||
|
||||
/**
|
||||
* 档口商品颜色的尺码Service接口
|
||||
*
|
||||
|
|
@ -8,4 +13,19 @@ package com.ruoyi.xkt.service;
|
|||
*/
|
||||
public interface IStoreProductColorSizeService {
|
||||
|
||||
/**
|
||||
* 查询条码 对应的商品信息
|
||||
*
|
||||
* @param barcodeDTO 查询入参
|
||||
* @return StoreProdColorSizeBarcodeResDTO
|
||||
*/
|
||||
StoreSaleSnResDTO storeSaleSn(StoreSaleSnDTO barcodeDTO);
|
||||
|
||||
/**
|
||||
* 商品入库、库存盘点查询库存
|
||||
*
|
||||
* @param snsDTO 条码入参
|
||||
* @return StoreProdSnsResDTO
|
||||
*/
|
||||
StoreProdSnResDTO sn(StoreProdSnDTO snsDTO);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,24 @@
|
|||
package com.ruoyi.xkt.service.impl;
|
||||
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdSnDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdSnResDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnDTO;
|
||||
import com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnResDTO;
|
||||
import com.ruoyi.xkt.mapper.StoreProductColorSizeMapper;
|
||||
import com.ruoyi.xkt.mapper.StoreSaleDetailMapper;
|
||||
import com.ruoyi.xkt.service.IStoreProductColorSizeService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 档口商品颜色的尺码Service业务层处理
|
||||
|
|
@ -10,6 +27,121 @@ import org.springframework.stereotype.Service;
|
|||
* @date 2025-03-26
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class StoreProductColorSizeServiceImpl implements IStoreProductColorSizeService {
|
||||
|
||||
final StoreProductColorSizeMapper prodColorSizeMapper;
|
||||
final StoreSaleDetailMapper saleDetailMapper;
|
||||
|
||||
// 纯数字
|
||||
private static final Pattern POSITIVE_PATTERN = Pattern.compile("^\\d+$");
|
||||
|
||||
/**
|
||||
* 查询条码 对应的商品信息
|
||||
*
|
||||
* @param snDTO 查询入参
|
||||
* @return StoreProdColorSizeBarcodeResDTO
|
||||
*/
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public StoreSaleSnResDTO storeSaleSn(StoreSaleSnDTO snDTO) {
|
||||
// 非纯数字,则直接返回
|
||||
if (!POSITIVE_PATTERN.matcher(snDTO.getSn()).matches()) {
|
||||
return new StoreSaleSnResDTO().setSuccess(Boolean.FALSE).setSn(snDTO.getSn());
|
||||
}
|
||||
// 销售出库[退货]
|
||||
if (snDTO.getRefund()) {
|
||||
// 先查storeSaleDetail中的sns条码是否存在[可能同一个条码,被一个客户多次销售、退货,则取最近的一条]
|
||||
StoreSaleSnResDTO barcodeResDTO = this.saleDetailMapper.selectBySn(snDTO);
|
||||
if (ObjectUtils.isNotEmpty(barcodeResDTO)) {
|
||||
return barcodeResDTO.setSuccess(Boolean.TRUE);
|
||||
} else {
|
||||
// 若是没查询到数据,则走正常条码查询流程
|
||||
return this.getSnInfo(snDTO);
|
||||
}
|
||||
// 销售出库[销售] 正常条码查询流程
|
||||
} else {
|
||||
return this.getSnInfo(snDTO);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品入库、库存盘点查询库存
|
||||
*
|
||||
* @param snDTO 条码入参
|
||||
* @return StoreProdSnsResDTO
|
||||
*/
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public StoreProdSnResDTO sn(StoreProdSnDTO snDTO) {
|
||||
// 非纯数字的条码
|
||||
List<String> failList = snDTO.getSnList().stream().filter(s -> !POSITIVE_PATTERN.matcher(s).matches()).collect(Collectors.toList());
|
||||
|
||||
List<StoreProdSnResDTO.SPSDetailDTO> successList = new ArrayList<>();
|
||||
// 步橘网系统的条码
|
||||
List<String> snList = snDTO.getSnList().stream().filter(s -> POSITIVE_PATTERN.matcher(s).matches())
|
||||
.filter(x -> x.startsWith(snDTO.getStoreId())).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(snList)) {
|
||||
// 截取前13位 作为条码查询条件
|
||||
Set<String> pre13SnSet = snList.stream().map(x -> x.substring(0, 13)).collect(Collectors.toSet());
|
||||
List<StoreProdSnResDTO.SPSDetailDTO> existList = prodColorSizeMapper.selectSnList(new ArrayList<>(pre13SnSet), snDTO.getStoreId());
|
||||
Map<String, StoreProdSnResDTO.SPSDetailDTO> existMap = existList.stream().collect(Collectors.toMap(StoreProdSnResDTO.SPSDetailDTO::getSn, x -> x));
|
||||
snList.forEach(sn -> {
|
||||
String snPrefix = sn.substring(0, 13);
|
||||
StoreProdSnResDTO.SPSDetailDTO exist = existMap.get(snPrefix);
|
||||
if (ObjectUtils.isNotEmpty(exist)) {
|
||||
successList.add( exist.setSn(sn));
|
||||
} else {
|
||||
failList.add( sn);
|
||||
}
|
||||
});
|
||||
}
|
||||
// 其它系统的条码
|
||||
List<String> otherSnList = snDTO.getSnList().stream().filter(s -> POSITIVE_PATTERN.matcher(s).matches())
|
||||
.filter(x -> !x.startsWith(snDTO.getStoreId())).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(otherSnList)) {
|
||||
|
||||
// 从系统设置中获取,根据系统迁移时的配置
|
||||
final Integer otherSysEndIndex = 9;
|
||||
|
||||
// 截取前 xxx 位 作为条码查询条件
|
||||
Set<String> preIndexSnSet = snList.stream().map(x -> x.substring(0, otherSysEndIndex)).collect(Collectors.toSet());
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 普通销售流程获取条码对应的商品信息
|
||||
*
|
||||
* @param snDTO 条码入参
|
||||
* @return StoreSaleBarcodeResDTO
|
||||
*/
|
||||
private StoreSaleSnResDTO getSnInfo(StoreSaleSnDTO snDTO) {
|
||||
StoreSaleSnResDTO barcodeResDTO;
|
||||
// 步橘网生成的条码
|
||||
if (snDTO.getSn().startsWith(snDTO.getStoreId())) {
|
||||
final String snsPrefix = snDTO.getSn().substring(0, 13);
|
||||
// 查询数据库 获取条码对应的商品信息
|
||||
barcodeResDTO = prodColorSizeMapper.selectSn(snsPrefix, snDTO.getStoreId(), snDTO.getStoreCusId());
|
||||
} else {
|
||||
|
||||
// 从系统设置中获取,根据系统迁移时的配置
|
||||
final Integer otherSysEndIndex = 9;
|
||||
|
||||
final String snsPrefix = snDTO.getSn().substring(0, otherSysEndIndex);
|
||||
// 查询数据库 获取条码对应的商品信息
|
||||
barcodeResDTO = prodColorSizeMapper.selectOtherSn(snsPrefix, snDTO.getStoreId(), snDTO.getStoreCusId());
|
||||
}
|
||||
return ObjectUtils.isEmpty(barcodeResDTO) ? new StoreSaleSnResDTO().setSuccess(Boolean.FALSE).setSn(snDTO.getSn())
|
||||
: barcodeResDTO.setSuccess(Boolean.TRUE).setSn(snDTO.getSn());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -473,6 +473,9 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
this.storeProdColorPriceMapper.insert(prodColorPriceList);
|
||||
this.storeProdColorSizeMapper.insert(prodColorSizeList);
|
||||
this.storeProdColorMapper.insert(prodColorList);
|
||||
// 设置档口商品价格尺码的barcode_prefix
|
||||
prodColorSizeList.forEach(x -> x.setSnPrefix(storeId + String.format("%08d", x.getId())));
|
||||
this.storeProdColorSizeMapper.updateById(prodColorSizeList);
|
||||
// 设置了档口商品全部优惠的客户,新增商品优惠
|
||||
this.createStoreCusDiscount(prodColorList, storeProdId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
|
|||
.eq(StoreProductColorSize::getStoreProdId, basicInfoDTO.getStoreProdId()).eq(StoreProductColorSize::getStoreColorId, basicInfoDTO.getStoreColorId())
|
||||
.eq(StoreProductColorSize::getDelFlag, Constants.UNDELETED));
|
||||
List<StoreProdStockAndDiscountResDTO.SPSADSizeDTO> sizeStockList = prodColorSizeList.stream().map(size -> new StoreProdStockAndDiscountResDTO.SPSADSizeDTO()
|
||||
.setSize(size.getSize()).setStock(this.getSizeStock(size.getSize(), stock))).collect(Collectors.toList());
|
||||
.setSize(size.getSize()).setStandard(size.getStandard()).setStock(this.getSizeStock(size.getSize(), stock))).collect(Collectors.toList());
|
||||
return basicInfoDTO.setStoreCusId(dto.getStoreCusId()).setStoreId(dto.getStoreId()).setSizeStockList(sizeStockList);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
|
|||
final StoreSaleRefundRecordMapper refundRecordMapper;
|
||||
final StoreSaleRefundRecordDetailMapper refundRecordDetailMapper;
|
||||
final IStoreProductStockService storeProdStockService;
|
||||
final StoreProductMapper storeProdMapper;
|
||||
|
||||
/**
|
||||
* 获取当前档口客户的销售业绩
|
||||
|
|
@ -268,8 +269,8 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
|
|||
int count = storeSaleMapper.insert(storeSale);
|
||||
// 处理订单明细
|
||||
List<StoreSaleDetail> saleDetailList = storeSaleDTO.getDetailList().stream().map(x -> {
|
||||
StoreSaleDetail saleDetail = BeanUtil.toBean(x, StoreSaleDetail.class).setStoreSaleId(storeSale.getId())
|
||||
.setStoreId(storeSale.getStoreId()).setVoucherDate(voucherDate);
|
||||
StoreSaleDetail saleDetail = BeanUtil.toBean(x, StoreSaleDetail.class).setStoreSaleId(storeSale.getId()).setStoreId(storeSale.getStoreId())
|
||||
.setVoucherDate(voucherDate).setStoreCusId(storeSale.getStoreCusId()).setStoreCusName(storeSale.getStoreCusName());
|
||||
saleDetail.setCreateBy(loginUser.getUsername());
|
||||
return saleDetail;
|
||||
}).collect(Collectors.toList());
|
||||
|
|
@ -311,12 +312,12 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
|
|||
// 若为返单,则将之前数据记录到返单记录表中
|
||||
if (Objects.equals(storeSaleDTO.getRefund(), Boolean.TRUE)) {
|
||||
// 订单记录到StoreSaleRefundRecord
|
||||
StoreSaleRefundRecord refundRecord = BeanUtil.toBean(storeSale, StoreSaleRefundRecord.class).setStoreSaleId(storeSale.getId())
|
||||
.setOperatorId(loginUser.getUserId()).setOperatorName(loginUser.getUsername());
|
||||
StoreSaleRefundRecord refundRecord = BeanUtil.toBean(storeSale, StoreSaleRefundRecord.class).setId(null)
|
||||
.setStoreSaleId(storeSale.getId()).setOperatorId(loginUser.getUserId()).setOperatorName(loginUser.getUsername());
|
||||
this.refundRecordMapper.insert(refundRecord);
|
||||
// 明细记录到StoreSaleRefundRecordDetail
|
||||
List<StoreSaleRefundRecordDetail> refundDetailRecordList = saleDetailList.stream().map(x -> BeanUtil.toBean(x, StoreSaleRefundRecordDetail.class)
|
||||
.setStoreSaleRefundRecordId(refundRecord.getId())).collect(Collectors.toList());
|
||||
.setId(null).setStoreSaleRefundRecordId(refundRecord.getId())).collect(Collectors.toList());
|
||||
this.refundRecordDetailMapper.insert(refundDetailRecordList);
|
||||
}
|
||||
// 更新档口销售数据
|
||||
|
|
@ -337,7 +338,8 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
|
|||
this.storeSaleDetailMapper.updateById(saleDetailList.stream().peek(x -> x.setDelFlag(Constants.DELETED)).collect(Collectors.toList()));
|
||||
// 再新增档口销售出库明细数据
|
||||
List<StoreSaleDetail> detailList = storeSaleDTO.getDetailList().stream().map(x -> BeanUtil.toBean(x, StoreSaleDetail.class)
|
||||
.setStoreSaleId(storeSale.getId()).setStoreId(storeSale.getStoreId()).setVoucherDate(voucherDate))
|
||||
.setStoreSaleId(storeSale.getId()).setStoreId(storeSale.getStoreId()).setStoreCusId(storeSale.getStoreCusId())
|
||||
.setStoreCusName(storeSale.getStoreCusName()).setVoucherDate(voucherDate))
|
||||
.collect(Collectors.toList());
|
||||
this.storeSaleDetailMapper.insert(detailList);
|
||||
// 汇总编辑的存货总数量
|
||||
|
|
@ -374,7 +376,11 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
|
|||
// 查询销售出库明细
|
||||
List<StoreSaleDetail> saleDetailList = this.storeSaleDetailMapper.selectList(new LambdaQueryWrapper<StoreSaleDetail>()
|
||||
.eq(StoreSaleDetail::getStoreSaleId, storeSaleId).eq(StoreSaleDetail::getDelFlag, Constants.UNDELETED));
|
||||
storeSaleDTO.setDetailList(saleDetailList.stream().map(x -> BeanUtil.toBean(x, StoreSaleResDTO.SSDetailDTO.class)).collect(Collectors.toList()));
|
||||
List<StoreProduct> storeProdList = this.storeProdMapper.selectByIds(saleDetailList.stream().map(StoreSaleDetail::getStoreProdId).collect(Collectors.toList()));
|
||||
Map<Long, StoreProduct> storeProdMap = storeProdList.stream().collect(Collectors.toMap(StoreProduct::getId, x -> x));
|
||||
storeSaleDTO.setDetailList(saleDetailList.stream().map(x -> BeanUtil.toBean(x, StoreSaleResDTO.SSDetailDTO.class)
|
||||
.setAddOverPrice(ObjectUtils.isNotEmpty(storeProdMap.get(x.getStoreProdId())) ? storeProdMap.get(x.getStoreProdId()).getOverPrice() : 0))
|
||||
.collect(Collectors.toList()));
|
||||
return storeSaleDTO;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,71 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
AND spcs.store_prod_id = #{storeProdId}
|
||||
ORDER BY
|
||||
spcs.size
|
||||
</select>
|
||||
|
||||
<select id="selectSn" resultType="com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnResDTO">
|
||||
SELECT
|
||||
spcs.store_prod_id,
|
||||
spc.id AS storeProdColorId,
|
||||
spc.color_name,
|
||||
spcs.size,
|
||||
sp.prod_art_num,
|
||||
spcp.price,
|
||||
( SELECT discount FROM store_customer_product_discount WHERE store_cus_id = #{storeCusId} AND store_prod_color_id = spc.id AND del_flag = 0 ) AS discount
|
||||
FROM
|
||||
store_product_color_size spcs
|
||||
LEFT JOIN store_product_color_price spcp ON spcs.store_prod_id = spcp.store_prod_id AND spcs.store_color_id = spcp.store_color_id AND spcp.del_flag = 0
|
||||
LEFT JOIN store_product sp ON spcs.store_prod_id = sp.id
|
||||
LEFT JOIN store_product_color spc ON spcs.store_color_id = spc.store_color_id AND spcs.store_prod_id = spc.store_prod_id AND spc.del_flag = 0
|
||||
WHERE
|
||||
spcs.del_flag = 0
|
||||
AND spcs.sn_prefix = #{snPrefix}
|
||||
AND sp.store_id = #{storeId}
|
||||
</select>
|
||||
|
||||
<select id="selectOtherSn" resultType="com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnResDTO">
|
||||
SELECT
|
||||
spcs.store_prod_id,
|
||||
spc.id AS storeProdColorId,
|
||||
spc.color_name,
|
||||
spcs.size,
|
||||
sp.prod_art_num,
|
||||
spcp.price,
|
||||
( SELECT discount FROM store_customer_product_discount WHERE store_cus_id = #{storeCusId} AND store_prod_color_id = spc.id AND del_flag = 0 ) AS discount
|
||||
FROM
|
||||
store_product_color_size spcs
|
||||
LEFT JOIN store_product_color_price spcp ON spcs.store_prod_id = spcp.store_prod_id AND spcs.store_color_id = spcp.store_color_id AND spcp.del_flag = 0
|
||||
LEFT JOIN store_product sp ON spcs.store_prod_id = sp.id
|
||||
LEFT JOIN store_product_color spc ON spcs.store_color_id = spc.store_color_id AND spcs.store_prod_id = spc.store_prod_id AND spc.del_flag = 0
|
||||
WHERE
|
||||
spcs.del_flag = 0
|
||||
AND spcs.other_sn_prefix = #{snPrefix}
|
||||
AND sp.store_id = #{storeId}
|
||||
</select>
|
||||
|
||||
<select id="selectSnList">
|
||||
SELECT
|
||||
spcs.store_prod_id,
|
||||
spc.id AS storeProdColorId,
|
||||
spc.color_name,
|
||||
spcs.size,
|
||||
sp.prod_art_num,
|
||||
spcp.price,
|
||||
spcs.sn_prefix,
|
||||
( SELECT discount FROM store_customer_product_discount WHERE store_cus_id = #{storeCusId} AND store_prod_color_id = spc.id AND del_flag = 0 ) AS discount
|
||||
FROM
|
||||
store_product_color_size spcs
|
||||
LEFT JOIN store_product_color_price spcp ON spcs.store_prod_id = spcp.store_prod_id AND spcs.store_color_id = spcp.store_color_id AND spcp.del_flag = 0
|
||||
LEFT JOIN store_product sp ON spcs.store_prod_id = sp.id
|
||||
LEFT JOIN store_product_color spc ON spcs.store_color_id = spc.store_color_id AND spcs.store_prod_id = spc.store_prod_id AND spc.del_flag = 0
|
||||
WHERE
|
||||
spcs.del_flag = 0
|
||||
AND sp.store_id = #{storeId}
|
||||
AND spcs.sn_prefix IN
|
||||
<foreach item="item" index="index" collection="snList" separator="," open="(" close=")" >
|
||||
#{item}
|
||||
</foreach>
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
|
|
|
|||
|
|
@ -4,5 +4,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.xkt.mapper.StoreSaleDetailMapper">
|
||||
|
||||
<select id="selectBySn" resultType="com.ruoyi.xkt.dto.storeProdColorSize.StoreSaleSnResDTO">
|
||||
SELECT
|
||||
ssd.store_prod_id,
|
||||
ssd.store_prod_color_id,
|
||||
ssd.color_name,
|
||||
ssd.size,
|
||||
ssd.prod_art_num,
|
||||
ssd.price,
|
||||
ssd.discounted_price,
|
||||
ssd.quantity,
|
||||
ssd.amount,
|
||||
ssd.other_discount
|
||||
FROM
|
||||
store_sale_detail ssd
|
||||
WHERE
|
||||
ssd.del_flag = 0
|
||||
AND ssd.sn = #{sn}
|
||||
AND ssd.store_id = #{storeId}
|
||||
AND ssd.store_cus_id = #{storeCusId}
|
||||
ORDER BY
|
||||
ssd.update_time DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue