he2802 2 年之前
父節點
當前提交
8cfd5f1a2c

+ 73 - 0
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/alioss/OssController.java

@@ -0,0 +1,73 @@
+package com.zhongzheng.controller.alioss;
+
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.alioss.bo.OssRequest;
+import com.zhongzheng.modules.alioss.service.OssService;
+import com.zhongzheng.modules.alioss.vo.ResultBean;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 阿里OSS
+ *
+ * @author change
+ * @date 2021-05-17
+ */
+@Api(value = "阿里OSS上传文件控制器", tags = {"阿里OSS上传文件"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/aliyun/oss")
+public class OssController extends BaseController {
+
+    private static Logger log = LoggerFactory.getLogger(OssController.class);
+
+    private final OssService ossService;
+
+    /**
+     * policy获得
+     */
+    @ApiOperation("policy获得")
+    @GetMapping("/policy")
+    public AjaxResult<ResultBean> policy(@Validated OssRequest ossRequest) {
+        ResultBean result = ossService.getPolicy(ossRequest);
+        log.info("服务端生成签名:{}",result);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 阿里回调OSS返回参数到前端
+     */
+    @ApiOperation("回调")
+    @PostMapping("/callback")
+    public ResultBean callback(HttpServletRequest request) {
+        ResultBean ossCallbackResult = ossService.callback(request);
+        log.info("oss成功的回调:{}",ossCallbackResult);
+        return ossCallbackResult;
+    }
+
+
+    /**
+     * upload上传文件
+     */
+    @ApiOperation("上传file图片")
+    @PostMapping("/upload")
+    public AjaxResult<String> upload( OssRequest file) throws Exception {
+        String result = ossService.upload(file);
+        log.info("服务端生成签名:{}",result);
+        return AjaxResult.success("返回图片路径",result);
+    }
+
+}

+ 10 - 1
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/store/GoodsController.java

@@ -45,7 +45,16 @@ public class GoodsController extends BaseController {
     @Log(title = "新增积分商品", businessType = BusinessType.INSERT)
     @PostMapping("/points")
     public AjaxResult<Void> addPoints(@RequestBody GoodsAddBo bo) {
-        return toAjax(iGoodsService.insertPointsByAddBo(bo)>0 ? 1 : 0);
+        return toAjax(iGoodsService.savePointsByAddBo(bo)>0 ? 1 : 0);
+    }
+
+    /**
+     * 积分商品详情
+     */
+    @ApiOperation("积分商品详情")
+    @GetMapping("/points/{goodsId}")
+    public AjaxResult<GoodsVo> getPointsDetail(@PathVariable("goodsId")Long goodsId) {
+        return AjaxResult.success(iGoodsService.getPointsDetail(goodsId));
     }
 
     /**

+ 7 - 0
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/store/StoreController.java

@@ -98,4 +98,11 @@ public class StoreController extends BaseController {
         return toAjax(iTopStoreService.batchRemove(bo) ? 1 : 0);
     }
 
+    @ApiOperation("获取积分规则配置详情")
+    @GetMapping(value = "/configKey/pointsRule")
+    public AjaxResult getBadBill()
+    {
+        return AjaxResult.success("配置内容",iTopStoreService.getPointsRuleConfig());
+    }
+
 }

+ 0 - 131
zhongzheng-admin-store/src/main/java/com/zhongzheng/core/config/MybatisFilterConfig.java

@@ -1,131 +0,0 @@
-package com.zhongzheng.core.config;
-
-import com.baomidou.mybatisplus.core.parser.ISqlParser;
-import com.baomidou.mybatisplus.core.parser.ISqlParserFilter;
-import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
-import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
-import net.sf.jsqlparser.expression.Expression;
-import net.sf.jsqlparser.expression.LongValue;
-import org.apache.ibatis.mapping.MappedStatement;
-import org.apache.ibatis.reflection.MetaObject;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.*;
-
-/**
- * @author yangdamao
- * @date 2023年05月31日 15:03
- */
-@Configuration
-@MapperScan(basePackages = {"com.zhongzheng.modules.goods.mapper"})
-public class MybatisFilterConfig {
-
-    @Autowired//自动注入request
-    private HttpServletRequest request;
-
-    private static final Map<String, String> IGNORE_TENANT_SMAP = new HashMap<String, String>() {{
-        // 这些mapper 方法也不修改
-//        put("com.test.first.dao.TestMapper.getId","");
-//        put("com.test.first.dao.TestMapper.getId2","");
-//        put("com.test.first.dao.TestMapper.getId3","");
-    }};
-
-    private static final HashSet<String> TABLE_FILTER = new HashSet();
-
-    static {
-        // 过滤表, 这些表不进行修改
-        TABLE_FILTER.add("sys_tenant");
-        TABLE_FILTER.add("top_merchant");
-//        TABLE_FILTER.add("sys_user2");
-    }
-
-    @Bean
-    @SuppressWarnings("all")
-    public PaginationInterceptor paginationInterceptor() {
-        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
-
-        // sql 解析器
-        List<ISqlParser> sqlParserList = new ArrayList<>();
-        TenantSqlParser tenantSqlParser = new TenantSqlParser();
-        tenantSqlParser.setTenantHandler(new TenantHandler() {
-
-            @Override
-            public Expression getTenantId(boolean select) {
-                // 此处返回sys_code 字段值, 修改sql时候的参数, 从session 里面获取用户,
-                // 或者其他方式获取用户标识, 这里方便直接写死了
-                String storeId = request.getHeader("StoreId");
-                return new LongValue(StringUtils.isNotBlank(storeId)?storeId:"0");
-            }
-            @Override
-            public String getTenantIdColumn() {
-                // 返回增加条件的字段
-                return "store_id";
-            }
-            @Override
-            public boolean doTableFilter(String tableName) {
-                // 这里可以判断是否过滤表
-                // 对没有sys_code 的表格进行过滤
-                if (TABLE_FILTER.contains(tableName) || StringUtils.isBlank(request.getHeader("StoreId"))) {
-                    // 返回true 则不过滤
-                    return true;
-                }
-                return false;
-            }
-        });
-        // 添加到解析器, 如需添加多个, 这个地方是list, 多new几个, new TenantSqlParser(); 即可
-        sqlParserList.add(tenantSqlParser);
-
-        TenantSqlParser tenantSqlParser1 = new TenantSqlParser();
-        tenantSqlParser1.setTenantHandler(new TenantHandler() {
-            @Override
-            public Expression getTenantId(boolean select) {
-                // 此处返回sys_code 字段值, 修改sql时候的参数, 从session 里面获取用户,
-                // 或者其他方式获取用户标识, 这里方便直接写死了
-                String merId = request.getHeader("MerId");
-                return new LongValue(StringUtils.isNotBlank(merId)?merId:"0");
-            }
-            @Override
-            public String getTenantIdColumn() {
-                // 返回增加条件的字段
-                return "mer_id";
-            }
-            @Override
-            public boolean doTableFilter(String tableName) {
-                // 这里可以判断是否过滤表
-                // 对没有sys_code 的表格进行过滤
-                if (TABLE_FILTER.contains(tableName) || StringUtils.isBlank(request.getHeader("MerId"))) {
-                    // 返回true 则不过滤
-                    return true;
-                }
-                return false;
-            }
-        });
-        sqlParserList.add(tenantSqlParser1);
-
-        // 设置解析器集合
-        paginationInterceptor.setSqlParserList(sqlParserList);
-
-        // 过滤函数
-        paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
-            @Override
-            public boolean doFilter(MetaObject metaObject) {
-                MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
-                // com.test.first.dao.TestMapper.getId 精确到mapper 方法级
-                if (IGNORE_TENANT_SMAP.containsKey(ms.getId())) {
-                    // 不进行修改
-                    return true;
-                }
-                return false;
-            }
-        });
-        return paginationInterceptor;
-    }
-
-}

+ 3 - 0
zhongzheng-admin-store/src/main/resources/application-dev.yml

@@ -166,3 +166,6 @@ oldOrder:
 
 oldSys:
     host: http://gdxypx.xy.com
+
+invoice:
+    host: http://192.168.1.222:7077/sys/common/openMplatform/log

+ 20 - 1
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/MybatisPlusConfig.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.framework.config;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
@@ -7,12 +8,14 @@ import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInt
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
 import com.zhongzheng.framework.mybatisplus.CreateAndUpdateMetaObjectHandler;
+import com.zhongzheng.framework.mybatisplus.CustomMerLineHandler;
+import com.zhongzheng.framework.mybatisplus.CustomStoreLineHandler;
 import com.zhongzheng.framework.mybatisplus.CustomTenantLineHandler;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
-import org.springframework.web.filter.CorsFilter;
 
 @EnableTransactionManagement(proxyTargetClass = true)
 @Configuration
@@ -21,11 +24,27 @@ public class MybatisPlusConfig {
 	@Autowired
 	private CustomTenantLineHandler customTenantLineHandler;
 
+	@Autowired
+	private CustomStoreLineHandler customStoreLineHandler;
+
+	@Autowired
+	private CustomMerLineHandler customMerLineHandler;
+
+	@Value("${mybatis-plus.tenant.enabled-tenant}")
+    private Integer enabledTenant;
+
 	@Bean
 	public MybatisPlusInterceptor mybatisPlusInterceptor() {
 		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
 		// 多租户插件(注意:这个一定要放在最上面)
 		interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(customTenantLineHandler));
+		if (ObjectUtil.isNotNull(enabledTenant) && enabledTenant == 3){
+			//核销系统
+			// 多租户插件(注意:这个一定要放在最上面) 店铺ID
+			interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(customStoreLineHandler));
+			// 多租户插件(注意:这个一定要放在最上面)商户ID
+			interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(customMerLineHandler));
+		}
 		// 分页插件
 		interceptor.addInnerInterceptor(paginationInnerInterceptor());
 		// 乐观锁插件

+ 98 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CustomMerLineHandler.java

@@ -0,0 +1,98 @@
+package com.zhongzheng.framework.mybatisplus;
+
+import cn.hutool.core.lang.Validator;
+import cn.hutool.http.HttpStatus;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.utils.ServletUtils;
+import lombok.SneakyThrows;
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.LongValue;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 多租户处理插件
+ *
+ * @author hjl
+ * @date 2021/07/30 13:37
+ */
+@Component
+public class CustomMerLineHandler implements TenantLineHandler {
+
+    /**
+     * 租户id字段名
+     */
+    public static final String MER_ID_COLUMN = "mer_id";
+
+    //  public static  String TENANT_ID = null;
+
+//    @Value("${mybatis-plus.tenant.enabled-tenant}")
+//    private Integer enabledTenant;
+
+    /**
+     * 忽略添加租户ID的表
+     */
+    private final static List<String> IGNORE_TABLE_NAMES = new ArrayList<String>() {{
+        add("sys_tenant");
+        add("store_menu");
+        add("store_role");
+        add("store_role_menu");
+        add("store_user");
+        add("store_user_role");
+        add("top_sys_config");
+//       add("top_merchant");
+    }};
+
+    /**
+     * 获取租户ID值表达式(可从cookie、token、缓存中取)
+     *
+     * @return
+     */
+    @SneakyThrows
+    @Override
+    public Expression getTenantId() {
+        String TenantId = ServletUtils.getRequest().getHeader("MerId");
+        if (Validator.isEmpty(TenantId)) {
+            TenantId = ServletUtils.getResponse().getHeader("MerId");
+            if (Validator.isEmpty(TenantId)) {
+                int code = HttpStatus.HTTP_UNAVAILABLE;
+                String msg = "企业非法访问【商户ID缺失】";
+                ServletUtils.renderString(ServletUtils.getResponse(), JSON.toJSONString(AjaxResult.error(code, msg)));
+                ServletUtils.getResponse().getWriter().flush();
+                ServletUtils.getResponse().getWriter().close();
+            }
+        }
+        return new LongValue(TenantId);
+    }
+
+    /**
+     * 获取租户字段名(数据库的租户ID字段名)
+     *
+     * @return
+     */
+    @Override
+    public String getTenantIdColumn() {
+        return MER_ID_COLUMN;
+    }
+
+    /**
+     * 根据表名判断是否忽略拼接多租户条件
+     *
+     * @param tableName
+     * @return
+     */
+    @Override
+    public boolean ignoreTable(String tableName) {
+//        if (enabledTenant == 2 || tableName.contains("top_")){
+//            //总平台忽略tenantId
+//            return true;
+//        }
+        return IGNORE_TABLE_NAMES.contains(tableName);
+    }
+
+
+}

+ 97 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CustomStoreLineHandler.java

@@ -0,0 +1,97 @@
+package com.zhongzheng.framework.mybatisplus;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
+import com.zhongzheng.common.utils.ServletUtils;
+import lombok.SneakyThrows;
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.LongValue;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 多租户处理插件
+ *
+ * @author hjl
+ * @date 2021/07/30 13:37
+ */
+@Component
+public class CustomStoreLineHandler implements TenantLineHandler {
+
+    /**
+     * 租户id字段名
+     */
+    public static final String STORE_ID_COLUMN = "store_id";
+
+  //  public static  String TENANT_ID = null;
+
+//    @Value("${mybatis-plus.tenant.enabled-tenant}")
+//    private Integer enabledTenant;
+
+    /**
+     * 忽略添加租户ID的表
+     */
+    private final static List<String> IGNORE_TABLE_NAMES = new ArrayList<String>(){{
+       add("sys_tenant");
+       add("store_menu");
+       add("store_role");
+       add("store_role_menu");
+       add("store_user");
+       add("store_user_role");
+       add("top_merchant");
+       add("top_sys_config");
+    }};
+
+    /**
+     * 获取租户ID值表达式(可从cookie、token、缓存中取)
+     *
+     * @return
+     */
+    @SneakyThrows
+    @Override
+    public Expression getTenantId() {
+        String TenantId = ServletUtils.getRequest().getHeader("StoreId");
+//        if(Validator.isEmpty(TenantId)){
+//            TenantId = ServletUtils.getResponse().getHeader("StoreId");
+//            if(enabledTenant == 1 || enabledTenant == 3){
+//                if(Validator.isEmpty(TenantId)){
+//                    int code = HttpStatus.HTTP_UNAVAILABLE;
+//                    String msg = "企业非法访问";
+//                    ServletUtils.renderString( ServletUtils.getResponse(), JSON.toJSONString(AjaxResult.error(code, msg)));
+//                    ServletUtils.getResponse().getWriter().flush();
+//                    ServletUtils.getResponse().getWriter().close();
+//                }
+//            }
+//        }
+        return new LongValue(StringUtils.isNotBlank(TenantId)?TenantId:"0");
+    }
+
+    /**
+     * 获取租户字段名(数据库的租户ID字段名)
+     *
+     * @return
+     */
+    @Override
+    public String getTenantIdColumn() {
+        return STORE_ID_COLUMN;
+    }
+
+    /**
+     * 根据表名判断是否忽略拼接多租户条件
+     *
+     * @param tableName
+     * @return
+     */
+    @Override
+    public boolean ignoreTable(String tableName) {
+//        if (enabledTenant == 2 || tableName.contains("top_")){
+//            //总平台忽略tenantId
+//            return true;
+//        }
+        return IGNORE_TABLE_NAMES.contains(tableName) || StringUtils.isBlank(ServletUtils.getRequest().getHeader("StoreId"));
+    }
+
+
+}

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java

@@ -140,4 +140,8 @@ public interface IGoodsService extends IService<Goods> {
     List<GoodsVo> getAlikeGoods(AlikeGoodsBo bo);
 
 	Goods getGoodsByIdNotTenant(Long goodsId);
+
+	GoodsVo getPointsDetail(Long goodsId);
+
+	Long savePointsByAddBo(GoodsAddBo bo);
 }

+ 12 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsCategoryServiceImpl.java

@@ -50,9 +50,13 @@ public class GoodsCategoryServiceImpl extends ServiceImpl<GoodsCategoryMapper, G
         }
         categoryVos.forEach(item -> {
             TopStore store = topStoreService.getById(item.getStoreId());
-            item.setStoreName(store.getStoreName());
+            if (ObjectUtil.isNotNull(store)){
+                item.setStoreName(store.getStoreName());
+            }
             TopMerchant merchant = topMerchantService.getById(item.getMerId());
-            item.setMerName(merchant.getMerName());
+            if (ObjectUtil.isNotNull(merchant)){
+                item.setMerName(merchant.getMerName());
+            }
             //获取子集
             categoryChildren(item);
         });
@@ -70,9 +74,13 @@ public class GoodsCategoryServiceImpl extends ServiceImpl<GoodsCategoryMapper, G
         List<GoodsCategoryVo> categoryVos = list.stream().map(x ->{
             GoodsCategoryVo goodsCategoryVo = BeanUtil.toBean(x, GoodsCategoryVo.class);
             TopStore store = topStoreService.getById(x.getStoreId());
-            goodsCategoryVo.setStoreName(store.getStoreName());
+            if (ObjectUtil.isNotNull(store)){
+                goodsCategoryVo.setStoreName(store.getStoreName());
+            }
             TopMerchant merchant = topMerchantService.getById(x.getMerId());
-            goodsCategoryVo.setMerName(merchant.getMerName());
+            if (ObjectUtil.isNotNull(merchant)){
+                goodsCategoryVo.setMerName(merchant.getMerName());
+            }
             return goodsCategoryVo;
         }).collect(Collectors.toList());
         item.setChildren(categoryVos);

+ 19 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -8,7 +8,6 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -65,7 +64,6 @@ import com.zhongzheng.modules.polyv.service.IPolyvVideoService;
 import com.zhongzheng.modules.system.bo.GoodsCopyEnum;
 import com.zhongzheng.modules.system.domain.SysConfig;
 import com.zhongzheng.modules.system.domain.SysGoodsCopyRecord;
-import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysGoodsCopyRecordService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
@@ -86,7 +84,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
@@ -844,7 +841,7 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                 throw new CustomException("过期商品不允许上架");
             }
         }
-        if ((entity.getStatus() == -1 || entity.getStatus() == 0) && entity.getGoodsId().longValue() > 0 &&entity.getGoodsType()!=7) {
+        if ((entity.getStatus() == -1 || entity.getStatus() == 0) && entity.getGoodsId().longValue() > 0 &&(Validator.isNotEmpty(entity.getGoodsType()) && entity.getGoodsType()!=7)) {
             List<Long> payStatus = new ArrayList<>();
             payStatus.add(2L);
             payStatus.add(3L);
@@ -4447,6 +4444,24 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return baseMapper.getGoodsByIdNotTenant(goodsId);
     }
 
+    @Override
+    public GoodsVo getPointsDetail(Long goodsId) {
+        return BeanUtil.toBean(getById(goodsId),GoodsVo.class);
+    }
+
+    @Override
+    public Long savePointsByAddBo(GoodsAddBo bo) {
+        Goods add = BeanUtil.toBean(bo, Goods.class);
+        add.setCode(ServletUtils.getEncoded("SP"));
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        add.setGoodsType(7);
+        add.setUseType("2");
+        boolean result = this.save(add);
+        return add.getGoodsId();
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean updateGoodsRepair(UpdateGoodsRepairBo bo) {