Procházet zdrojové kódy

erp应收宝接口

Hu Jie před 8 roky
rodič
revize
1b3cee3004

+ 52 - 0
src/main/java/com/uas/platform/b2b/openapi/controller/TradingDataToErpController.java

@@ -0,0 +1,52 @@
+package com.uas.platform.b2b.openapi.controller;
+
+import com.uas.platform.b2b.openapi.service.TradingDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 对应收宝erp接口
+ * @Author: huj
+ * @Date: Created in 15:03 2018/9/20.
+ */
+@RestController
+@RequestMapping("/openapi/api/trade")
+public class TradingDataToErpController {
+
+    @Autowired
+    TradingDataService tradingDataService;
+
+    /**
+     * 根据uu获取卖方累计交易数据
+     * @param enUU 企业uu
+     * @return
+     */
+    @RequestMapping(value = "/sum", method = RequestMethod.GET)
+    public ModelMap getTradingSum(@RequestParam("enUU") Long enUU) {
+        return tradingDataService.getTradingSum(enUU);
+    }
+
+    /**
+     * 根据uu获取卖方对应所有买方客户历史记录
+     * @param enUU 企业uu
+     * @return
+     */
+    @RequestMapping(value = "/sum", method = RequestMethod.GET)
+    public ModelMap getCustTrading(@RequestParam("enUU") Long enUU) {
+        return tradingDataService.getCustTrading(enUU);
+    }
+
+    /**
+     * 根据uu获取卖方仅三年交易记录
+     * @param enUU 企业uu
+     * @return
+     */
+    @RequestMapping(value = "/sum", method = RequestMethod.GET)
+    public ModelMap getRecentOfYear(@RequestParam("enUU") Long enUU) {
+        return tradingDataService.getRecentOfYear(enUU);
+    }
+}

+ 72 - 0
src/main/java/com/uas/platform/b2b/openapi/model/CustTrading.java

@@ -0,0 +1,72 @@
+package com.uas.platform.b2b.openapi.model;
+
+/**
+ * @Author: huj
+ * @Date: Created in 10:29 2018/9/21.
+ */
+public class CustTrading {
+
+    private Long custUU;
+    private String custName;
+    private Double realAccept;
+    private String acceptPercent;
+    private Integer realNum;
+    private String numPercent;
+    private Double timeSum;
+
+    public Long getCustUU() {
+        return custUU;
+    }
+
+    public void setCustUU(Long custUU) {
+        this.custUU = custUU;
+    }
+
+    public Double getRealAccept() {
+        return realAccept;
+    }
+
+    public void setRealAccept(Double realAccept) {
+        this.realAccept = realAccept;
+    }
+
+    public String getCustName() {
+        return custName;
+    }
+
+    public void setCustName(String custName) {
+        this.custName = custName;
+    }
+
+    public String getAcceptPercent() {
+        return acceptPercent;
+    }
+
+    public void setAcceptPercent(String acceptPercent) {
+        this.acceptPercent = acceptPercent;
+    }
+
+    public Integer getRealNum() {
+        return realNum;
+    }
+
+    public void setRealNum(Integer realNum) {
+        this.realNum = realNum;
+    }
+
+    public String getNumPercent() {
+        return numPercent;
+    }
+
+    public void setNumPercent(String numPercent) {
+        this.numPercent = numPercent;
+    }
+
+    public Double getTimeSum() {
+        return timeSum;
+    }
+
+    public void setTimeSum(Double timeSum) {
+        this.timeSum = timeSum;
+    }
+}

+ 68 - 0
src/main/java/com/uas/platform/b2b/openapi/model/RecentOfYear.java

@@ -0,0 +1,68 @@
+package com.uas.platform.b2b.openapi.model;
+
+/**
+ * @Author: huj
+ * @Date: Created in 14:14 2018/9/21.
+ */
+public class RecentOfYear {
+
+    private String name;
+
+    private Double twoYear;
+
+    private Double oneYear;
+
+    private Double thisYear;
+
+    private String oneYearNum;
+
+    private String thisYearNum;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Double getTwoYear() {
+        return twoYear;
+    }
+
+    public void setTwoYear(Double twoYear) {
+        this.twoYear = twoYear;
+    }
+
+    public Double getOneYear() {
+        return oneYear;
+    }
+
+    public void setOneYear(Double oneYear) {
+        this.oneYear = oneYear;
+    }
+
+    public Double getThisYear() {
+        return thisYear;
+    }
+
+    public void setThisYear(Double thisYear) {
+        this.thisYear = thisYear;
+    }
+
+    public String getOneYearNum() {
+        return oneYearNum;
+    }
+
+    public void setOneYearNum(String oneYearNum) {
+        this.oneYearNum = oneYearNum;
+    }
+
+    public String getThisYearNum() {
+        return thisYearNum;
+    }
+
+    public void setThisYearNum(String thisYearNum) {
+        this.thisYearNum = thisYearNum;
+    }
+}

+ 31 - 0
src/main/java/com/uas/platform/b2b/openapi/service/TradingDataService.java

@@ -0,0 +1,31 @@
+package com.uas.platform.b2b.openapi.service;
+
+import org.springframework.ui.ModelMap;
+
+/**
+ * @Author: huj
+ * @Date: Created in 15:44 2018/9/20.
+ */
+public interface TradingDataService {
+
+    /**
+     * 卖方uu
+     * @param enUU 企业uu
+     * @return
+     */
+    ModelMap getTradingSum(Long enUU);
+
+    /**
+     * 卖方uu
+     * @param enUU 企业uu
+     * @return
+     */
+    ModelMap getCustTrading(Long enUU);
+
+    /**
+     * 卖方uu
+     * @param enUU 企业uu
+     * @return
+     */
+    ModelMap getRecentOfYear(Long enUU);
+}

+ 194 - 0
src/main/java/com/uas/platform/b2b/openapi/service/impl/TradingDataServiceImpl.java

@@ -0,0 +1,194 @@
+package com.uas.platform.b2b.openapi.service.impl;
+
+import com.uas.platform.b2b.dao.CommonDao;
+import com.uas.platform.b2b.openapi.model.CustTrading;
+import com.uas.platform.b2b.openapi.service.TradingDataService;
+import com.uas.platform.b2b.openapi.support.NumFormat;
+import com.uas.platform.b2b.openapi.support.ErpRate;
+import com.uas.platform.b2b.openapi.support.TimeStauts;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
+
+import java.sql.Date;
+import java.util.List;
+
+/**
+ * @Author: huj
+ * @Date: Created in 15:45 2018/9/20.
+ */
+@Service
+public class TradingDataServiceImpl implements TradingDataService{
+
+
+    @Autowired
+    private CommonDao commonDao;
+
+    @Override
+    public ModelMap getTradingSum(Long enUU) {
+        ModelMap map = new ModelMap();
+        // 获取累计交易时间
+        Double timeSum = getTimeSum(enUU, null);
+        // 获取累计验收金额
+        Double acceptSum = getAcceptSum(enUU, null);
+        // 获取累计验退金额
+        Double returnSum = getReturnSum(enUU, null);
+        // 获取累计实收金额
+        Double realSum = NumFormat.getTwo(acceptSum - returnSum);
+        // 获取累计对账金额
+        Double apCheckSum = getApCheckSum(enUU);
+        // 获取累计发票金额
+        Double apBillSum = getApBillSum(enUU);
+        // 获取历史退货率
+        String historyReturn = NumFormat.getPercent(realSum/getOrderSum(enUU));
+        map.put("timeSum", timeSum);
+        map.put("acceptSum", acceptSum);
+        map.put("returnSum", returnSum);
+        map.put("realSum", realSum);
+        map.put("apCheckSum", apCheckSum);
+        map.put("apBillSum", apBillSum);
+        map.put("historyReturn", historyReturn);
+        return map;
+    }
+
+    @Override
+    public ModelMap getCustTrading(Long enUU) {
+        ModelMap map = new ModelMap();
+        List<CustTrading> datas = getCust(enUU);
+        if (CollectionUtils.isNotEmpty(datas)) {
+            for (CustTrading custTrading : datas) {
+                Double acceptSum = getAcceptSum(enUU, custTrading.getCustUU());
+                Double returnSum = getReturnSum(enUU, custTrading.getCustUU());
+                custTrading.setRealAccept(NumFormat.getTwo(acceptSum - returnSum));
+                custTrading.setAcceptPercent(NumFormat.getPercent((acceptSum - returnSum) / acceptSum));
+                Integer acceptNum = getAcceptNum(enUU, custTrading.getCustUU());
+                Integer realNum = acceptNum - getReturnNum(enUU, custTrading.getCustUU());
+                custTrading.setRealNum(realNum);
+                if (0 != acceptNum) {
+                    custTrading.setNumPercent(NumFormat.getPercent((double) realNum / acceptNum));
+                }
+                custTrading.setTimeSum(NumFormat.getOne(getTimeSum(enUU, custTrading.getCustUU())));
+            }
+        }
+        map.put("date", datas);
+        return map;
+    }
+
+    @Override
+    public ModelMap getRecentOfYear(Long enUU) {
+        ModelMap map = new ModelMap();
+        // 有交易额客户数量
+
+        // 验收金额
+
+        // 验收笔数
+
+        // 验退金额
+
+        // 验退笔数
+
+        // 实收金额
+
+        // 实收笔数
+
+        // 对账金额
+
+        // 对账笔数
+
+        // 开票金额
+
+        // 开票笔数
+        return map;
+    }
+
+
+    private Double getTimeSum(Long enUU, Long custUU){
+        StringBuffer last = new StringBuffer("SELECT pu_date from purc$orders " +
+                "WHERE pu_venduu = " + enUU + " pu_date is not null ");
+        if (!StringUtils.isEmpty(custUU)) {
+            last.append("and pu_enuu = " + custUU + "");
+        }
+        StringBuffer first = last.append(" ORDER BY pu_date asc limit 1");
+        last.append(" ORDER BY pu_date desc limit 1");
+        Date lastTime = commonDao.queryForObject(last.toString(), Date.class);
+        Date firstTime = commonDao.queryForObject(first.toString(), Date.class);
+        StringBuffer result = new StringBuffer("SELECT TIMESTAMPDIFF(MONTH," + firstTime + "," + lastTime +")");
+        Double resultTime = commonDao.queryForObject(result.toString(), Double.class) / TimeStauts.TYEAR.value();
+        return NumFormat.getOne(resultTime);
+    }
+
+    private Double getAcceptSum(Long enUU, Long custUU) {
+        StringBuffer sql = new StringBuffer("SELECT sum(case currency when 'RMB' then a.amount when 'USD' " +
+                "then a.amount * " + ErpRate.USD_RATE+ " when 'HKD' then a.amount * " + ErpRate.HKD_RATE + " end) result " +
+                "FROM (SELECT SUM(pai_qty*pai_orderprice) amount,pa_currency currency FROM purc$accept LEFT JOIN purc$acceptitem " +
+                "on pai_paid=pa_id WHERE pa_venduu= " + enUU);
+        if (!StringUtils.isEmpty(custUU)) {
+            sql.append(" and pu_enuu = " + custUU + " ");
+        }
+        sql.append(" GROUP BY pa_currency) a");
+        Double result = commonDao.queryForObject(sql.toString(), Double.class);
+        return NumFormat.getTwo(result);
+    }
+
+    private Double getReturnSum(Long enUU, Long custUU) {
+        StringBuffer sql = new StringBuffer("SELECT sum(case currency when 'RMB' then a.amount when 'USD' " +
+                "then a.amount * " + ErpRate.USD_RATE+ " when 'HKD' then a.amount * " + ErpRate.HKD_RATE + " end) result " +
+                "FROM (SELECT SUM(pri_qty*pri_orderprice) amount,pr_currency currency FROM purc$return LEFT JOIN purc$returnitem " +
+                "on pri_prid=pr_id WHERE pr_venduu= " + enUU);
+        if (!StringUtils.isEmpty(custUU)) {
+            sql.append(" and pr_enuu = " + custUU + " ");
+        }
+        sql.append(" GROUP BY pr_currency) a");
+        Double result = commonDao.queryForObject(sql.toString(), Double.class);
+        return NumFormat.getTwo(result);
+    }
+
+    private Double getApCheckSum(Long enUU) {
+        StringBuffer sql = new StringBuffer("SELECT sum(case currency when 'RMB' then a.amount when 'USD' " +
+                "then a.amount * " + ErpRate.USD_RATE+ " when 'HKD' then a.amount * " + ErpRate.HKD_RATE + " end) result " +
+                "FROM (select sum(pa_checkamount) amount,pa_currency currency from purc$apcheck where pa_enuu = " + enUU +
+                " and pa_checkstatus = '已确认' GROUP BY pa_currency) a");
+        Double result = commonDao.queryForObject(sql.toString(), Double.class);
+        return NumFormat.getTwo(result);
+    }
+
+    private Double getApBillSum(Long enUU) {
+        StringBuffer sql = new StringBuffer("SELECT sum(case currency when 'RMB' then a.amount when 'USD' " +
+                "then a.amount * " + ErpRate.USD_RATE+ " when 'HKD' then a.amount * " + ErpRate.HKD_RATE + " end) result " +
+                "FROM (SELECT SUM(pab_paymount) amount,pab_currency currency FROM purc$apbill WHERE pad_venduu=" + enUU  +
+                " GROUP BY pab_currency) a");
+        Double result = commonDao.queryForObject(sql.toString(), Double.class);
+        return NumFormat.getTwo(result);
+    }
+
+    private Double getOrderSum(Long enUU) {
+        StringBuffer sql = new StringBuffer("SELECT sum(case currency when 'RMB' then a.amount when 'USD' " +
+                "then a.amount * " + ErpRate.USD_RATE+ " when 'HKD' then a.amount * " + ErpRate.HKD_RATE + " end) result " +
+                "FROM (SELECT sum(pd_price) amount,pu_currency currency FROM purc$orders LEFT JOIN purc$orderitems " +
+                "on pu_id=pd_puid where pu_venduu = " + enUU + " GROUP BY pu_currency) a");
+        Double result = commonDao.queryForObject(sql.toString(), Double.class);
+        return NumFormat.getTwo(result);
+    }
+
+    private List<CustTrading> getCust(Long enUU) {
+        StringBuffer sql = new StringBuffer("SELECT en_uu custUU,en_name custName FROM sec$enterprises WHERE en_uu in " +
+                "(SELECT ve_myenuu FROM purc$vendors WHERE ve_vendenuu= " + enUU + " ) ORDER BY en_name");
+        return commonDao.queryForList(sql.toString(), CustTrading.class);
+    }
+
+    private Integer getAcceptNum(Long enUU, Long custUU) {
+        StringBuffer sql = new StringBuffer("SELECT COUNT(1) FROM purc$accept WHERE pa_venduu= " + enUU +
+                " AND pa_enuu=" + custUU + "");
+        Integer result = commonDao.queryForObject(sql.toString(), Integer.class);
+        return result;
+    }
+
+    private Integer getReturnNum(Long enUU, Long custUU) {
+        StringBuffer sql = new StringBuffer("SELECT COUNT(1) FROM purc$return  WHERE pr_venduu= " + enUU +
+                " and  pr_enuu= " + custUU + "");
+        Integer result = commonDao.queryForObject(sql.toString(), Integer.class);
+        return result;
+    }
+}

+ 19 - 0
src/main/java/com/uas/platform/b2b/openapi/support/ErpRate.java

@@ -0,0 +1,19 @@
+package com.uas.platform.b2b.openapi.support;
+
+/**
+ * 应收宝汇率
+ * @Author: huj
+ * @Date: Created in 17:59 2018/9/20.
+ */
+public class ErpRate {
+
+    /**
+     * 美元汇率
+     */
+    public static final Double USD_RATE = 6.85;
+
+    /**
+     * 港币汇率
+     */
+    public static final Double HKD_RATE = 0.87;
+}

+ 45 - 0
src/main/java/com/uas/platform/b2b/openapi/support/NumFormat.java

@@ -0,0 +1,45 @@
+package com.uas.platform.b2b.openapi.support;
+
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * @Author: huj
+ * @Date: Created in 16:55 2018/9/20.
+ */
+public class NumFormat {
+
+    public static Double getOne(Double result) {
+        DecimalFormat df = new DecimalFormat("#.0");
+        return Double.parseDouble(df.format(result));
+    }
+
+    public static Double getTwo(Double result) {
+        DecimalFormat df = new DecimalFormat("#.00");
+        return Double.parseDouble(df.format(result));
+    }
+
+    public static String getPercent(Double result) {
+        NumberFormat nt = NumberFormat.getPercentInstance();
+        //设置百分数精确度2即保留两位小数
+        nt.setMinimumFractionDigits(2);
+        return nt.format(result);
+    }
+
+//    public static Date getTwoYear() {
+//        Calendar ca = Calendar.getInstance();
+//        ca.setTime(new Date());
+//        ca.add(Calendar.YEAR, -1);
+//        Date lastMonth = ca.getTime();
+//    }
+
+    public static void main(String[] args) {
+        Calendar ca = Calendar.getInstance();
+        ca.setTime(new Date());
+        ca.add(Calendar.YEAR, -1);
+        Date lastMonth = ca.getTime();
+        System.out.println(lastMonth);
+    }
+}

+ 21 - 0
src/main/java/com/uas/platform/b2b/openapi/support/TimeStauts.java

@@ -0,0 +1,21 @@
+package com.uas.platform.b2b.openapi.support;
+
+/**
+ * @Author: huj
+ * @Date: Created in 16:41 2018/9/20.
+ */
+public enum TimeStauts{
+
+    TYEAR(12),
+    TMONTH(12);
+
+    private final int value;
+
+    private TimeStauts(int value) {
+        this.value = value;
+    }
+
+    public int value() {
+        return this.value;
+    }
+}