Ver código fonte

后台添加 sku 详情接口,修复编辑问题
添加 提交审核接口

liusz 5 dias atrás
pai
commit
9fc8d4070e

+ 12 - 3
py-base/src/main/java/com/poyee/base/mapper/provider/util/SqlUtil.java

@@ -218,10 +218,19 @@ public class SqlUtil {
                .append(" SET ");
             for (int i = 0; i < columns.size(); i++) {
                 sql.append(columns.get(i)).append(" = ");
-                if((values.get(i) instanceof Date)){
-                    sql.append("'").append(ObjectUtil.escapeValue(values.get(i))).append("'");
+                Object o = values.get(i);
+                if((o instanceof Date)){
+                    sql.append("'").append(ObjectUtil.escapeValue(o)).append("'");
+                }else if(o instanceof String){
+                    String str = String.valueOf(o);
+                    if(com.poyee.util.StringUtils.isNotBlank(str) && str.endsWith("::jsonb")){
+                        str = str.replace("::jsonb", "'::jsonb");
+                        sql.append("'").append(str);
+                    }else{
+                        sql.append(ObjectUtil.escapeValue(o)); // 转义值
+                    }
                 }else{
-                    sql.append(ObjectUtil.escapeValue(values.get(i))); // 转义值
+                    sql.append(ObjectUtil.escapeValue(o)); // 转义值
                 }
                  sql.append(i < columns.size() - 1 ? ", " : " ");
             }

+ 23 - 0
py-base/src/main/java/com/poyee/base/mapper/provider/util/UpdateUtil.java

@@ -1,10 +1,12 @@
 package com.poyee.base.mapper.provider.util;
 
 import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.poyee.annotation.db.JdbcType;
 import com.poyee.annotation.db.Where;
 import com.poyee.base.mapper.provider.BaseProvider;
 import com.poyee.base.mapper.provider.domain.TableInfo;
@@ -115,6 +117,27 @@ public class UpdateUtil {
                         if (Objects.nonNull(value)) {
                             if (value instanceof Date) {
                                 updateMap.put(tableField.value(), DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, (Date) value));
+                            } else if(field.isAnnotationPresent(JdbcType.class )){
+                                //
+                                JdbcType jdbcType = field.getAnnotation(JdbcType.class);
+                                switch (jdbcType.columnType()) {
+                                    case DATE:
+                                        updateMap.put(tableField.value(), DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, (Date) value));
+                                        break;
+                                    case JSONB:
+                                        if (value instanceof String) {
+                                            if(org.apache.commons.lang3.StringUtils.isNotBlank(String.valueOf(value))){
+                                                value = value+"::jsonb";
+                                                updateMap.put(tableField.value(), value);
+                                            }else{
+                                                //值为空时删除字段
+                                                updateMap.remove(tableField.value());
+                                            }
+                                        }else{
+                                            updateMap.put(tableField.value(), JSONObject.toJSONString(value)+"::jsonb");
+                                        }
+                                        break;
+                                }
                             } else {
                                 updateMap.put(tableField.value(), value);
                             }

+ 13 - 1
py-domain/src/main/java/com/poyee/dto/page/EcologySpuPageDto.java

@@ -41,7 +41,7 @@ public class EcologySpuPageDto extends BaseDto {
     private String code;
 
     @ApiModelProperty(value = "名称", example = "Immaculate")
-    @TableField(value = "name" , exist = false)
+    @TableField(value = "name" )
     @Where(table = EcologySpuPageReq.class, field = "name", operator = FieldOperator.ILIKE)
     private String name;
 
@@ -85,6 +85,18 @@ public class EcologySpuPageDto extends BaseDto {
     @TableField(value = "update_time")
     private Date updateTime;
 
+    @ApiModelProperty(value = "审核||上下架理由")
+    @TableField(value = "review_desc")
+    private String reviewDesc;
+
+    @ApiModelProperty(value = "审核人")
+    @TableField(value = "review_user")
+    private String reviewUser;
+
+    @ApiModelProperty(value = "审核时间")
+    @TableField(value = "review_time")
+    private String reviewTime;
+
     @ApiModelProperty(value = "sku")
     @TableField(exist = false)
     private List<EcologySkuPageDto> skus;

+ 4 - 4
py-domain/src/main/java/com/poyee/req/insert/EcologySpuInsertReq.java

@@ -124,16 +124,16 @@ public class EcologySpuInsertReq extends BaseReq {
     private BigDecimal remoteShippingCost;
 
     @ApiModelProperty(value = "创建人",hidden = true)
-    @TableField(value = "create_by",fill = FieldFill.INSERT)
-    private String createBy;
+    @TableField(value = "create_buser",fill = FieldFill.INSERT)
+    private String createUser;
 
     @ApiModelProperty(value = "创建时间",hidden = true)
     @TableField(value = "create_time",fill = FieldFill.INSERT)
     private Date createTime;
 
     @ApiModelProperty(value = "更新人",hidden = true)
-    @TableField(value = "update_by",fill = FieldFill.INSERT_UPDATE)
-    private String updateBy;
+    @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
 
     @ApiModelProperty(value = "更新时间",hidden = true)
     @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)

+ 2 - 2
py-domain/src/main/java/com/poyee/req/update/EcologySpuUpdateReq.java

@@ -54,8 +54,8 @@ public class EcologySpuUpdateReq extends BaseReq {
     private List<EcologySkuInsertReq> skus;
 
     @ApiModelProperty(value = "更新人",hidden = true)
-    @TableField(value = "update_by",fill = FieldFill.INSERT_UPDATE)
-    private String updateBy;
+    @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
 
     @ApiModelProperty(value = "更新时间",hidden = true)
     @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)

+ 5 - 0
py-service/src/main/java/com/poyee/service/IEcologySkuService.java

@@ -4,6 +4,7 @@ import com.poyee.base.dto.Page;
 import com.poyee.base.dto.Result;
 import com.poyee.base.service.BaseService;
 import com.poyee.dto.EcologySkuDto;
+import com.poyee.dto.detail.EcologySkuDetailDto;
 import com.poyee.dto.page.EcologySkuPageDto;
 import com.poyee.req.EcologySkuReq;
 import com.poyee.req.insert.EcologySkuInsertReq;
@@ -26,6 +27,8 @@ public interface IEcologySkuService extends BaseService<EcologySkuReq, EcologySk
 
     Page<EcologySkuPageDto> skuPages(@Valid EcologySkuPageReq req);
 
+    Result<EcologySkuDetailDto> detailById(Long id);
+
     Result updateById( EcologySkuUpdateReq req);
 
     Result up( EcologySkuUpReq req);
@@ -33,4 +36,6 @@ public interface IEcologySkuService extends BaseService<EcologySkuReq, EcologySk
     Result updateStock(@Valid EcologySkuStockReq req);
 
     Result add(@Valid EcologySkuInsertReq req);
+
+    Result submitToReview(Long id);
 }

+ 2 - 0
py-service/src/main/java/com/poyee/service/IEcologySpuService.java

@@ -39,4 +39,6 @@ public interface IEcologySpuService extends BaseService<EcologySpuReq, EcologySp
     Result up(EcologySpuUpReq req);
 
     Result review(EcologySpuReviewReq req);
+
+    Result submitToReview(Long id);
 }

+ 57 - 6
py-service/src/main/java/com/poyee/service/impl/EcologySkuServiceImpl.java

@@ -7,6 +7,7 @@ import com.poyee.base.service.impl.BaseServiceImpl;
 import com.poyee.build.ProductBeanBuildFactory;
 import com.poyee.common.exception.ServiceException;
 import com.poyee.dto.EcologySkuDto;
+import com.poyee.dto.detail.EcologySkuDetailDto;
 import com.poyee.dto.page.EcologySkuPageDto;
 import com.poyee.dto.where.EcologySkuWhereReq;
 import com.poyee.enums.EcologySpuStatusEnum;
@@ -46,9 +47,24 @@ public class EcologySkuServiceImpl extends BaseServiceImpl<EcologySkuMapper, Eco
         if(CollectionUtils.isNotEmpty(page.getRows())){
             page.getRows().forEach(item-> item.setTags(ProductBeanBuildFactory.parseSkuTags(item.getTags())));
         }
+        page.setCode(0);
         return page;
     }
 
+    @Override
+    public Result<EcologySkuDetailDto> detailById(Long id) {
+        EcologySkuDetailDto detail = (EcologySkuDetailDto) Optional.of(baseMapper.selectByPrimaryKey(id, EcologySkuDetailDto.class))
+                .orElseThrow(()->new ServiceException("商品不存在"));
+        //判断商家
+        if(getUserInfo().isMerchant() && !Objects.equals(detail.getMerchantId(), Long.valueOf(getUserInfo().getMerchantId()))){
+            log.warn("无权限访问[越权]");
+            throw new ServiceException("无权限访问[越权]");
+        }
+        //处理 tags
+        detail.setTags(ProductBeanBuildFactory.parseSkuTags(detail.getTags()));
+        return Result.success(0,detail);
+    }
+
     /**
      * @param req
      * @return
@@ -71,6 +87,21 @@ public class EcologySkuServiceImpl extends BaseServiceImpl<EcologySkuMapper, Eco
         return Result.fail("商品[sku]添加失败");
     }
 
+    @Override
+    public Result submitToReview(Long id) {
+        //查询商品sku 信息
+        checkSkuInfo("submitToReview", id);
+        //设置更新参数
+        EcologySkuUpdateReq skuUpdateReq = new EcologySkuUpdateReq();
+        skuUpdateReq.setId(id);
+        skuUpdateReq.setStatus(EcologySpuStatusEnum.WAIT_AUDIT.getCode());
+        int update = baseMapper.update(skuUpdateReq);
+        if(update > 0){
+            return Result.success(0,"商品提交审核成功");
+        }
+        return Result.fail("商品[sku]提交审核失败");
+    }
+
 
     /**
      * 修改商品信息
@@ -82,8 +113,9 @@ public class EcologySkuServiceImpl extends BaseServiceImpl<EcologySkuMapper, Eco
     public Result updateById(EcologySkuUpdateReq req) {
         checkSkuInfo("update", req.getId());
         //进行后续处理
-        //设置状态为待审核
-        req.setStatus(EcologySpuStatusEnum.WAIT_AUDIT.getCode());
+        //设置状态为 null  编辑接口不更新状态
+        req.setStatus(null);
+//        req.setStatus(EcologySpuStatusEnum.WAIT_AUDIT.getCode());
         //处理 标签   "recommend,hot" ->  "[\"recommend\", \"hot\"]"
         if(StringUtils.isNotBlank(req.getTags())) {
             req.setTags(ProductBeanBuildFactory.builderSkuTags(req.getTags()));
@@ -160,14 +192,33 @@ public class EcologySkuServiceImpl extends BaseServiceImpl<EcologySkuMapper, Eco
                 }
                 break;
             case "delete":
-
-
+                //判断商品不是待提交状态不能 删除
+                if(!Objects.equals(EcologySpuStatusEnum.WAIT_SUBMIT.getCode(), sku.getStatus())){
+                    throw new ServiceException("商品状态为["+EcologySpuStatusEnum.getDescByCode(sku.getStatus())+"],请勿此操作");
+                }
                 break;
             case "up":
-
+                //如果不在审核通过,上架,下架状态中 则返回异常
+                if(!EcologySpuStatusEnum.canUpOperate(sku.getStatus())){
+                    throw new ServiceException("商品状态为["+EcologySpuStatusEnum.getDescByCode(sku.getStatus())+"],请勿此操作");
+                }
                 break;
             case "review":
-
+                //状态不在待审核中 不能审核操作
+                if(!Objects.equals(EcologySpuStatusEnum.WAIT_AUDIT.getCode(), sku.getStatus())){
+                    throw new ServiceException("商品不在待审核状态,请勿此操作");
+                }
+                break;
+            case "submitToReview":
+                //待审核状态  提示请勿重复提交
+                if(Objects.equals(EcologySpuStatusEnum.WAIT_AUDIT.getCode(), sku.getStatus())){
+                    throw new ServiceException("商品已提交审核,请勿重复提交");
+                }
+                //判断状态是否在 待提交, 审核驳回 状态 才可提交审核
+                if(!Objects.equals(EcologySpuStatusEnum.WAIT_SUBMIT.getCode(), sku.getStatus())
+                        && !Objects.equals(EcologySpuStatusEnum.AUDIT_REJECT.getCode(), sku.getStatus()) ){
+                    throw new ServiceException("商品状态错误【"+EcologySpuStatusEnum.getDescByCode(sku.getStatus())+"】");
+                }
                 break;
 
         }

+ 44 - 2
py-service/src/main/java/com/poyee/service/impl/EcologySpuServiceImpl.java

@@ -241,8 +241,10 @@ public class EcologySpuServiceImpl extends BaseServiceImpl<EcologySpuMapper, Eco
         checkAndPutMerchantId(req);
         checkSpuInfo("update" ,req.getId());
         //只更新限定数据和更新时间更新人
+        //设置状态为 null  编辑接口不更新状态
+        req.setStatus(null);
         //同时状态设置为: WAIT_AUDIT
-        req.setStatus(EcologySpuStatusEnum.WAIT_AUDIT.getCode());
+//        req.setStatus(EcologySpuStatusEnum.WAIT_AUDIT.getCode());
         int update = baseMapper.update(req);
         return update > 0 ? Result.success(0,"商品修改成功") : Result.fail("商品修改失败");
     }
@@ -348,6 +350,32 @@ public class EcologySpuServiceImpl extends BaseServiceImpl<EcologySpuMapper, Eco
         return Result.fail("商品" + (req.isPass()?"审核通过失败":"审核驳回失败"));
     }
 
+    @Override
+    public Result submitToReview(Long id) {
+        //获取产品信息
+        checkSpuInfo("submitToReview" , id);
+        /*EcologySpuDto spu = (EcologySpuDto) Optional.ofNullable(baseMapper.selectByPrimaryKey(id, EcologySpuDto.class))
+                                                    .orElseThrow(() -> new ServiceException("商品不存在"));
+        //判断商品是否属于该商家, 且状态是否为待提交 状态
+        if(!Objects.equals(spu.getMerchantId(), Long.valueOf(getUserInfo().getMerchantId()))){
+            log.warn("无权限访问[越权]");
+            throw new AuthException("无权限访问[越权]");
+        }
+        if(!Objects.equals(spu.getStatus(), EcologySpuStatusEnum.WAIT_SUBMIT.getCode())){
+            log.warn("商品状态错误");
+            throw new ServiceException("商品状态错误");
+        }*/
+        //设置 spu id 和更新的状态
+        EcologySpuUpdateReq req = new EcologySpuUpdateReq();
+        req.setId(id);
+        req.setStatus(EcologySpuStatusEnum.WAIT_AUDIT.getCode());
+        int update = baseMapper.update(req);
+        if(update > 0){
+            return Result.success(0,"商品提交审核成功");
+        }
+        return Result.fail("商品提交审核失败");
+    }
+
     /**
      * 检查商品
      * @param spuInsertDao
@@ -400,6 +428,10 @@ public class EcologySpuServiceImpl extends BaseServiceImpl<EcologySpuMapper, Eco
                     throw new ServiceException("商品审核通过,请勿修改");
                 }
             case "delete":
+                //商品不是待提交状态 不能删除
+                if(!Objects.equals(EcologySpuStatusEnum.WAIT_SUBMIT.getCode(), spuDto.getStatus())){
+                    throw new ServiceException("商品状态为["+EcologySpuStatusEnum.getDescByCode(spuDto.getStatus())+"],请勿此操作");
+                }
                 //验证 sku
                 EcologySkuWhereReq skuWhereReq = new EcologySkuWhereReq();
                 skuWhereReq.setSpuId(spuId);
@@ -421,11 +453,21 @@ public class EcologySpuServiceImpl extends BaseServiceImpl<EcologySpuMapper, Eco
                 }
                 break;
             case "review":
-                //如果状态为审核状态  则返回异常
+                //如果状态审核状态  则返回异常
                 if(!Objects.equals(EcologySpuStatusEnum.WAIT_AUDIT.getCode(), spuDto.getStatus())){
                     throw new ServiceException("商品不在审核中状态,请勿此操作");
                 }
                 break;
+            case "submitToReview":
+                //如果是 待审核状态 提示 待审核状态请勿重复提交
+                if(Objects.equals(EcologySpuStatusEnum.WAIT_AUDIT.getCode(), spuDto.getStatus())){
+                    throw new ServiceException("商品已提交审核,请勿重复提交");
+                }
+                //判断 状态是否在 待提交, 审核驳回
+                if(!Objects.equals(EcologySpuStatusEnum.WAIT_SUBMIT.getCode(), spuDto.getStatus())
+                    && !Objects.equals(EcologySpuStatusEnum.AUDIT_REJECT.getCode(), spuDto.getStatus())){
+                    throw new ServiceException("商品状态错误【"+EcologySpuStatusEnum.getDescByCode(spuDto.getStatus())+"】");
+                }
         }
 
     }

+ 26 - 0
py-starter/src/main/java/com/poyee/controller/EcologySkuController.java

@@ -8,6 +8,7 @@ import com.poyee.base.dto.Result;
 import com.poyee.common.enums.BusinessType;
 import com.poyee.common.enums.Roles;
 import com.poyee.dto.EcologySkuDto;
+import com.poyee.dto.detail.EcologySkuDetailDto;
 import com.poyee.dto.page.EcologySkuPageDto;
 import com.poyee.req.EcologySkuReq;
 import com.poyee.req.insert.EcologySkuInsertReq;
@@ -63,6 +64,18 @@ public class EcologySkuController extends BaseController<IEcologySkuService, Eco
         return baseService.add(req);
     }
 
+    /**
+     * 根据id 查询 sku 信息
+     */
+    @Log(title = "查询SKU", businessType = BusinessType.OTHER)
+    @ApiOperation("根据id 获取SKU信息@(admin 1.0.1)")
+    @GetMapping("/detail/{id}")
+    @UserLoginToken(roles = {Roles.ADMIN,Roles.SHIPPING} )
+    @ResponseBody
+    public Result<EcologySkuDetailDto> detail(@PathVariable("id") Long id){
+        console("根据id 获取SKU信息", id);
+        return baseService.detailById(id);
+    }
 
 
     /**
@@ -105,6 +118,19 @@ public class EcologySkuController extends BaseController<IEcologySkuService, Eco
         return baseService.updateStock(req);
     }
 
+    /**
+     * 提交审核
+     */
+    @Log(title = "提交审核", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "提交审核@(admin 1.0.1)", notes = "提交审核[仅限待提交,审核驳回状态的SKU]")
+    @PutMapping("/submitToReview/{id}")
+    @UserLoginToken(roles = {Roles.ADMIN,Roles.SHIPPING} )
+    @ResponseBody
+    public Result submitToReview(@PathVariable("id") Long id){
+        console("提交审核 sku ", id);
+        return baseService.submitToReview(id);
+    }
+
 
 
 

+ 13 - 0
py-starter/src/main/java/com/poyee/controller/EcologySpuController.java

@@ -146,4 +146,17 @@ public class EcologySpuController extends BaseController<IEcologySpuService, Eco
         return baseService.review(req);
     }
 
+    /**
+     * 提交审核
+     */
+    @Log(title = "提交审核", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "提交审核@(admin 1.0.1)", notes = "提交审核[仅限待提交,审核驳回状态的SPU]")
+    @PostMapping("/submitToReview/{id}")
+    @UserLoginToken(roles = {Roles.ADMIN,Roles.SHIPPING} )
+    @ResponseBody
+    public Result submitToReview( @PathVariable("id") Long id) {
+        console("提交审核", id);
+        return baseService.submitToReview(id);
+    }
+
 }