Browse Source

增加统计个人和企业的买入的总金额。
增加后台维护汇率的接口

yujia 7 years ago
parent
commit
d3e50c036c

+ 46 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/controller/ExchangeRateController.java

@@ -0,0 +1,46 @@
+package com.uas.platform.b2c.fa.settlement.controller;
+
+import com.uas.platform.b2c.fa.settlement.model.ExchangeRate;
+import com.uas.platform.b2c.fa.settlement.service.ExchangeRateService;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 汇率的控制器
+ *
+ * @author yuj 2018-09-06 10:59
+ */
+@RestController
+@RequestMapping(value = "/trade/ExchangeRate")
+public class ExchangeRateController {
+
+    private final ExchangeRateService exchangeRateService;
+
+    @Autowired
+    public ExchangeRateController(ExchangeRateService exchangeRateService) {
+        this.exchangeRateService = exchangeRateService;
+    }
+
+    /**
+     * 保存汇率信息
+     * @param exchangeRate
+     * @return
+     */
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public ResultMap save(@RequestBody ExchangeRate exchangeRate) {
+        return exchangeRateService.save(exchangeRate);
+    }
+
+    /**
+     * 获取指定的汇率信息
+     * @return
+     */
+    @RequestMapping(value = "/get", method = RequestMethod.GET)
+    public ResultMap getExchangeRate(String type) {
+        return exchangeRateService.getExchangeRate(type);
+    }
+}

+ 22 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/dao/ExchangeRateDao.java

@@ -0,0 +1,22 @@
+package com.uas.platform.b2c.fa.settlement.dao;
+
+import com.uas.platform.b2c.fa.settlement.model.ExchangeRate;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * description
+ *
+ * @author yuj 2018-09-06 10:58
+ */
+@Repository
+public interface ExchangeRateDao extends JpaRepository<ExchangeRate, Long>, JpaSpecificationExecutor<ExchangeRate>{
+
+    List<ExchangeRate> findByFromCurrency(String currency);
+
+
+    List<ExchangeRate> findByFromCurrencyAndToCurrency(String fromCurrency, String toCurrency);
+}

+ 151 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/model/ExchangeRate.java

@@ -0,0 +1,151 @@
+package com.uas.platform.b2c.fa.settlement.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 汇率信息
+ *
+ * @author yuj 2018-09-06 10:42
+ */
+@Entity
+@Table(name = "trade$exchangerate")
+public class ExchangeRate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+
+    /**
+     * 来源币
+     */
+    @Column(name = "er_from_currency")
+    private String fromCurrency;
+
+    /**
+     * 兑换币
+     */
+    @Column(name = "er_to_currency")
+    private String toCurrency;
+
+    /**
+     * 汇率
+     */
+    @Column(name = "er_rate")
+    private Double rate;
+
+    /**
+     * 操作时间
+     */
+    @Column(name = "er_update_time")
+    private Date updateTime;
+
+    /**
+     * 操作人
+     */
+    @Column(name = "er_useruu")
+    private Long useruu;
+
+    /**
+     * 企业uu
+     */
+    @Column(name = "er_enuu")
+    private Long enuu;
+
+    /**
+     * 操作人名称
+     */
+    @Column(name = "er_user_name")
+    private String userName;
+
+
+    /**
+     * 企业名称
+     */
+    @Column(name = "er_enterprise_name")
+    private String enterpriseName;
+
+    public Long getId() {
+        return id;
+    }
+
+    public ExchangeRate setId(Long id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getFromCurrency() {
+        return fromCurrency;
+    }
+
+    public ExchangeRate setFromCurrency(String fromCurrency) {
+        this.fromCurrency = fromCurrency;
+        return this;
+    }
+
+    public String getToCurrency() {
+        return toCurrency;
+    }
+
+    public ExchangeRate setToCurrency(String toCurrency) {
+        this.toCurrency = toCurrency;
+        return this;
+    }
+
+    public Double getRate() {
+        return rate;
+    }
+
+    public ExchangeRate setRate(Double rate) {
+        this.rate = rate;
+        return this;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public ExchangeRate setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+        return this;
+    }
+
+    public Long getUseruu() {
+        return useruu;
+    }
+
+    public ExchangeRate setUseruu(Long useruu) {
+        this.useruu = useruu;
+        return this;
+    }
+
+    public Long getEnuu() {
+        return enuu;
+    }
+
+    public ExchangeRate setEnuu(Long enuu) {
+        this.enuu = enuu;
+        return this;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public ExchangeRate setUserName(String userName) {
+        this.userName = userName;
+        return this;
+    }
+
+    public String getEnterpriseName() {
+        return enterpriseName;
+    }
+
+    public ExchangeRate setEnterpriseName(String enterpriseName) {
+        this.enterpriseName = enterpriseName;
+        return this;
+    }
+}

+ 36 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/service/ExchangeRateService.java

@@ -0,0 +1,36 @@
+package com.uas.platform.b2c.fa.settlement.service;
+
+import com.uas.platform.b2c.fa.settlement.model.ExchangeRate;
+import com.uas.platform.b2c.trade.support.ResultMap;
+
+import java.util.List;
+
+/**
+ * description
+ *
+ * @author yuj 2018-09-06 10:58
+ */
+public interface ExchangeRateService {
+
+    /**
+     * 保存汇率信息
+     * @param exchangeRate
+     * @return
+     */
+    ResultMap save(ExchangeRate exchangeRate);
+
+
+    /**
+     * 获取指定的汇率信息
+     * @return
+     */
+    ResultMap getExchangeRate(String type);
+
+    /**
+     * 获取指定汇率
+     * @param fromCurrency 需要转的币别
+     * @param toCurrency 转化之后的币别
+     * @return List<ExchangeRate>
+     */
+    List<ExchangeRate> findByFromCurrencyAndToCurrency(String fromCurrency, String toCurrency);
+}

+ 75 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/ExchangeRateServiceImpl.java

@@ -0,0 +1,75 @@
+package com.uas.platform.b2c.fa.settlement.service.impl;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.fa.settlement.dao.ExchangeRateDao;
+import com.uas.platform.b2c.fa.settlement.model.ExchangeRate;
+import com.uas.platform.b2c.fa.settlement.service.ExchangeRateService;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * description
+ *
+ * @author yuj 2018-09-06 10:59
+ */
+@Service
+public class ExchangeRateServiceImpl implements ExchangeRateService {
+
+    private final ExchangeRateDao exchangeRateDao;
+
+    @Autowired
+    public ExchangeRateServiceImpl(ExchangeRateDao exchangeRateDao) {
+        this.exchangeRateDao = exchangeRateDao;
+    }
+
+    /**
+     * 保存汇率信息
+     *
+     * @param exchangeRate
+     * @return
+     */
+    @Override
+    public ResultMap save(ExchangeRate exchangeRate) {
+        if (exchangeRate == null) {
+            return ResultMap.success(null);
+        } else {
+            User user = SystemSession.getUser();
+            exchangeRate.setEnuu(user.getEnterprise().getUu());
+            exchangeRate.setEnterpriseName(user.getEnterprise().getEnName());
+            exchangeRate.setUseruu(user.getUserUU());
+            exchangeRate.setUserName(user.getUserName());
+            exchangeRate.setUpdateTime(new Date());
+            ExchangeRate perExchangeRate = exchangeRateDao.save(exchangeRate);
+            return ResultMap.success(perExchangeRate);
+        }
+    }
+
+    /**
+     * 获取指定的汇率信息
+     *
+     * @param type
+     * @return
+     */
+    @Override
+    public ResultMap getExchangeRate(String type) {
+        List<ExchangeRate> exchangeRates = exchangeRateDao.findByFromCurrency(type);
+        return ResultMap.success(exchangeRates);
+    }
+
+    /**
+     * 获取指定汇率
+     *
+     * @param fromCurrency 需要转的币别
+     * @param toCurrency   转化之后的币别
+     * @return List<ExchangeRate>
+     */
+    @Override
+    public List<ExchangeRate> findByFromCurrencyAndToCurrency(String fromCurrency, String toCurrency) {
+        return exchangeRateDao.findByFromCurrencyAndToCurrency(fromCurrency, toCurrency);
+    }
+}

+ 5 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/constant/StringConstant.java

@@ -37,6 +37,11 @@ public class StringConstant {
      */
     public static final String RMB = "RMB";
 
+    /**
+     * 美金
+     */
+    public static final String USD = "USD";
+
     /**
      * 无物料
      */

+ 25 - 0
src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java

@@ -975,4 +975,29 @@ public class OrderController {
 	public ResultMap checkConsignment(@RequestBody List<String> uuidArray){
 		return orderService.checkConsignment(uuidArray);
 	}
+
+	/**
+	 * 统计个人的订单金额(只包含520-405)
+	 * @param useruu 个人uu
+	 * @param enuu 企业uu
+	 * @param starttime 开始时间
+	 * @param endtime 结束时间
+	 * @return  ResultMap
+	 */
+	@RequestMapping(value = "/trading/volume/personal", method = RequestMethod.GET)
+	public ResultMap statisticsPersonTradingVolume(Long useruu, Long enuu, Long starttime, Long endtime) {
+		return orderService.statisticsPersonTradingVolume(useruu, enuu, starttime, endtime);
+	}
+
+	/**
+	 * 统计企业的订单金额总计 (只包含520-405)
+	 * @param enuu
+	 * @param starttime
+	 * @param endtime
+	 * @return ResultMap
+	 */
+	@RequestMapping(value = "/trading/volume", method = RequestMethod.GET)
+	public ResultMap statisticsEnterpriseTradingVolume(Long enuu, Long starttime, Long endtime) {
+		return orderService.statisticsEnterpriseTradingVolume(enuu, starttime, endtime);
+	}
 }

+ 64 - 0
src/main/java/com/uas/platform/b2c/trade/order/dao/OrderDao.java

@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -300,4 +301,67 @@ public interface OrderDao extends JpaSpecificationExecutor<Order>, JpaRepository
 	@Modifying
 	@Query(nativeQuery = true, value = "update trade$order SET OR_USED = 0 where or_id = :orderid")
 	int updateUsedStatus(@Param("orderid") String orderid);
+
+	/**
+	 * 获取指定状态下的个人的订单
+	 * @param useruu
+	 * @param dissociative
+	 * @return
+	 */
+	@Query(value = "select o from trade.Order o where o.buyeruu = :useruu and o.dissociative = :dissociative and o.status in (:status)")
+	List<Order> getOrderByUseruuAndDissociativeAndStatus(@Param("useruu") Long useruu, @Param("dissociative") Integer dissociative, @Param("status") List<Integer> status);
+
+
+	/**
+	 * 获取指定状态下的个人的订单
+	 * @param useruu 个人useruu
+	 * @param status 状态
+	 * @return
+	 */
+	@Query(value = "select o from trade.Order o where o.buyeruu = :useruu and o.dissociative = :dissociative and o.status in (:status) and o.creattime > :starttime and o.creattime < :endtime")
+	List<Order> getOrderByUseruuAndDissociativeAndstatusAndStartTimeAndEndTime(@Param("useruu") Long useruu, @Param("dissociative") Integer dissociative, @Param("status") List<Integer> status, @Param("starttime")Date starttime, @Param("endtime") Date endtime);
+
+
+	/**
+	 * 获取指定状态下的个人的订单
+	 * @param useruu 个人useruu
+	 * @param enuu 企业的enuu
+	 * @param status 状态
+	 * @return
+	 */
+	@Query(value = "select o from trade.Order o where o.buyeruu = :useruu and o.buyerenuu = :enuu and o.status in (:status)")
+	List<Order> getOrderByUseruuAndEnuuAndstatus(@Param("useruu") Long useruu, @Param("enuu") Long enuu, @Param("status") List<Integer> status);
+
+
+	/**
+	 * 获取指定状态下的个人的订单
+	 * @param useruu 个人useruu
+	 * @param enuu 企业的enuu
+	 * @param status 状态
+	 * @return
+	 */
+	@Query(value = "select o from trade.Order o where o.buyeruu = :useruu and o.buyerenuu = :enuu and o.status in (:status) and o.creattime > :starttime and o.creattime < :endtime")
+	List<Order> getOrderByUseruuAndEnuuAndstatusAndStartTimeAndEndTime(@Param("useruu") Long useruu, @Param("enuu") Long enuu, @Param("status") List<Integer> status, @Param("starttime")Date starttime, @Param("endtime") Date endtime);
+
+
+
+	/**
+	 * 获取指定状态下的企业的订单
+	 * @param enuu 企业的enuu
+	 * @param status 状态
+	 * @param starttime 开始时间
+	 * @param endtime 结束时间
+	 * @return List<Order>
+	 */
+	@Query(value = "select o from trade.Order o where o.buyerenuu = :enuu and o.status in (:status) and o.creattime > :starttime and o.creattime < :endtime")
+	List<Order> getOrderByEnuuAndstatusAndStartTimeAndEndTime(@Param("enuu") Long enuu, @Param("status") List<Integer> status, @Param("starttime")Date starttime, @Param("endtime") Date endtime);
+
+	/**
+	 * 获取指定状态下的企业的订单
+	 * @param enuu 企业的enuu
+	 * @param status 状态
+	 * @return List<Order>
+	 */
+	@Query(value = "select o from trade.Order o where o.buyerenuu = :enuu and o.status in (:status)")
+	List<Order> getOrderByEnuuAndstatus(@Param("enuu") Long enuu, @Param("status") List<Integer> status);
 }

+ 24 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java

@@ -17,6 +17,8 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 
 import java.util.Date;
 import java.util.List;
@@ -664,4 +666,26 @@ public interface OrderService {
 	 * @return
 	 */
 	ResultMap checkConsignment(List<String> uuidArray);
+
+
+	/**
+	 * 统计个人交易额
+	 * @param useruu 个人useruu
+	 * @param enuu 企业的enuu
+	 * @param starttime 开始时间
+	 * @param endtime 结束时间
+	 * @return
+	 */
+	ResultMap statisticsPersonTradingVolume(Long useruu, Long enuu, Long starttime, Long endtime);
+
+
+
+	/**
+	 * 统计个人的订单总计
+	 * @param enuu
+	 * @param starttime
+	 * @param endtime
+	 * @return ResultMap
+	 */
+	ResultMap statisticsEnterpriseTradingVolume(Long enuu, Long starttime, Long endtime);
 }

+ 106 - 6
src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java

@@ -10,10 +10,6 @@ import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.TradeLog;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.base.service.SendMessageService;
-import com.uas.platform.b2c.common.message.model.MessageModel;
-import com.uas.platform.b2c.common.message.type.ConsumerApp;
-import com.uas.platform.b2c.common.message.type.ConsumerType;
-import com.uas.platform.b2c.common.message.type.SMSType;
 import com.uas.platform.b2c.common.search.rpc.service.OrderSearchService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.constant.ShortConstant;
@@ -34,13 +30,17 @@ import com.uas.platform.b2c.fa.settlement.dao.BillDao;
 import com.uas.platform.b2c.fa.settlement.dao.BillInfoDao;
 import com.uas.platform.b2c.fa.settlement.model.Bill;
 import com.uas.platform.b2c.fa.settlement.model.BillInfo;
+import com.uas.platform.b2c.fa.settlement.model.ExchangeRate;
 import com.uas.platform.b2c.fa.settlement.service.BillSubmitService;
+import com.uas.platform.b2c.fa.settlement.service.ExchangeRateService;
 import com.uas.platform.b2c.logistics.dao.AddressDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFOrderDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFPurchaseDao;
 import com.uas.platform.b2c.logistics.dao.PickUpAddressDao;
 import com.uas.platform.b2c.logistics.model.*;
 import com.uas.platform.b2c.logistics.service.InvoiceFPurchaseService;
+import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
+import com.uas.platform.b2c.prod.commodity.constant.StringConstant;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
@@ -61,7 +61,6 @@ import com.uas.platform.b2c.trade.deprecated.model.UserInfoForOrder;
 import com.uas.platform.b2c.trade.inquiry.dao.TradeChargeDao;
 import com.uas.platform.b2c.trade.inquiry.model.TradeCharge;
 import com.uas.platform.b2c.trade.order.StringConstant.Currency;
-import com.uas.platform.b2c.trade.order.StringConstant.StringFormat;
 import com.uas.platform.b2c.trade.order.dao.OrderDao;
 import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.dao.OrderIndexDetailDao;
@@ -214,11 +213,14 @@ public class OrderServiceImpl implements OrderService {
     @Autowired
     private MessageNotifyPersonalManagementService messageNotifyPersonalManagementService;
 
+    private final ExchangeRateService exchangeRateService;
+
     private final BoundedExecutor executor;
 
     @Autowired
-    public OrderServiceImpl(OrderDao orderDao) {
+    public OrderServiceImpl(OrderDao orderDao, ExchangeRateService exchangeRateService) {
         this.orderDao = orderDao;
+        this.exchangeRateService = exchangeRateService;
         ExecutorService executorService = Executors.newCachedThreadPool();
         executor = new BoundedExecutor(executorService, 1600);
     }
@@ -3471,4 +3473,102 @@ public class OrderServiceImpl implements OrderService {
         }
         return ResultMap.success(bool);
     }
+
+    /**
+     * 统计个人交易额
+     *
+     * @param useruu    个人useruu
+     * @param enuu      企业的enuu
+     * @param starttime 开始时间
+     * @param endtime   结束时间
+     * @return
+     */
+    @Override
+    public ResultMap statisticsPersonTradingVolume(Long useruu, Long enuu, Long starttime, Long endtime) {
+        if (useruu == null) {
+            return ResultMap.success(0);
+        }
+        List<Order> orders = new ArrayList<>();
+        List<Integer> status = new ArrayList<>();
+        status.add(Status.COMPLETED.value());
+        status.add(Status.RECEIVED.value());
+        if (starttime == null || endtime == null) {
+            if (enuu == null) {
+                List<Order> orderList = orderDao.getOrderByUseruuAndDissociativeAndStatus(useruu, Type.PERSONAL.value(), status);
+                orders.addAll(orderList);
+            } else {
+                List<Order> orderList = orderDao.getOrderByUseruuAndEnuuAndstatus(useruu, enuu, status);
+                orders.addAll(orderList);
+            }
+        } else {
+            Date start = new Date(starttime);
+            Date end = new Date(endtime);
+            if (enuu == null) {
+                List<Order> orderList = orderDao.getOrderByUseruuAndDissociativeAndstatusAndStartTimeAndEndTime(useruu, Type.PERSONAL.value(), status, start, end);
+                orders.addAll(orderList);
+            } else {
+                List<Order> orderList = orderDao.getOrderByUseruuAndEnuuAndstatusAndStartTimeAndEndTime(useruu, enuu, status, start, end);
+                orders.addAll(orderList);
+            }
+        }
+        Double orderTotal = statisticsOrderTotal(orders);
+        return ResultMap.success(orderTotal);
+    }
+
+    /**
+     * 统计个人的订单总计
+     *
+     * @param enuu 企业enuu
+     * @param starttime 开始时间
+     * @param endtime 结束时间
+     * @return ResultMap 返回值
+     */
+    @Override
+    public ResultMap statisticsEnterpriseTradingVolume(Long enuu, Long starttime, Long endtime) {
+        if (enuu == null) {
+            return ResultMap.success(0);
+        }
+        List<Order> orders = new ArrayList<>();
+        List<Integer> status = new ArrayList<>();
+        status.add(Status.COMPLETED.value());
+        status.add(Status.RECEIVED.value());
+        if (starttime == null || endtime == null) {
+            //统计历史所有的买家金额
+            List<Order> orderList = orderDao.getOrderByEnuuAndstatus(enuu, status);
+            orders.addAll(orderList);
+        } else {
+            Date start = new Date(starttime);
+            Date end = new Date(endtime);
+            List<Order> orderList = orderDao.getOrderByEnuuAndstatusAndStartTimeAndEndTime(enuu, status, start, end);
+            orders.addAll(orderList);
+        }
+        Double orderTotal = statisticsOrderTotal(orders);
+        return ResultMap.success(orderTotal);
+    }
+
+
+    /**
+     * 统计订单的总金额
+     * @param orders 订单
+     * @return 返回总金额,USD 用汇率转
+     */
+    private Double statisticsOrderTotal(List<Order> orders) {
+        Double usdTotal = 0.0d;
+        Double rmbTotal = 0.0d;
+        for (Order order : orders) {
+            if (StringConstant.RMB.equals(order.getCurrency())) {
+                rmbTotal = NumberUtil.add(order.getEnsurePrice(), rmbTotal);
+            } else {
+                usdTotal = NumberUtil.add(order.getEnsurePrice(), usdTotal);
+            }
+        }
+        if (NumberUtil.compare(usdTotal, DoubleConstant.zero) > 0) {
+            List<ExchangeRate> exchangeRates = exchangeRateService.findByFromCurrencyAndToCurrency(StringConstant.USD, StringConstant.RMB);
+            if (org.apache.commons.collections.CollectionUtils.isEmpty(exchangeRates)) {
+                throw new IllegalOperatorException("美金兑人民币的汇率还未设置");
+            }
+            rmbTotal = NumberUtil.add(rmbTotal, NumberUtil.mul(usdTotal, exchangeRates.get(0).getRate()));
+        }
+        return rmbTotal;
+    }
 }