yangyb vor 3 Wochen
Ursprung
Commit
d5b291d9da

+ 17 - 6
mall-service/src/main/java/com/txz/mall/controller/OrderController.java

@@ -8,7 +8,6 @@ import com.txz.mall.model.StoreOrder;
 import com.txz.mall.service.StoreOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.hibernate.validator.constraints.Range;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.*;
@@ -139,11 +138,9 @@ public class OrderController {
     }
 
     @ApiOperation(value = "获取订单各状态数量")
-    @GetMapping(value = "/status/num")
-    public Result<StoreOrderCountItemVO> getOrderStatusNum(
-            @RequestParam(value = "dateLimit", defaultValue = "") String dateLimit,
-            @RequestParam(value = "type", defaultValue = "2") @Range(min = 0, max = 2, message = "未知的订单类型") Integer type) {
-        return Result.success(storeOrderService.getOrderStatusNum(dateLimit, type));
+    @PostMapping(value = "/status/num")
+    public Result<StoreOrderCountItemVO> getOrderStatusNum() {
+        return Result.success(storeOrderService.getOrderStatusNum());
     }
 
     @ApiOperation("导出订单")
@@ -153,6 +150,20 @@ public class OrderController {
         return Result.success();
     }
 
+    @ApiOperation("关闭订单")
+    @PostMapping("/close")
+    public Result close(@RequestParam("ids") List<Long> ids) {
+//        storeOrderService.close(ids);
+        return Result.success();
+    }
+
+    @ApiOperation("联系用户")
+    @PostMapping("/contactUser")
+    public Result contactUser(@RequestParam("userId") Long userId) {
+//        storeOrderService.contactUser(userId);
+        return Result.success();
+    }
+
     @ApiOperation("批量发货")
     @PostMapping("/batchDelivery")
     public Result batchDelivery(@RequestParam("ids") List<Long> ids) {

+ 3 - 0
mall-service/src/main/java/com/txz/mall/controller/PinkController.java

@@ -112,6 +112,9 @@ public class PinkController {
         Example.Criteria criteria = condition.createCriteria();
         criteria.andEqualTo("isDelete", 0);
         condition.setOrderByClause("create_time DESC");
+        if (storePink.getPid() != null) {
+            criteria.andEqualTo("pid", storePink.getPid());
+        }
         PageInfo pageInfo = null;
         try {
             List<StorePink> list = storePinkService.findByCondition(condition);

+ 4 - 12
mall-service/src/main/java/com/txz/mall/controller/ProductController.java

@@ -65,22 +65,14 @@ public class ProductController {
 
     @PostMapping("/update")
     @ApiOperation(value = "商品更新")
-    public Result update(@RequestBody StoreProduct storeProduct) {
-        if (storeProduct == null) {
+    public Result update(@RequestBody @Validated StoreProductAddRequest request) {
+        if (request == null) {
             return Result.fail(ResultCode.OBJECT_IS_NULL);
         }
-        if (storeProduct.getId() == null) {
+        if (request.getId() == null) {
             return Result.fail(ResultCode.ID_IS_NULL);
         }
-
-        try {
-            storeProduct.setUpdateTime(new Date());
-//            storeProduct.setUpdateUserId(userId);
-            storeProductService.update(storeProduct);
-        } catch (Exception e) {
-            log.error("更新对象操作异常e:{}", e);
-            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
-        }
+        storeProductService.update(request);
         return Result.success();
     }
 

+ 4 - 0
mall-service/src/main/java/com/txz/mall/model/ProductAttr.java

@@ -37,6 +37,10 @@ public class ProductAttr {
     @ApiModelProperty(value = "属性值")
     private String attrValues;
 
+    @Column(name = "attr_img_values")
+    @ApiModelProperty(value = "属性值")
+    private String attrImgValues;
+
     /**
      * 活动类型 0=商品,1=秒杀,2=砍价,3=拼团
      */

+ 2 - 2
mall-service/src/main/java/com/txz/mall/model/StoreOrder.java

@@ -117,7 +117,7 @@ public class StoreOrder {
     /**
      * 支付状态
      */
-    @ApiModelProperty(value = "支付状态")
+    @ApiModelProperty(value = "支付状态 0-待付款  1-已付款")
     private Integer paid;
 
     /**
@@ -144,7 +144,7 @@ public class StoreOrder {
     /**
      * 订单状态(0:待发货;1:待收货;2:已收货,待评价;3:已完成;)
      */
-    @ApiModelProperty(value = "订单状态(0:待发货;1:待收货;2:已收货,待评价;3:已完成;)")
+    @ApiModelProperty(value = "订单状态(0:待发货;1:待收货;3:已完成; 4:已关闭  5:已取消)")
     private Integer status;
 
     /**

+ 1 - 4
mall-service/src/main/java/com/txz/mall/service/StoreOrderService.java

@@ -17,12 +17,9 @@ public interface StoreOrderService extends Service<StoreOrder> {
     /**
      * 获取订单状态数量
      *
-     * @param dateLimit 时间端
-     * @param type      订单类型:0普通订单,1-视频号订单, 2-全部订单
      * @return StoreOrderCountItemResponse
      */
-    StoreOrderCountItemVO getOrderStatusNum(String dateLimit, Integer type);
-
+    StoreOrderCountItemVO getOrderStatusNum();
 
     /**
      * 导出订单

+ 8 - 0
mall-service/src/main/java/com/txz/mall/service/StoreProductService.java

@@ -49,4 +49,12 @@ public interface StoreProductService extends Service<StoreProduct> {
      * @return 添加结果
      */
     void save(StoreProductAddRequest request);
+
+    /**
+     * 商品更新
+     *
+     * @param request 商品更新参数
+     * @return 更新结果
+     */
+    void update(StoreProductAddRequest request);
 }

+ 11 - 13
mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java

@@ -38,11 +38,9 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     private StoreOrderMapper storeOrderMapper;
 
     @Override
-    public StoreOrderCountItemVO getOrderStatusNum(String dateLimit, Integer type) {
+    public StoreOrderCountItemVO getOrderStatusNum() {
         StoreOrderCountItemVO response = new StoreOrderCountItemVO();
-        if (type.equals(2)) {
-            type = null;
-        }
+        int type = 2;
         // 全部订单
         response.setAll(getCount(Constants.ORDER_STATUS_ALL, type));
         // 未支付订单
@@ -51,18 +49,18 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         response.setNotShipped(getCount(Constants.ORDER_STATUS_NOT_SHIPPED, type));
         // 待收货订单
         response.setSpike(getCount(Constants.ORDER_STATUS_SPIKE, type));
-        // 待评价订单
-        response.setBargain(getCount(Constants.ORDER_STATUS_BARGAIN, type));
-        // 交易完成订单
-        response.setComplete(getCount(Constants.ORDER_STATUS_COMPLETE, type));
-        // 待核销订单
-        response.setToBeWrittenOff(getCount(Constants.ORDER_STATUS_TOBE_WRITTEN_OFF, type));
-        // 退款中订单
-        response.setRefunding(getCount(Constants.ORDER_STATUS_REFUNDING, type));
+//        // 待评价订单
+//        response.setBargain(getCount(Constants.ORDER_STATUS_BARGAIN, type));
+//        // 交易完成订单
+//        response.setComplete(getCount(Constants.ORDER_STATUS_COMPLETE, type));
+//        // 待核销订单
+//        response.setToBeWrittenOff(getCount(Constants.ORDER_STATUS_TOBE_WRITTEN_OFF, type));
+//        // 退款中订单
+//        response.setRefunding(getCount(Constants.ORDER_STATUS_REFUNDING, type));
         // 已退款订单
         response.setRefunded(getCount(Constants.ORDER_STATUS_REFUNDED, type));
         // 已删除订单
-        response.setDeleted(getCount(Constants.ORDER_STATUS_DELETED, type));
+//        response.setDeleted(getCount(Constants.ORDER_STATUS_DELETED, type));
         return response;
     }
 

+ 67 - 14
mall-service/src/main/java/com/txz/mall/service/impl/StoreProductServiceImpl.java

@@ -5,7 +5,9 @@ import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.alibaba.fastjson.parser.Feature;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.txz.mall.constants.Constants;
@@ -31,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 import tk.mybatis.mapper.entity.Condition;
 import tk.mybatis.mapper.entity.Example;
+import vo.AttrVO;
 import vo.AttrValueVO;
 import vo.StoreProductCountItemVO;
 import vo.StoreProductInfoVO;
@@ -111,7 +114,15 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
         }
 
         List<ProductAttr> attrList = attrService.getListByProductIdAndType(storeProduct.getId(), Constants.PRODUCT_TYPE_NORMAL);
-        storeProductResponse.setAttr(attrList);
+        List<AttrVO> attrResponseList = attrList.stream().map(e -> {
+            AttrVO attrResponse = new AttrVO();
+            BeanUtils.copyProperties(e, attrResponse);
+            List<Object> stringList = JSON.parseObject(e.getAttrImgValues(), new TypeReference<List<Object>>() {
+            });
+            attrResponse.setAttrImgValues(stringList);
+            return attrResponse;
+        }).collect(Collectors.toList());
+        storeProductResponse.setAttr(attrResponseList);
 
         List<ProductAttrValue> attrValueList = attrValueService.getListByProductIdAndType(storeProduct.getId(), Constants.PRODUCT_TYPE_NORMAL);
         List<AttrValueVO> valueResponseList = attrValueList.stream().map(e -> {
@@ -185,8 +196,22 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
         return response;
     }
 
+    @Override
     @Transactional
     public void save(StoreProductAddRequest request) {
+        if (request.getId() != null) {
+            throw new ServiceException("商品已存在");
+        }
+        assignAttributes(request, 0);
+    }
+
+    /**
+     * 添加商品属性
+     *
+     * @param request 商品参数
+     * @param status  商品状态  0-添加  1-修改
+     */
+    private void assignAttributes(StoreProductAddRequest request, Integer status) {
         // 多规格需要校验规格参数
         if (request.getSpecType().equals(0)) {
             if (request.getAttrValue().size() > 1) {
@@ -195,9 +220,6 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
         }
         StoreProduct storeProduct = new StoreProduct();
         BeanUtils.copyProperties(request, storeProduct);
-        storeProduct.setId(null);
-        storeProduct.setIsShow(0);
-
         // 设置activity活动
         storeProduct.setActivity(getProductActivityStr(request.getActivity()));
         //主图
@@ -217,12 +239,18 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
         storeProduct.setCost(minAttrValue.getCost());
         storeProduct.setStock(attrValueAddRequestList.stream().mapToInt(StoreProductAttrValueAddRequest::getStock).sum());
 
+        if (StringUtils.isBlank(storeProduct.getItemNumber())) {
+            String itemNumber = generateItemNumber(storeProduct.getCateId());
+            storeProduct.setItemNumber(itemNumber);
+        }
+
         Date date = new Date();
         List<StoreProductAttrAddRequest> addRequestList = request.getAttr();
         List<ProductAttr> attrList = addRequestList.stream().map(e -> {
             ProductAttr attr = new ProductAttr();
             BeanUtils.copyProperties(e, attr);
             attr.setType(Constants.PRODUCT_TYPE_NORMAL);
+            attr.setAttrImgValues(JSONObject.toJSONString(e.getAttrImgValues()));
             attr.setCreateTime(date);
             attr.setIsDelete(0);
             return attr;
@@ -232,17 +260,21 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
             ProductAttrValue attrValue = new ProductAttrValue();
             BeanUtils.copyProperties(e, attrValue);
             attrValue.setId(null);
-            attrValue.setStockThreshold(0);
+            if (attrValue.getStockThreshold() == null) {
+                attrValue.setStockThreshold(0);
+            }
             attrValue.setSales(0);
+            attrValue.setQuota(0);
+            attrValue.setQuotaShow(0);
             // 生成sku  根据传进来spu再加当前时分秒
-            LocalTime now = LocalTime.now();
-            attrValue.setSkuCode(request.getItemNumber() + now.getHour() + now.getMinute());
+            if (StringUtils.isBlank(e.getSkuCode())) {
+                LocalTime now = LocalTime.now();
+                attrValue.setSkuCode(request.getItemNumber() + now.getHour() + now.getMinute());
+            }
             attrValue.setPrice(e.getPrice());
             attrValue.setCost(e.getPrice());
-            attrValue.setOtPrice(e.getPrice());
+            attrValue.setOtPrice(e.getOtPrice());
             attrValue.setSuk(getSku(e.getAttrValue()));
-            attrValue.setQuota(0);
-            attrValue.setQuotaShow(0);
             attrValue.setType(Constants.PRODUCT_TYPE_NORMAL);
             attrValue.setImage(e.getImage());
             attrValue.setIsDelete(0);
@@ -250,11 +282,26 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
             return attrValue;
         }).collect(Collectors.toList());
 
-        if (StringUtils.isBlank(storeProduct.getItemNumber())) {
-            String itemNumber = generateItemNumber(storeProduct.getCateId());
-            storeProduct.setItemNumber(itemNumber);
+        if (status.equals(0)) {
+            storeProduct.setId(null);
+            storeProduct.setIsShow(0);
+            save(storeProduct);
+        } else {
+            update(storeProduct);
+            List<ProductAttr> productAttrs = attrService.getListByProductIdAndType(storeProduct.getId(), Constants.PRODUCT_TYPE_NORMAL);
+            List<ProductAttrValue> productAttrValues = attrValueService.getListByProductIdAndType(storeProduct.getId(), Constants.PRODUCT_TYPE_NORMAL);
+            String attrIds = productAttrs.stream()
+                    .map(attr -> attr.getId().toString())
+                    .collect(Collectors.joining(","));
+
+            String attrValueIds = productAttrValues.stream()
+                    .map(attr -> attr.getId().toString())
+                    .collect(Collectors.joining(","));
+
+            attrService.deleteByIds(attrIds);
+            attrValueService.deleteByIds(attrValueIds);
         }
-        save(storeProduct);
+
         attrList.forEach(attr -> attr.setProductId(storeProduct.getId()));
         attrValueList.forEach(value -> value.setProductId(storeProduct.getId()));
         attrService.save(attrList);
@@ -271,6 +318,12 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
 //            }
     }
 
+    @Override
+    @Transactional
+    public void update(StoreProductAddRequest request) {
+        assignAttributes(request, 1);
+    }
+
     // 生成货号的方法
     private String generateItemNumber(String cateIdStr) {
         // 1. 获取类目ID的字符串形式

+ 1 - 1
mall-service/src/main/java/dto/StoreProductAddRequest.java

@@ -26,7 +26,7 @@ public class StoreProductAddRequest implements Serializable {
     private static final long serialVersionUID = -452373239606480650L;
 
     @ApiModelProperty(value = "商品id|添加时不填,修改时必填")
-    private Integer id;
+    private Long id;
 
     @ApiModelProperty(value = "商品图片", required = true)
     @NotBlank(message = "商品图片不能为空")

+ 4 - 0
mall-service/src/main/java/dto/StoreProductAttrAddRequest.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.util.List;
 
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -24,4 +25,7 @@ public class StoreProductAttrAddRequest implements Serializable {
 
     @ApiModelProperty(value = "属性值|逗号分隔", required = true)
     private String attrValues;
+
+    @ApiModelProperty(value = "属性值")
+    private List<Object> attrImgValues;
 }

+ 6 - 0
mall-service/src/main/java/dto/StoreProductAttrValueAddRequest.java

@@ -96,4 +96,10 @@ public class StoreProductAttrValueAddRequest implements Serializable {
 
     @ApiModelProperty(value = "砍价商品最低价|砍价专用")
     private BigDecimal minPrice;
+
+    @ApiModelProperty(value = "SKU编号")
+    private String skuCode;
+
+    @ApiModelProperty(value = "库存预警值")
+    private Integer stockThreshold;
 }

+ 76 - 0
mall-service/src/main/java/vo/AttrVO.java

@@ -0,0 +1,76 @@
+package vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "AttrValueResponse对象", description = "商品属性值响应对象")
+public class AttrVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    /**
+     * 商品ID
+     */
+    @ApiModelProperty(value = "商品ID")
+    private Long productId;
+
+    /**
+     * 属性名
+     */
+    @ApiModelProperty(value = "属性名")
+    private String attrName;
+
+    /**
+     * 属性值
+     */
+    @ApiModelProperty(value = "属性值")
+    private String attrValues;
+
+    @ApiModelProperty(value = "属性值")
+    private List<Object> attrImgValues;
+
+    /**
+     * 活动类型 0=商品,1=秒杀,2=砍价,3=拼团
+     */
+    @ApiModelProperty(value = "活动类型 0=商品,1=秒杀,2=砍价,3=拼团")
+    private Integer type;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 创建人id
+     */
+    private Long createUserId;
+
+    /**
+     * 更新人id
+     */
+    private Long updateUserId;
+}

+ 8 - 2
mall-service/src/main/java/vo/AttrValueVO.java

@@ -25,13 +25,16 @@ public class AttrValueVO implements Serializable {
     @ApiModelProperty(value = "sku")
     private String suk;
 
+    @ApiModelProperty(value = "SKU编号")
+    private String skuCode;
+
     @ApiModelProperty(value = "属性对应的库存")
     private Integer stock;
 
     @ApiModelProperty(value = "销量")
     private Integer sales;
 
-    @ApiModelProperty(value = "属性金额")
+    @ApiModelProperty(value = "原价")
     private BigDecimal price;
 
     @ApiModelProperty(value = "图片")
@@ -40,7 +43,7 @@ public class AttrValueVO implements Serializable {
     @ApiModelProperty(value = "成本价")
     private BigDecimal cost;
 
-    @ApiModelProperty(value = "价")
+    @ApiModelProperty(value = "市场价")
     private BigDecimal otPrice;
 
     @ApiModelProperty(value = "重量")
@@ -69,4 +72,7 @@ public class AttrValueVO implements Serializable {
 
     @ApiModelProperty(value = "砍价商品最低价|砍价专用字段")
     private BigDecimal minPrice;
+
+    @ApiModelProperty(value = "库存预警值")
+    private Integer stockThreshold;
 }

+ 21 - 12
mall-service/src/main/java/vo/StoreOrderCountItemVO.java

@@ -22,30 +22,39 @@ public class StoreOrderCountItemVO implements Serializable {
     @ApiModelProperty(value = "未支付")
     private Integer unPaid;
 
+    @ApiModelProperty(value = "已付款")
+    private Integer paid;
+
     @ApiModelProperty(value = "未发货")
     private Integer notShipped;
 
     @ApiModelProperty(value = "待收货")
     private Integer spike;
 
-    @ApiModelProperty(value = "待评价")
-    private Integer bargain;
+//    @ApiModelProperty(value = "待评价")
+//    private Integer bargain;
 
-    @ApiModelProperty(value = "交易完成")
+    @ApiModelProperty(value = "完成")
     private Integer complete;
 
-    @ApiModelProperty(value = "待核销")
-    private Integer toBeWrittenOff;
+    @ApiModelProperty(value = "已关闭")
+    private Integer closed;
+
+    @ApiModelProperty(value = "已取消")
+    private Integer canceled;
 
-    @ApiModelProperty(value = "退款中")
-    private Integer refunding;
+//    @ApiModelProperty(value = "待核销")
+//    private Integer toBeWrittenOff;
+//
+//    @ApiModelProperty(value = "退款中")
+//    private Integer refunding;
 
     @ApiModelProperty(value = "已退款")
     private Integer refunded;
 
-    @ApiModelProperty(value = "0 未退款 1 申请中 2 已退款")
-    private Integer refundStatus;
-
-    @ApiModelProperty(value = "已删除")
-    private Integer deleted;
+//    @ApiModelProperty(value = "0 未退款 1 申请中 2 已退款")
+//    private Integer refundStatus;
+//
+//    @ApiModelProperty(value = "已删除")
+//    private Integer deleted;
 }

+ 4 - 5
mall-service/src/main/java/vo/StoreProductInfoVO.java

@@ -1,6 +1,5 @@
 package vo;
 
-import com.txz.mall.model.ProductAttr;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -84,7 +83,7 @@ public class StoreProductInfoVO implements Serializable {
     private List<String> activity;
 
     @ApiModelProperty(value = "商品属性")
-    private List<ProductAttr> attr;
+    private List<AttrVO> attr;
 
     @ApiModelProperty(value = "商品属性详情")
     private List<AttrValueVO> attrValue;
@@ -166,9 +165,9 @@ public class StoreProductInfoVO implements Serializable {
     @ApiModelProperty(value = "状态 (0:未上架,1:上架)")
     private Integer isShow;
 
-    @ApiModelProperty("库存预警值")
-    private Integer stockThreshold;
-
     @ApiModelProperty("供应商")
     private String itemSupplier;
+
+    @ApiModelProperty(value = "销量")
+    private Integer sales;
 }

+ 1 - 0
mall-service/src/main/resources/mapper/ProductAttrMapper.xml

@@ -15,5 +15,6 @@
         <result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
         <result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
         <result column="is_delete" jdbcType="INTEGER" property="isDelete"/>
+        <result column="attr_img_values" jdbcType="VARCHAR" property="attrImgValues"/>
     </resultMap>
 </mapper>