Browse Source

新增供货和取消供货接口-新增Mongodb的多数据源

zhangwl 1 month ago
parent
commit
53a1bb6d18

+ 13 - 1
src/main/java/zs/payment/config/MongoConfig.java

@@ -3,6 +3,7 @@ package zs.payment.config;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
 import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
@@ -18,6 +19,10 @@ public class MongoConfig {
     @Value("${spring.data.mongodb.uri}")
     private String uri;
 
+    @Value("${yunmall.mongodb.uri}")
+    private String yunmallUri;
+
+    @Primary
     @Bean(name = "newTemplate")
     public MongoTemplate newTemplate() {
         SimpleMongoClientDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(uri);
@@ -28,5 +33,12 @@ public class MongoConfig {
         return template;
     }
 
-
+    @Bean(name = "yunmallTemplate")
+    public MongoTemplate yunmallTemplate() {
+        SimpleMongoClientDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(yunmallUri);
+        MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(factory), new MongoMappingContext());
+        // Don't save _class to mongo 删除_class 属性的配置
+        converter.setTypeMapper(new DefaultMongoTypeMapper(null));
+        return new MongoTemplate(factory, converter);
+    }
 }

+ 1 - 1
src/main/java/zs/payment/controller/YunMallGoodsController.java

@@ -24,7 +24,7 @@ public class YunMallGoodsController {
      * 根据op,进行创建或删除生态商品
      */
     @PostMapping("/save")
-    public String saveGoods(@Valid  @RequestBody GoodsSaveReq req){
+    public Boolean saveGoods(@Valid  @RequestBody GoodsSaveReq req){
         return goodsService.saveGoods(req.getGdId(),req.getOp());
     }
 

+ 31 - 63
src/main/java/zs/payment/dao/MongoDBDao.java

@@ -13,67 +13,58 @@ import org.springframework.data.mongodb.core.query.NearQuery;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
 
-import javax.annotation.Resource;
 import java.util.List;
 
 @Slf4j
 public abstract class MongoDBDao<T> {
-    @Resource(name = "newTemplate")
-    private MongoTemplate mongoTemplate;
+
+    /**
+     * 子类通过此方法指定使用哪个 MongoTemplate(对应不同数据源)
+     */
+    protected abstract MongoTemplate getMongoTemplate();
+
+    /**
+     * 反射获取泛型类型
+     */
+    protected abstract Class<T> getEntityClass();
 
     /***
      * 保存一个对象
-     * @param t
      */
     public T save(T t) {
-        return this.mongoTemplate.save(t);
+        return this.getMongoTemplate().save(t);
     }
 
     /**
      * 批量插入
-     *
-     * @param t
      */
     public List<T> insertBatch(List<T> t) {
-        return (List<T>) mongoTemplate.insert(t, getEntityClass());
+        return (List<T>) getMongoTemplate().insert(t, getEntityClass());
     }
 
-    /**
-     * 反射获取泛型类型
-     *
-     * @return
-     */
-    protected abstract Class<T> getEntityClass();
-
     /***
-     * 根据id从几何中查询对象
-     * @param id
-     * @return
+     * 根据id从集合中查询对象
      */
     public T queryById(String id) {
         Query query = new Query(Criteria.where("_id").is(id));
-        return this.mongoTemplate.findOne(query, this.getEntityClass());
+        return this.getMongoTemplate().findOne(query, this.getEntityClass());
     }
 
     /***
      * 删除对象
-     * @param t
-     * @return
      */
     public int delete(T t) {
-        return (int) this.mongoTemplate.remove(t).getDeletedCount();
+        return (int) this.getMongoTemplate().remove(t).getDeletedCount();
     }
 
     /**
      * 根据id删除
-     *
-     * @param id
      */
     public void deleteById(String id) {
         Criteria criteria = Criteria.where("_id").is(id);
         if (null != criteria) {
             Query query = new Query(criteria);
-            T obj = this.mongoTemplate.findOne(query, this.getEntityClass());
+            T obj = this.getMongoTemplate().findOne(query, this.getEntityClass());
             log.info("-------------->MongoDB deleteById start");
             if (obj != null) {
                 this.delete(obj);
@@ -82,29 +73,21 @@ public abstract class MongoDBDao<T> {
     }
 
     public int delete(Query query) {
-        return (int) mongoTemplate.remove(query, getEntityClass()).getDeletedCount();
+        return (int) getMongoTemplate().remove(query, getEntityClass()).getDeletedCount();
     }
 
-
     /**
      * 根据条件查询对象
-     *
-     * @param query
-     * @return
      */
     public T queryOne(Query query) {
-        return mongoTemplate.findOne(query, getEntityClass());
+        return getMongoTemplate().findOne(query, getEntityClass());
     }
 
-
     /**
      * 根据mongo条件查询列表
-     *
-     * @param query
-     * @return
      */
     public List<T> queryList(Query query) {
-        return mongoTemplate.find(query, this.getEntityClass());
+        return getMongoTemplate().find(query, this.getEntityClass());
     }
 
     /**
@@ -114,7 +97,7 @@ public abstract class MongoDBDao<T> {
      * @param update 要更新的数据
      */
     public long updateFirst(Query query, Update update) {
-        UpdateResult result = mongoTemplate.updateFirst(query, update, getEntityClass());
+        UpdateResult result = getMongoTemplate().updateFirst(query, update, getEntityClass());
         return result.getModifiedCount();
     }
 
@@ -123,65 +106,51 @@ public abstract class MongoDBDao<T> {
      *
      * @param query  查询条件
      * @param update 更新
-     * @return
      */
     public long upsert(Query query, Update update) {
-        UpdateResult result = mongoTemplate.upsert(query, update, getEntityClass());
-
+        UpdateResult result = getMongoTemplate().upsert(query, update, getEntityClass());
         return result.getModifiedCount();
     }
 
     /**
      * 批量更新
-     *
-     * @param query
-     * @param update
-     * @return
      */
     public long batchUpdate(Query query, Update update) {
-        UpdateResult result = mongoTemplate.updateMulti(query, update, getEntityClass());
+        UpdateResult result = getMongoTemplate().updateMulti(query, update, getEntityClass());
         return result.getModifiedCount();
     }
 
     /**
      * 查询数量
-     *
-     * @param query
-     * @return
      */
     public long count(Query query) {
-        return mongoTemplate.count(query, this.getEntityClass());
+        return getMongoTemplate().count(query, this.getEntityClass());
     }
 
     /**
      * 批量删除
-     *
-     * @param query
-     * @return
      */
     public long deleteBatch(Query query) {
-        DeleteResult result = mongoTemplate.remove(query, this.getEntityClass());
+        DeleteResult result = getMongoTemplate().remove(query, this.getEntityClass());
         return result.getDeletedCount();
     }
 
     /**
      * 管道查询
-     * @param agg
-     * @return
      */
     public AggregationResults<JSONObject> aggregate(Aggregation agg) {
-        return mongoTemplate.aggregate(agg, getEntityClass(), JSONObject.class);
+        return getMongoTemplate().aggregate(agg, getEntityClass(), JSONObject.class);
     }
 
     /**
      * 管道查询
+     *
      * @param aggregation 条件参数
      * @param resultClass 返回类对象
-     * @param <U> 返回类型
-     * @return
+     * @param <U>         返回类型
      */
-    public <U> List<U> aggregate(Aggregation aggregation,Class<U> resultClass){
-        AggregationResults<U> results = mongoTemplate.aggregate(aggregation, this.getEntityClass(), resultClass);
+    public <U> List<U> aggregate(Aggregation aggregation, Class<U> resultClass) {
+        AggregationResults<U> results = getMongoTemplate().aggregate(aggregation, this.getEntityClass(), resultClass);
         return results.getMappedResults();
     }
 
@@ -189,11 +158,10 @@ public abstract class MongoDBDao<T> {
      * 管道查询,返回原始 Document(用于需要手动处理 _id 类型转换的场景)
      */
     public AggregationResults<org.bson.Document> aggregateRaw(Aggregation agg) {
-        return mongoTemplate.aggregate(agg, getEntityClass(), org.bson.Document.class);
+        return getMongoTemplate().aggregate(agg, getEntityClass(), org.bson.Document.class);
     }
 
     public GeoResults<T> geoNear(NearQuery nearQuery) {
-        return mongoTemplate.geoNear(nearQuery, this.getEntityClass());
+        return getMongoTemplate().geoNear(nearQuery, this.getEntityClass());
     }
-
 }

+ 19 - 0
src/main/java/zs/payment/dao/NewMongoDBDao.java

@@ -0,0 +1,19 @@
+package zs.payment.dao;
+
+import org.springframework.data.mongodb.core.MongoTemplate;
+
+import javax.annotation.Resource;
+
+/**
+ * 默认数据源(newTemplate)的 MongoDB Dao 基类
+ */
+public abstract class NewMongoDBDao<T> extends MongoDBDao<T> {
+
+    @Resource(name = "newTemplate")
+    private MongoTemplate mongoTemplate;
+
+    @Override
+    protected MongoTemplate getMongoTemplate() {
+        return mongoTemplate;
+    }
+}

+ 1 - 1
src/main/java/zs/payment/dao/OrderCallbackDao.java

@@ -4,7 +4,7 @@ import org.springframework.stereotype.Repository;
 import zs.payment.entity.mongodb.supply.OrderCallback;
 
 @Repository
-public class OrderCallbackDao extends MongoDBDao<OrderCallback>{
+public class OrderCallbackDao extends NewMongoDBDao<OrderCallback>{
     @Override
     protected Class<OrderCallback> getEntityClass() {
         return OrderCallback.class;

+ 1 - 1
src/main/java/zs/payment/dao/OrderDao.java

@@ -4,7 +4,7 @@ import org.springframework.stereotype.Repository;
 import zs.payment.entity.mongodb.supply.Orders;
 
 @Repository
-public class OrderDao extends MongoDBDao<Orders> {
+public class OrderDao extends NewMongoDBDao<Orders> {
     @Override
     protected Class<Orders> getEntityClass() {
         return Orders.class;

+ 11 - 0
src/main/java/zs/payment/dao/yunmall/GoodsDao.java

@@ -1,12 +1,23 @@
 package zs.payment.dao.yunmall;
 
+import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.stereotype.Repository;
 import zs.payment.dao.MongoDBDao;
 import zs.payment.entity.mongodb.yunmall.Goods;
 
+import javax.annotation.Resource;
+
 @Repository
 public class GoodsDao extends MongoDBDao<Goods> {
 
+    @Resource(name = "yunmallTemplate")
+    private MongoTemplate mongoTemplate;
+
+    @Override
+    protected MongoTemplate getMongoTemplate() {
+        return mongoTemplate;
+    }
+
     @Override
     protected Class<Goods> getEntityClass() {
         return Goods.class;

+ 1 - 1
src/main/java/zs/payment/service/yunmall/goods/GoodsService.java

@@ -7,5 +7,5 @@ public interface GoodsService {
      * @param op  1=供货 2=取消供货(删除)
      * @return
      */
-    String saveGoods(String gdId,Integer op);
+    Boolean saveGoods(String gdId,Integer op);
 }

+ 12 - 11
src/main/java/zs/payment/service/yunmall/goods/impl/GoodsServiceImpl.java

@@ -1,5 +1,6 @@
 package zs.payment.service.yunmall.goods.impl;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
@@ -45,9 +46,14 @@ public class GoodsServiceImpl implements GoodsService {
 
 
     @Override
-    public String saveGoods(String gdId, Integer op) {
-
+    public Boolean saveGoods(String gdId, Integer op) {
+        Query query = new Query(Criteria.where("gd_id").is(Long.valueOf(gdId)));
         if (op==1){
+
+            long count = goodsDao.count(query);
+            if (count>0){
+                throw new ApiException("已经存在,不必重复创建");
+            }
             //查询商品基础信息
             B2cGoodsSpuInOnline b2cGoods = b2cGoodsSpuInOnlineService.getById(gdId);
             //查询图片
@@ -93,20 +99,15 @@ public class GoodsServiceImpl implements GoodsService {
                 goods.setUpdateTime(time);
 
                 Goods save = goodsDao.save(goods);
-                return save.getId().toString();
+                return StringUtils.isNotBlank(save.getId().toString());
             }
         }else if (op==2){
             //取消供货
-            Query query = new Query(Criteria.where("gd_id").is(Long.valueOf(gdId)));
-            goodsDao.delete(query);
-
-
+            int i = goodsDao.delete(query);
+            return i>0;
         }else {
             throw new ApiException("参数有误");
         }
-
-
-
-        return "";
+        return false;
     }
 }

+ 4 - 2
src/main/resources/application-pro.yml

@@ -28,6 +28,7 @@ spring:
             uri: mongodb://pay:pay2026@dds-2zedd8d70bde6e541.mongodb.rds.aliyuncs.com:3717,dds-2zedd8d70bde6e542.mongodb.rds.aliyuncs.com:3717/pay_supply
 
 
+
     datasource:
         # ============== 主数据源(qiyun 库)==============
         primary:
@@ -69,5 +70,6 @@ supply:
 
 
 
-
-
+yunmall:
+    mongodb:
+        uri: mongodb://dds-2ze5ed32a2e1da641.mongodb.rds.aliyuncs.com:3717/yunmall