Browse Source

对账单接口增加个人对账金额统计

hejq 7 years ago
parent
commit
94730fa5ea

+ 6 - 13
src/main/java/com/uas/platform/b2b/model/PurchaseApCheck.java

@@ -1,26 +1,19 @@
 package com.uas.platform.b2b.model;
 
+import javax.persistence.*;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Set;
 
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.OrderBy;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
 /**
  * 买家应付(卖家应收)对账单
+ * @author hejq
  */
 @Entity
-@Table(name = "purc$apcheck")
+@Table(name = "purc$apcheck", indexes = {
+		@Index(name = "purc$apcheck_custuu_IDX", columnList = "pa_custuu"),
+        @Index(name = "purc$apcheck_apdate_IDX", columnList = "pa_apdate")
+})
 public class PurchaseApCheck implements Serializable {
 
 	/**

+ 4 - 1
src/main/java/com/uas/platform/b2b/model/PurchaseApCheckItem.java

@@ -12,8 +12,11 @@ import java.util.Set;
 
 /**
  * 买家应付(卖家应收)对账单明细
+ * @author hejq
  */
-@Table(name = "purc$apcheckitem")
+@Table(name = "purc$apcheckitem", indexes = {
+		@Index(name = "purc$apcheckitem_sourcetable_IDX", columnList = "pai_sourcetable")
+})
 @Entity
 public class PurchaseApCheckItem implements Serializable {
 

+ 8 - 8
src/main/java/com/uas/platform/b2b/publicapi/controller/ApCheckApiController.java

@@ -28,16 +28,16 @@ public class ApCheckApiController {
      * @param startTime 开始时间
      * @param endTime 截止时间
      * @return ModelMap
-     *  <per>
+     *  <pre>
      *      count: 对账金额
-     *  </per>
+     *  </pre>
      */
     @RequestMapping(value = "/user")
-    public ModelMap getUserApCheckAccount(@RequestParam(value = "useruu") Long userUU,
+    public ModelMap getUserApCheckAmount(@RequestParam(value = "useruu") Long userUU,
                                           @RequestParam(value = "enuu", required = false) Long enUU,
                                           @RequestParam(value = "starttime") Long startTime,
                                           @RequestParam(value = "endtime") Long endTime) {
-        return new ModelMap("count", 0);
+        return new ModelMap("count", apCheckApiService.getUserApCheckAmount(userUU, enUU, startTime, endTime));
     }
 
     /**
@@ -47,14 +47,14 @@ public class ApCheckApiController {
      * @param startTime 开始时间
      * @param endTime 截止时间
      * @return ModelMap
-     *  <per>
+     *  <pre>
      *      count: 对账金额
-     *  </per>
+     *  </pre>
      */
     @RequestMapping(value = "/enterprise")
-    public ModelMap getEnterpriseApCheckAccount(@RequestParam(value = "enuu") Long enUU,
+    public ModelMap getEnterpriseApCheckAmount(@RequestParam(value = "enuu") Long enUU,
                                                 @RequestParam(value = "starttime") Long startTime,
                                                 @RequestParam(value = "endtime") Long endTime) {
-        return new ModelMap("count", apCheckApiService.getEnterpriseApCheckAccount(enUU, startTime, endTime));
+        return new ModelMap("count", apCheckApiService.getEnterpriseApCheckAmount(enUU, startTime, endTime));
     }
 }

+ 2 - 2
src/main/java/com/uas/platform/b2b/publicapi/service/ApCheckApiService.java

@@ -17,7 +17,7 @@ public interface ApCheckApiService {
      * @param endTime 截止时间
      * @return 对账金额
      */
-    Double getUserApCheckAccount(Long userUU, Long enUU, Long startTime, Long endTime);
+    Double getUserApCheckAmount(Long userUU, Long enUU, Long startTime, Long endTime);
 
     /**
      * 通过传入参数获取企业对账金额
@@ -27,5 +27,5 @@ public interface ApCheckApiService {
      * @param endTime 截止时间
      * @return 对账金额
      */
-    Double getEnterpriseApCheckAccount(Long enUU, Long startTime, Long endTime);
+    Double getEnterpriseApCheckAmount(Long enUU, Long startTime, Long endTime);
 }

+ 202 - 7
src/main/java/com/uas/platform/b2b/publicapi/service/impl/ApCheckApiServiceImpl.java

@@ -6,6 +6,8 @@ import com.uas.platform.b2b.publicapi.service.ApCheckApiService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.sql.Date;
+
 
 /**
  * 对账单api
@@ -30,9 +32,202 @@ public class ApCheckApiServiceImpl implements ApCheckApiService {
      * @return 对账金额
      */
     @Override
-    public Double getUserApCheckAccount(Long userUU, Long enUU, Long startTime, Long endTime) {
-        StringBuffer stringBuffer = new StringBuffer("select ");
-        return null;
+    public Double getUserApCheckAmount(Long userUU, Long enUU, Long startTime, Long endTime) {
+        Date fromDate = new java.sql.Date(startTime);
+        Date endDate = new java.sql.Date(endTime);
+        // 采购验收单
+        Double purchaseAccept = getPurchaseAcceptAmount(userUU, enUU, fromDate, endDate);
+        // 采购退单
+        Double purchaseReturn = getPurchaseReturnAmount(userUU, enUU, fromDate, endDate);
+        // 不良品入库单
+        Double badIn = getBadInAmount(userUU, enUU, fromDate, endDate);
+        // 不良品出库单
+        Double badOut = getBadOutAmount(userUU, enUU, fromDate, endDate);
+        // 委外验收单
+        Double makeAccept = getMakeAcceptAmount(userUU, enUU, fromDate, endDate);
+        // 委外验退单
+        Double makeReturn = getMakeReturnAmount(userUU, enUU, fromDate, endDate);
+        // 总金额
+        Double amount = purchaseAccept + purchaseReturn + badIn + badOut + makeAccept + makeReturn;
+        return amount;
+    }
+
+    /**
+     * 获取委外验退单对账金额
+     *
+     * @param userUU 用户UU
+     * @param enUU 企业UU
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @return 委外验退单对账金额
+     */
+    private Double getMakeReturnAmount(Long userUU, Long enUU, Date fromDate, Date endDate) {
+        StringBuffer stringBuffer = new StringBuffer("select coalesce(sum(case currency " +
+                "when 'RMB' then a.amount " +
+                "when 'USD' then a.amount * " + UsoftRate.USD_RATE +
+                "when 'HKD' then a.amount * " + UsoftRate.HKD_RATE +
+                " end), 0.00) amount from (" +
+                "select sum(e.pa_checkamount) amount,pa_currency currency from purc$apcheckitem c " +
+                "left join purc$apcheck e on c.pai_paid = e.pa_id " +
+                "left join make$returnitem r on c.pai_sourceid = r.mri_id " +
+                "left join make$orders m on r.mri_odid = m.ma_id " +
+                "where c.pai_sourcetable = 'make$returnitem' and m.ma_useruu = " + userUU +
+                " and pa_apdate >= '" + fromDate + "' " +
+                "and pa_apdate <= '" + endDate + "' ");
+        if (null != enUU) {
+            stringBuffer.append("and m.ma_enuu = ").append(enUU);
+        }
+        stringBuffer.append(" group by pa_currency) a");
+        return commonDao.queryForObject(stringBuffer.toString(), Double.class);
+    }
+
+    /**
+     * 获取委外验收单对账金额
+     *
+     * @param userUU 用户UU
+     * @param enUU 企业UU
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @return 委外验收单对账金额
+     */
+    private Double getMakeAcceptAmount(Long userUU, Long enUU, Date fromDate, Date endDate) {
+        StringBuffer stringBuffer = new StringBuffer("select coalesce(sum(case currency " +
+                "when 'RMB' then a.amount " +
+                "when 'USD' then a.amount * " + UsoftRate.USD_RATE +
+                "when 'HKD' then a.amount * " + UsoftRate.HKD_RATE +
+                " end), 0.00) amount from (" +
+                "select sum(e.pa_checkamount) amount,pa_currency currency from purc$apcheckitem c " +
+                "left join purc$apcheck e on c.pai_paid = e.pa_id " +
+                "left join make$acceptitem i on c.pai_sourceid = i.mai_id " +
+                "left join make$orders m on i.mai_odid = m.ma_id " +
+                "where c.pai_sourcetable = 'make$acceptitem' and m.ma_useruu = " + userUU +
+                " and pa_apdate >= '" + fromDate + "' " +
+                "and pa_apdate <= '" + endDate + "' ");
+        if (null != enUU) {
+            stringBuffer.append("and m.ma_enuu = ").append(enUU);
+        }
+        stringBuffer.append(" group by pa_currency) a");
+        return commonDao.queryForObject(stringBuffer.toString(), Double.class);
+    }
+
+    /**
+     * 获取不良品出库单对账金额
+     *
+     * @param userUU 用户UU
+     * @param enUU 企业UU
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @return 不良品出库单对账金额
+     */
+    private Double getBadOutAmount(Long userUU, Long enUU, Date fromDate, Date endDate) {
+        StringBuffer stringBuffer = new StringBuffer("select coalesce(sum(case currency " +
+                "when 'RMB' then a.amount " +
+                "when 'USD' then a.amount * " + UsoftRate.USD_RATE +
+                "when 'HKD' then a.amount * " + UsoftRate.HKD_RATE +
+                " end), 0.00) amount from (" +
+                "select sum(e.pa_checkamount) amount,pa_currency currency from purc$apcheckitem c " +
+                "left join purc$apcheck e on c.pai_paid = e.pa_id " +
+                "left join purc$badoutitem b on c.pai_sourceid = b.poi_id " +
+                "left join purc$orderitems i on b.poi_pdid = i.pd_id " +
+                "left join purc$orders o on i.pd_puid = o.pu_id " +
+                "where c.pai_sourcetable = 'purc$badoutitem' and o.pu_useruu = " + userUU +
+                " and pa_apdate >= '" + fromDate + "' " +
+                "and pa_apdate <= '" + endDate + "' ");
+        if (null != enUU) {
+            stringBuffer.append("and o.pu_enuu = ").append(enUU);
+        }
+        stringBuffer.append(" group by pa_currency) a");
+        return commonDao.queryForObject(stringBuffer.toString(), Double.class);
+    }
+
+    /**
+     * 获取不良品入库单对账金额
+     *
+     * @param userUU 用户UU
+     * @param enUU 企业UU
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @return 不良品入库单对账金额
+     */
+    private Double getBadInAmount(Long userUU, Long enUU, Date fromDate, Date endDate) {
+        StringBuffer stringBuffer = new StringBuffer("select coalesce(sum(case currency " +
+                "when 'RMB' then a.amount " +
+                "when 'USD' then a.amount * " + UsoftRate.USD_RATE +
+                "when 'HKD' then a.amount * " + UsoftRate.HKD_RATE +
+                " end), 0.00) amount from (" +
+                "select sum(e.pa_checkamount) amount,pa_currency currency from purc$apcheckitem c " +
+                "left join purc$apcheck e on c.pai_paid = e.pa_id " +
+                "left join purc$badinitem b on c.pai_sourceid = b.pbi_id " +
+                "left join purc$orderitems i on b.pbi_pdid = i.pd_id " +
+                "left join purc$orders o on i.pd_puid = o.pu_id " +
+                "where c.pai_sourcetable = 'purc$badinitem' and o.pu_useruu = " + userUU +
+                " and pa_apdate >= '" + fromDate + "' " +
+                "and pa_apdate <= '" + endDate + "' ");
+        if (null != enUU) {
+            stringBuffer.append("and o.pu_enuu = ").append(enUU);
+        }
+        stringBuffer.append(" group by pa_currency) a");
+        return commonDao.queryForObject(stringBuffer.toString(), Double.class);
+    }
+
+    /**
+     * 获取采购验退单对账金额
+     *
+     * @param userUU 用户UU
+     * @param enUU 企业UU
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @return 采购验退单对账金额
+     */
+    private Double getPurchaseReturnAmount(Long userUU, Long enUU, Date fromDate, Date endDate) {
+        StringBuffer stringBuffer = new StringBuffer("select coalesce(sum(case currency " +
+                "when 'RMB' then a.amount " +
+                "when 'USD' then a.amount * " + UsoftRate.USD_RATE +
+                "when 'HKD' then a.amount * " + UsoftRate.HKD_RATE +
+                " end), 0.00) amount from (" +
+                "select sum(e.pa_checkamount) amount,pa_currency currency from purc$apcheckitem c " +
+                "left join purc$apcheck e on c.pai_paid = e.pa_id " +
+                "left join purc$returnitem r on c.pai_sourceid = r.pri_id " +
+                "left join purc$orderitems i on r.pri_pdid = i.pd_id " +
+                "left join purc$orders o on i.pd_puid = o.pu_id " +
+                "where c.pai_sourcetable = 'purc$returnitem' and o.pu_useruu = " + userUU +
+                " and pa_apdate >= '" + fromDate + "' " +
+                "and pa_apdate <= '" + endDate + "' ");
+        if (null != enUU) {
+            stringBuffer.append("and o.pu_enuu = ").append(enUU);
+        }
+        stringBuffer.append(" group by pa_currency) a");
+        return commonDao.queryForObject(stringBuffer.toString(), Double.class);
+    }
+
+    /**
+     * 获取采购验收单对账金额
+     *
+     * @param userUU 用户UU
+     * @param enUU 企业UU
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @return 采购验收单对账金额
+     */
+    private Double getPurchaseAcceptAmount(Long userUU, Long enUU, Date fromDate, Date endDate) {
+        StringBuffer stringBuffer = new StringBuffer("select coalesce(sum(case currency " +
+                "when 'RMB' then a.amount " +
+                "when 'USD' then a.amount * " + UsoftRate.USD_RATE +
+                "when 'HKD' then a.amount * " + UsoftRate.HKD_RATE +
+                " end), 0.00) amount from (" +
+                " select sum(e.pa_checkamount) amount,pa_currency currency from purc$apcheckitem c " +
+                " left join purc$apcheck e on c.pai_paid = e.pa_id " +
+                " left join purc$acceptitem a on c.pai_sourceid = a.pai_id " +
+                " left join purc$orderitems i on a.pai_pdid = i.pd_id " +
+                " left join purc$orders o on i.pd_puid = o.pu_id " +
+                " where c.pai_sourcetable = 'purc$acceptitem' and o.pu_useruu = " + userUU +
+                " and pa_apdate >= '" + fromDate + "' " +
+                " and pa_apdate <= '" + endDate + "' ");
+        if (null != enUU) {
+            stringBuffer.append("and o.pu_enuu = ").append(enUU);
+        }
+        stringBuffer.append(" group by pa_currency) a");
+        return commonDao.queryForObject(stringBuffer.toString(), Double.class);
     }
 
     /**
@@ -44,7 +239,7 @@ public class ApCheckApiServiceImpl implements ApCheckApiService {
      * @return 对账金额
      */
     @Override
-    public Double getEnterpriseApCheckAccount(Long enUU, Long startTime, Long endTime) {
+    public Double getEnterpriseApCheckAmount(Long enUU, Long startTime, Long endTime) {
         String sql = "select " +
                 "coalesce(sum(case currency " +
                 "when 'RMB' then a.amount " +
@@ -52,9 +247,9 @@ public class ApCheckApiServiceImpl implements ApCheckApiService {
                 " when 'HKD' then a.amount * " + UsoftRate.HKD_RATE +
                 " end), 0.00) amount from (" +
                 "select sum(pa_checkamount) amount,pa_currency currency from purc$apcheck " +
-                "where pa_enuu = " + enUU + " and pa_checkstatus = '已确认' and pa_begindate >= '" + new java.sql.Date(startTime) + "' " +
-                "and pa_enddate <= '" + new java.sql.Date(endTime) + "' " +
-                "group by pa_enuu,pa_currency) a";
+                "where pa_custuu = " + enUU + " and pa_checkstatus = '已确认' and pa_apdate >= '" + new java.sql.Date(startTime) + "' " +
+                "and pa_apdate <= '" + new java.sql.Date(endTime) + "' " +
+                "group by pa_currency) a";
         return commonDao.queryForObject(sql, Double.class);
     }
 }