Explorar el Código

Merge branch 'master' of http://git.dayaedu.com/yonge/collect_fee

# Conflicts:
#	src/main/java/com/ym/mec/collectfee/service/SchoolService.java
#	src/main/java/com/ym/mec/collectfee/utils/Constants.java
zouxuan hace 6 años
padre
commit
434db46169

+ 36 - 118
src/main/java/com/ym/mec/collectfee/controller/YqPayController.java

@@ -2,14 +2,14 @@ package com.ym.mec.collectfee.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.collectfee.common.sms.SmsExample;
 import com.ym.mec.collectfee.common.web.BaseController;
 import com.ym.mec.collectfee.entity.*;
 import com.ym.mec.collectfee.service.*;
+import com.ym.mec.collectfee.utils.Constants;
 import com.ym.mec.collectfee.utils.GenerateNum;
-import com.ym.mec.collectfee.utils.yqpay.Intfc;
-import com.ym.mec.collectfee.utils.yqpay.Msg;
-import com.ym.mec.collectfee.utils.yqpay.NotifyMsg;
-import com.ym.mec.collectfee.utils.yqpay.YqPayUtil;
+import com.ym.mec.collectfee.utils.ShortUrlUtil;
+import com.ym.mec.collectfee.utils.yqpay.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import sun.plugin2.util.NativeLibLoader;
 
 import java.io.InputStreamReader;
 import java.math.BigDecimal;
@@ -66,6 +67,10 @@ public class YqPayController extends BaseController {
     @Transactional
     public Object toPay(@ModelAttribute @Validated Order order) throws Exception {
         BigDecimal amount = new BigDecimal("0");
+        School school = schoolService.get(order.getClassId());
+        //计划招生人数有更新,更新
+        orderService.getSchoolDetail(school.getSchoolId(), order.getClassId());
+
         //1、判断已报名人数
         CourseGroupInfo courseGroupInfo = CourseGroupInfoService.get(order.getCourseId());
         if (courseGroupInfo.getRegNum().compareTo(courseGroupInfo.getPlanNum()) >= 0) {
@@ -111,6 +116,8 @@ public class YqPayController extends BaseController {
         }
         amount = amount.add(adjunctPrice);
 
+        ApplyInfo applyInfo = applyInfoService.get(order.getUserId());
+
         order.setGroupId(courseGroupInfo.getId());
         order.setAmount(amount);
         order.setRemark(instrumentName);
@@ -118,6 +125,8 @@ public class YqPayController extends BaseController {
         order.setGoodsFee(instrumentPrice);
         order.setSdName(adjunctName + "教材|琴谱");
         order.setSdFee(adjunctPrice);
+        order.setType(1);
+        order.setUserName(applyInfo.getName());
 
 
         String orderNo = GenerateNum.getInstance().GenerateOrderNo(); //自己系统订单号
@@ -125,39 +134,13 @@ public class YqPayController extends BaseController {
         order.setCreateTime(new Date()); //订单提交时间
         order.setStatus(1); //订单状态
 
-        School school = schoolService.get(order.getClassId());
-        String notifyUrl = "http://47.99.212.176:9000/yqpay/notify"; //异步通知地址
-        String returnUrl = "http://pay.dayaedu.com/#/login?schoolId=" + school.getSchoolId() + "&classId=" + order.getClassId() + "&cityId=" + school.getCityId();//支付后返回页面
-        String payUrl = "https://qyfapi.95epay.com/api/api/hPay/toPayHtml";//支付跳转页
-        String payChannels = "{\"weChatPay\":true,\"weChatPayMobile\":false,\"aliPay\":true,\"fastpayXy\":true,\"aliPayMobile\":false,\"balancePay\":false}";//支付方式配置
-
-        //获取支付成功跟支付中的订单数
+        //获取分佣账户
         Integer branchId = 1001;//order.getBranchId();
-        int payOrderNums = orderService.getPayOrderNums();
-        //分佣账户(1、每10笔,前四笔收入私户 2、私户每个商户最多收款400万)
-        if ((payOrderNums + 1) % 10 <= 4) { //私人账户
-            branchId = 0;
-        }
+        Account routingAccount = accountService.getRoutingAccount(branchId);
 
-        //获取分佣账户
-        Account account = accountService.getAccountByBranchId(branchId);
-        if (account == null) {
-            return failed("机构没有设置收款账户");
-        }
-        String routingMerNo = account.getSellerNo();
-        BigDecimal HasRouting = account.getHasRouting().add(order.getAmount());
-        account.setHasRouting(HasRouting);
-
-        List<Map> tempRoutingList = new ArrayList();
-        if (branchId.equals(0)) {
-            Map<String, Object> routingList = new HashMap<>();
-            routingList.put("routingMerNo", routingMerNo);//分佣账户
-            routingList.put("routingFee", amount); //分佣金额
-            tempRoutingList.add(routingList);
-        }
+        order.setAccount(routingAccount.getSellerNo());
+        order.setUAccount(routingAccount.getId().toString());
 
-        order.setUAccount(account.getId().toString());
-        order.setAccount(routingMerNo);
 
         //1、插入订单
         orderService.insert(order);
@@ -165,32 +148,13 @@ public class YqPayController extends BaseController {
         courseGroupInfo.setRegNum(courseGroupInfo.getRegNum() + 1);
         CourseGroupInfoService.upByIdAndVersion(courseGroupInfo);
         //3、修改分佣账户已收金额
-        accountService.upByIdAndVersion(account);
-
-
-        /*订单信息*/
-        String orderBody = "大雅乐盟培训课程";
-        /*订单标题*/
-        String orderSubject = "培训订单";
-
+        BigDecimal HasRouting = routingAccount.getHasRouting().add(order.getAmount());
+        routingAccount.setHasRouting(HasRouting);
+        accountService.upByIdAndVersion(routingAccount);
 
-        order.setAmount(new BigDecimal("2")); //测试设置金额
+        order.setAmount(new BigDecimal("2")); //测试账户设置金额
 
-        Map<String, Object> resultMap = new LinkedHashMap<String, Object>();
-        resultMap.put("sellerNo", "0021677"); //收款商户号
-        resultMap.put("payChannels", payChannels); //支付方式
-        resultMap.put("orderBody", orderBody); //订单信息
-        resultMap.put("payAmount", order.getAmount()); //支付金额
-        resultMap.put("apiPayType", "1"); //*API支付类型1-即时支付,2-担保支付,3-预授权支付*/
-        resultMap.put("tradeType", "0"); //*交易类型1—充值,0—收款*
-        resultMap.put("merMerOrderNo", orderNo); //商户订单号
-        resultMap.put("orderSubject", orderSubject); //订单标题
-        resultMap.put("returnUrl", returnUrl); //前台页面地址
-        if (branchId.equals(0)) {
-            resultMap.put("tempRoutingList", JSON.toJSONString(tempRoutingList));//分账设置
-        }
-        Map rqMap = new YqPayUtil(notifyUrl, resultMap).getRequestMap();
-        rqMap.put("host", payUrl);
+        Map rqMap = orderService.getPayMap(routingAccount, order, school); //获取支付map
 
         return succeed(rqMap);
     }
@@ -224,8 +188,8 @@ public class YqPayController extends BaseController {
 
         //classType 小课1 大课2
         Integer buyCount = mecCourse4json.getBuyCount();
-        if (buyCount <= 0) {
-            return failed("购买次数不能小于1");
+        if (buyCount <= 0 || buyCount > 20) {
+            return failed("购买课程次数不能小于1,大于20");
         }
         BigDecimal amount = new BigDecimal("0"); //课程总价
         String remark = "";
@@ -244,68 +208,18 @@ public class YqPayController extends BaseController {
         }
         if (pickCourses.size() == 0) {
             return failed("请选择续费课程");
-        }
-
-        School school = schoolService.get(pickCourses.get(0).getClassId());
-        if (school == null) {
-            return failed("报名学校不存在");
-        }
-        String notifyUrl = "http://47.99.212.176:9000/yqpay/notify"; //异步通知地址
-        String returnUrl = "http://pay.dayaedu.com/#/login?schoolId=" + school.getSchoolId() + "&classId=" + pickCourses.get(0).getClassId() + "&cityId=" + school.getCityId();//支付后返回页面
-        String payUrl = "https://qyfapi.95epay.com/api/api/hPay/toPayHtml";//支付跳转页
-        String payChannels = "{\"weChatPay\":true,\"weChatPayMobile\":false,\"aliPay\":true,\"fastpayXy\":true,\"aliPayMobile\":false,\"balancePay\":false}";//支付方式配置
+        };
 
         String orderNo = GenerateNum.getInstance().GenerateOrderNo(); //自己系统订单号
+        //获取分佣账户
+        Integer branchId = 1001;//order.getBranchId();
+        Account routingAccount = accountService.getRoutingAccount(branchId);
 
-        //获取支付成功跟支付中的订单数
-        Integer branchId = 1001;//renewals.getBranchId();
-        int payOrderNums = orderService.getPayOrderNums();
-        //分佣账户(1、每10笔,前四笔收入私户 2、私户每个商户最多收款400万)
-        if ((payOrderNums + 1) % 10 <= 4) { //私人账户
-            branchId = 0;
-        }
+        Order order = renewalsService.addRenewalsOrder(renewals, amount, orderNo, pickCourses, routingAccount, remark);
 
-        //获取分佣账户
-        Account account = accountService.getAccountByBranchId(branchId);
-        if (account == null) {
-            return failed("机构没有设置收款账户");
-        }
-        String routingMerNo = account.getSellerNo();
-        BigDecimal HasRouting = account.getHasRouting().add(amount);
-        account.setHasRouting(HasRouting);
-
-        List<Map> tempRoutingList = new ArrayList();
-        if (branchId.equals(0)) {
-            Map<String, Object> routingList = new HashMap<>();
-            routingList.put("routingMerNo", routingMerNo);//分佣账户
-            routingList.put("routingFee", amount); //分佣金额
-            tempRoutingList.add(routingList);
-        }
+        order.setAmount(new BigDecimal("2")); //测试账户设置金额
 
-        renewalsService.addRenewalsOrder(renewals, amount, orderNo, pickCourses, routingMerNo, account.getId(), remark);
-
-        /*订单信息*/
-        String orderBody = "大雅乐盟培训课程";
-        /*订单标题*/
-        String orderSubject = "培训订单";
-
-        //测试用
-        amount = new BigDecimal("2");
-        Map<String, Object> resultMap = new LinkedHashMap<String, Object>();
-        resultMap.put("sellerNo", "0021677"); //收款商户号
-        resultMap.put("payChannels", payChannels); //支付方式
-        resultMap.put("orderBody", orderBody); //订单信息
-        resultMap.put("payAmount", amount); //支付金额
-        resultMap.put("apiPayType", "1"); //*API支付类型1-即时支付,2-担保支付,3-预授权支付*/
-        resultMap.put("tradeType", "0"); //*交易类型1—充值,0—收款*
-        resultMap.put("merMerOrderNo", orderNo); //商户订单号
-        resultMap.put("orderSubject", orderSubject); //订单标题
-        resultMap.put("returnUrl", returnUrl); //前台页面地址
-        if (branchId.equals(0)) {
-            resultMap.put("tempRoutingList", JSON.toJSONString(tempRoutingList));//分账设置
-        }
-        Map rqMap = new YqPayUtil(notifyUrl, resultMap).getRequestMap();
-        rqMap.put("host", payUrl);
+        Map rqMap = orderService.getPayMap(routingAccount, order, null); //获取支付map
         return succeed(rqMap);
     }
 
@@ -514,6 +428,9 @@ public class YqPayController extends BaseController {
     public void updateOrder(Map<String, String> rpMap) {
         int status = rpMap.get("tradeState").equals("1") ? 2 : 0;
         Order order = orderService.getOrderByOrderNo(rpMap.get("merOrderNo"));
+        if (order == null) {
+            return;
+        }
         order.setStatus(status);
         order.setBank(rpMap.get("channelType"));
 
@@ -524,11 +441,12 @@ public class YqPayController extends BaseController {
             order.setPay(order.getAmount());
             order.setPayTime(new Date());
             //推送mec
+            ApplyInfo applyInfo = applyInfoService.get(order.getUserId());
             if (order.getTuiFee() != null) { //乐团报名
-                ApplyInfo applyInfo = applyInfoService.get(order.getUserId());
                 applyInfo.setStatus(1);
                 applyInfoService.update(applyInfo);
                 applyInfoService.userRegister(applyInfo.getPatriarchPhone(), order.getId()); //推送mec
+                schoolService.sendPayMsg(applyInfo.getPatriarchPhone(), order.getAmount().toString());
             } else {
                 Renewals renewals = renewalsService.getRenewalsByOrderId(order.getId());
                 RenewBean renewBean = new RenewBean();

+ 20 - 0
src/main/java/com/ym/mec/collectfee/entity/Order.java

@@ -36,10 +36,14 @@ public class Order {
 //	@ApiModelProperty(name = "userId", value = "学员编号",required = true)
 	private Integer userId;
 
+	private String userName;
+
 	/** 订单总金额(分) */
 //	@ApiModelProperty(name = "amount", value = "订单总金额",required = true)
 	private BigDecimal amount;
 
+	private Integer type;
+
 	/** 支付成功金额(分)。本次在线支付(充值)的金额,该金额通常应该等于订单总金额;如果该金额少于订单总金额,则自动使用学员账户余额补足订单总金额;该金额不能大于订单总金额 */
 //	@ApiModelProperty(name = "pay", value = "支付成功金额",hidden = true)
 	private BigDecimal pay;
@@ -366,4 +370,20 @@ public class Order {
 	public void setGroupId(Integer groupId) {
 		this.groupId = groupId;
 	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
 }

+ 11 - 1
src/main/java/com/ym/mec/collectfee/service/AccountService.java

@@ -8,16 +8,26 @@ public interface AccountService extends BaseService<Integer, Account> {
 
     /**
      * 根据分部id获取收款账户信息
+     *
      * @param branchId 分部id
      * @return
      */
     Account getAccountByBranchId(Integer branchId);
 
     /**
-     *  根据id和version更新已收款
+     * 根据id和version更新已收款
+     *
      * @param account
      * @return
      */
     int upByIdAndVersion(Account account);
 
+    /**
+     * 获取分佣账户
+     *
+     * @param accountId 默认收款账户
+     * @return
+     */
+    Account getRoutingAccount(int accountId);
+
 }

+ 18 - 4
src/main/java/com/ym/mec/collectfee/service/OrderService.java

@@ -1,15 +1,21 @@
 package com.ym.mec.collectfee.service;
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.collectfee.common.service.BaseService;
+import com.ym.mec.collectfee.entity.Account;
 import com.ym.mec.collectfee.entity.Order;
+import com.ym.mec.collectfee.entity.School;
+import com.ym.mec.collectfee.utils.yqpay.YqPayUtil;
 
 import javax.xml.bind.JAXBException;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
 
 public interface OrderService extends BaseService<Integer, Order> {
 
     /**
      * 根据学生编号,获取订单列表
+     *
      * @param userId
      * @return
      */
@@ -17,6 +23,7 @@ public interface OrderService extends BaseService<Integer, Order> {
 
     /**
      * 支付成功后推送订单列表
+     *
      * @param batchNum 批次号
      * @return
      */
@@ -24,14 +31,16 @@ public interface OrderService extends BaseService<Integer, Order> {
 
     /**
      * 查询某声部报名成功人数
-     * @param poName 乐团名称
+     *
+     * @param poName    乐团名称
      * @param voicePort 声部名称
      * @return
      */
-    int countOrder(String poName,String voicePort);
+    int countOrder(String poName, String voicePort);
 
     /**
      * 根据系统订单号获取订单
+     *
      * @param orderNo 系统订单号
      * @return
      */
@@ -40,21 +49,26 @@ public interface OrderService extends BaseService<Integer, Order> {
 
     /**
      * 根据乐团编号获取乐团信息
+     *
      * @param schoolId
      * @return
      */
-    Object getSchoolDetail(Integer schoolId,Integer clazzId);
+    Object getSchoolDetail(Integer schoolId, Integer clazzId);
 
 
     /**
      * 获取支付中和成功的订单数
+     *
      * @return
      */
     int getPayOrderNums();
 
     /**
      * 获取支付中的订单
+     *
      * @return
      */
     List<Order> findPayingOrders();
+
+    Map getPayMap(Account account, Order order, School school) throws Exception;
 }

+ 4 - 1
src/main/java/com/ym/mec/collectfee/service/RenewalsService.java

@@ -5,6 +5,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import com.ym.mec.collectfee.common.service.BaseService;
+import com.ym.mec.collectfee.entity.Account;
 import com.ym.mec.collectfee.entity.MecCourse;
 import com.ym.mec.collectfee.entity.Order;
 import com.ym.mec.collectfee.entity.Renewals;
@@ -13,16 +14,18 @@ public interface RenewalsService extends BaseService<Integer, Renewals> {
 
     /**
      * 生成续费的订单
+     *
      * @param orderNo
      * @param mecCourses
      * @return
      */
-    Order addRenewalsOrder(Renewals renewals, BigDecimal amount, String orderNo, List<MecCourse> mecCourses, String routingMerNo, int accountId,String remark);
+    Order addRenewalsOrder(Renewals renewals, BigDecimal amount, String orderNo, List<MecCourse> mecCourses, Account routingAccount, String remark);
 
     void renewalsInsert(ArrayList<Renewals> renewalsArrayList);
 
     /**
      * 根据订单号获取小课续费信息
+     *
      * @param orderId
      * @return
      */

+ 6 - 0
src/main/java/com/ym/mec/collectfee/service/SchoolService.java

@@ -13,4 +13,10 @@ public interface SchoolService extends BaseService<Integer, School> {
      * @param classId
      */
     void openClassPay(Integer classId,String smsMsg);
+
+    /**
+     * 缴费成功发送短信
+     * @param mobile
+     */
+    void sendPayMsg(String mobile,String amount);
 }

+ 26 - 0
src/main/java/com/ym/mec/collectfee/service/impl/AccountServiceImpl.java

@@ -2,18 +2,28 @@ package com.ym.mec.collectfee.service.impl;
 
 import com.ym.mec.collectfee.common.dao.BaseDAO;
 import com.ym.mec.collectfee.common.service.impl.BaseServiceImpl;
+import com.ym.mec.collectfee.service.OrderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.ym.mec.collectfee.entity.Account;
 import com.ym.mec.collectfee.service.AccountService;
 import com.ym.mec.collectfee.dao.AccountDao;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Service
 public class AccountServiceImpl extends BaseServiceImpl<Integer, Account> implements AccountService {
 
     @Autowired
     AccountDao accountDao;
 
+    @Autowired
+    OrderService orderService;
+
     @Override
     public BaseDAO<Integer, Account> getDAO() {
         return accountDao;
@@ -29,5 +39,21 @@ public class AccountServiceImpl extends BaseServiceImpl<Integer, Account> implem
         return accountDao.upByIdAndVersion(account);
     }
 
+    /**
+     * 获取分佣账户
+     *
+     * @param branchId 默认收款账户
+     * @return
+     */
+    @Override
+    public Account getRoutingAccount(int branchId) {
+        int payOrderNums = orderService.getPayOrderNums(); //获取支付中和成功的订单数
+        //分佣账户(1、每10笔,前四笔收入私户 2、私户每个商户最多收款400万)
+        if ((payOrderNums + 1) % 10 <= 4) { //私人账户
+            branchId = 0;
+        }
+        return this.getAccountByBranchId(branchId);
+    }
+
 
 }

+ 46 - 42
src/main/java/com/ym/mec/collectfee/service/impl/CourseGroupInfoServiceImpl.java

@@ -15,48 +15,52 @@ import java.util.List;
 
 @Service
 public class CourseGroupInfoServiceImpl extends BaseServiceImpl<Integer, CourseGroupInfo> implements CourseGroupInfoService {
-	
-	@Autowired
-	private CourseGroupInfoDao courseGroupInfoDao;
-
-	@Override
-	public BaseDAO<Integer, CourseGroupInfo> getDAO() {
-		return courseGroupInfoDao;
-	}
-
-
-	@Override
-	public void upSetCourseGroup(ResponseCourseEntity xmlToObject){
-		List<Course> courses = xmlToObject.getCourses();
-		CourseGroupInfo courseGroupInfo;
-		Date date = new Date();
-		for (Course course:courses) {
-			if(course != null && courseGroupInfoDao.get(course.getCourseId()) == null){
-				courseGroupInfo = new CourseGroupInfo();
-				courseGroupInfo.setCreateTime(date);
-				courseGroupInfo.setUpdateTime(date);
-				courseGroupInfo.setFeeAmount(course.getPrice());
-				courseGroupInfo.setFeeType(course.getChargeType());
-				courseGroupInfo.setName(course.getCourseName());
+
+    @Autowired
+    private CourseGroupInfoDao courseGroupInfoDao;
+
+    @Override
+    public BaseDAO<Integer, CourseGroupInfo> getDAO() {
+        return courseGroupInfoDao;
+    }
+
+    @Override
+    public void upSetCourseGroup(ResponseCourseEntity xmlToObject) {
+        List<Course> courses = xmlToObject.getCourses();
+        CourseGroupInfo mecCourseGroupInfo;
+        Date date = new Date();
+        for (Course course : courses) {
+			CourseGroupInfo courseGroupInfo = courseGroupInfoDao.get(course.getCourseId());
+			if (course != null && courseGroupInfo == null) {
+                mecCourseGroupInfo = new CourseGroupInfo();
+                mecCourseGroupInfo.setCreateTime(date);
+                mecCourseGroupInfo.setUpdateTime(date);
+                mecCourseGroupInfo.setFeeAmount(course.getPrice());
+                mecCourseGroupInfo.setFeeType(course.getChargeType());
+                mecCourseGroupInfo.setName(course.getCourseName());
+                mecCourseGroupInfo.setPlanNum(course.getEnrollCount());
+                mecCourseGroupInfo.setId(course.getCourseId());
+                mecCourseGroupInfo.setRegNum(course.getStuCount());
+                mecCourseGroupInfo.setSubId(course.getSubId());
+                mecCourseGroupInfo.setSubName(course.getSubNames());
+                mecCourseGroupInfo.setClassId(course.getClassId());
+                courseGroupInfoDao.insert(mecCourseGroupInfo);
+            }
+            if (course != null && courseGroupInfo != null && courseGroupInfo.getPlanNum() != course.getEnrollCount()) {
 				courseGroupInfo.setPlanNum(course.getEnrollCount());
-				courseGroupInfo.setId(course.getCourseId());
-				courseGroupInfo.setRegNum(course.getStuCount());
-				courseGroupInfo.setSubId(course.getSubId());
-				courseGroupInfo.setSubName(course.getSubNames());
-				courseGroupInfo.setClassId(course.getClassId());
-				courseGroupInfoDao.insert(courseGroupInfo);
-			}
-		}
-	}
-
-	@Override
-	public List<CourseGroupInfo> getCourses(Integer classId) {
-		return courseGroupInfoDao.getCourses(classId);
-	}
-
-	@Override
-	public int upByIdAndVersion(CourseGroupInfo courseGroupInfo) {
-		return courseGroupInfoDao.upByIdAndVersion(courseGroupInfo);
-	}
+                courseGroupInfoDao.upByIdAndVersion(courseGroupInfo);
+            }
+        }
+    }
+
+    @Override
+    public List<CourseGroupInfo> getCourses(Integer classId) {
+        return courseGroupInfoDao.getCourses(classId);
+    }
+
+    @Override
+    public int upByIdAndVersion(CourseGroupInfo courseGroupInfo) {
+        return courseGroupInfoDao.upByIdAndVersion(courseGroupInfo);
+    }
 
 }

+ 158 - 107
src/main/java/com/ym/mec/collectfee/service/impl/OrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.collectfee.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.thoughtworks.xstream.XStream;
 import com.ym.mec.collectfee.common.dao.BaseDAO;
 import com.ym.mec.collectfee.common.service.impl.BaseServiceImpl;
@@ -8,125 +9,175 @@ import com.ym.mec.collectfee.entity.*;
 import com.ym.mec.collectfee.service.CourseGroupInfoService;
 import com.ym.mec.collectfee.service.OrderService;
 import com.ym.mec.collectfee.service.SchoolService;
+import com.ym.mec.collectfee.service.YqPayService;
 import com.ym.mec.collectfee.utils.HttpUtil;
 import com.ym.mec.collectfee.utils.XStreamUtil;
+import com.ym.mec.collectfee.utils.yqpay.YqPayUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.io.StringWriter;
 import java.io.Writer;
-import java.util.Base64;
-import java.util.Date;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
 
 @Service
 public class OrderServiceImpl extends BaseServiceImpl<Integer, Order> implements OrderService {
 
-	@Autowired
-	private OrderDao orderDao;
-	@Autowired
-	private SchoolService schoolService;
-	@Autowired
-	private CourseGroupInfoService courseGroupInfoService;
-
-	//公共密钥
-	@Value("${common.properties.mec-publicKey}")
-	private String publicKey;
-
-	@Value("${common.properties.mec-url}")
-	private String url;
-
-	@Override
-	public BaseDAO<Integer, Order> getDAO() {
-		return orderDao;
-	}
-
-	@Override
-	public List<Order> getOrderByUserId(Integer userId) {
-		return orderDao.getOrderByUserId(userId);
-	}
-
-	@Override
-	public String pushOrder(String batchNum){
-		try {
-			RequestParamBean requestParamBean = new RequestParamBean();
-			List<Order> orderList = orderDao.getOrderByBatch(batchNum);
-			if(orderList == null || orderList.size() < 1){
-				return null;
-			}
-			XStream xs = new XStream();
-			xs.autodetectAnnotations(true);
-			Writer writer = new StringWriter();
-			Orders orders = new Orders(orderList);
-			xs.toXML(orders,writer);
-			String body = writer.toString();
-			body = body.substring(body.indexOf("<body>")+6,body.indexOf("</body>"));
-
-			body = Base64.getEncoder().encodeToString(body.getBytes());
-			requestParamBean.setBody(body);
-			requestParamBean.setHead(XStreamUtil.getOrdersHead(body,121512,publicKey,null,null));
-
-			xs.autodetectAnnotations(true);
-			writer = new StringWriter();
-			writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
-			xs.toXML(requestParamBean,writer);
-			return writer.toString();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-
-	@Override
-	public int countOrder(String poName, String voicePort) {
-		return orderDao.countOrder(poName,voicePort);
-	}
-
-
-	@Override
-	public Order getOrderByOrderNo(String orderNo) {
-		return orderDao.getOrderByOrderNo(orderNo);
-	}
-
-	@Override
-	public Object getSchoolDetail(Integer schoolId,Integer clazzId) {
-		try {
-			RequestParamBean requestParamBean = new RequestParamBean();
-			String body = "<classId>" + clazzId + "</classId><schoolId>" + schoolId + "</schoolId>";
-			body = Base64.getEncoder().encodeToString(body.getBytes());
-			requestParamBean.setBody(body);
-			requestParamBean.setHead(XStreamUtil.getOrdersHead(body,124005,publicKey,null,null));
-			XStream xs = new XStream();
-			xs.autodetectAnnotations(true);
-			Writer writer = new StringWriter();
-			writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
-			xs.toXML(requestParamBean,writer);
-			String parseBody = parseBody(HttpUtil.postXmlData(writer.toString(), url));
-			ResponseCourseEntity xmlToObject = XStreamUtil.xmlToObject("body", ResponseCourseEntity.class, parseBody);
-			courseGroupInfoService.upSetCourseGroup(xmlToObject);
-			return schoolService.upsetSchool(xmlToObject);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	public String parseBody(String body){
-		body = body.substring(body.indexOf("<body>")+6,body.indexOf("</body>"));
-		return "<body><courses>" + new String(Base64.getDecoder().decode(body)) + "</courses></body>";
-	}
-
-	@Override
-	public int getPayOrderNums() {
-		return orderDao.getPayOrderNums();
-	}
-
-	@Override
-	public List<Order> findPayingOrders(){
-		return orderDao.findPayingOrders();
-	}
+    @Value("${yq-pay.notify-url}")
+    private String notifyUrl;
+
+    @Value("${yq-pay.return-host}")
+    private String returnHost;
+
+    @Autowired
+    private OrderDao orderDao;
+    @Autowired
+    private SchoolService schoolService;
+    @Autowired
+    private CourseGroupInfoService courseGroupInfoService;
+
+    //公共密钥
+    @Value("${common.properties.mec-publicKey}")
+    private String publicKey;
+
+    @Value("${common.properties.mec-url}")
+    private String url;
+
+    @Override
+    public BaseDAO<Integer, Order> getDAO() {
+        return orderDao;
+    }
+
+    @Override
+    public List<Order> getOrderByUserId(Integer userId) {
+        return orderDao.getOrderByUserId(userId);
+    }
+
+    @Override
+    public String pushOrder(String batchNum) {
+        try {
+            RequestParamBean requestParamBean = new RequestParamBean();
+            List<Order> orderList = orderDao.getOrderByBatch(batchNum);
+            if (orderList == null || orderList.size() < 1) {
+                return null;
+            }
+            XStream xs = new XStream();
+            xs.autodetectAnnotations(true);
+            Writer writer = new StringWriter();
+            Orders orders = new Orders(orderList);
+            xs.toXML(orders, writer);
+            String body = writer.toString();
+            body = body.substring(body.indexOf("<body>") + 6, body.indexOf("</body>"));
+
+            body = Base64.getEncoder().encodeToString(body.getBytes());
+            requestParamBean.setBody(body);
+            requestParamBean.setHead(XStreamUtil.getOrdersHead(body, 121512, publicKey, null, null));
+
+            xs.autodetectAnnotations(true);
+            writer = new StringWriter();
+            writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
+            xs.toXML(requestParamBean, writer);
+            return writer.toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    @Override
+    public int countOrder(String poName, String voicePort) {
+        return orderDao.countOrder(poName, voicePort);
+    }
+
+
+    @Override
+    public Order getOrderByOrderNo(String orderNo) {
+        return orderDao.getOrderByOrderNo(orderNo);
+    }
+
+    @Override
+    public Object getSchoolDetail(Integer schoolId, Integer clazzId) {
+        try {
+            RequestParamBean requestParamBean = new RequestParamBean();
+            String body = "<classId>" + clazzId + "</classId><schoolId>" + schoolId + "</schoolId>";
+            body = Base64.getEncoder().encodeToString(body.getBytes());
+            requestParamBean.setBody(body);
+            requestParamBean.setHead(XStreamUtil.getOrdersHead(body, 124005, publicKey, null, null));
+            XStream xs = new XStream();
+            xs.autodetectAnnotations(true);
+            Writer writer = new StringWriter();
+            writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
+            xs.toXML(requestParamBean, writer);
+            String parseBody = parseBody(HttpUtil.postXmlData(writer.toString(), url));
+            ResponseCourseEntity xmlToObject = XStreamUtil.xmlToObject("body", ResponseCourseEntity.class, parseBody);
+            courseGroupInfoService.upSetCourseGroup(xmlToObject);
+            return schoolService.upsetSchool(xmlToObject);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public String parseBody(String body) {
+        body = body.substring(body.indexOf("<body>") + 6, body.indexOf("</body>"));
+        return "<body><courses>" + new String(Base64.getDecoder().decode(body)) + "</courses></body>";
+    }
+
+    @Override
+    public int getPayOrderNums() {
+        return orderDao.getPayOrderNums();
+    }
+
+    @Override
+    public List<Order> findPayingOrders() {
+        return orderDao.findPayingOrders();
+    }
+
+    @Override
+    public Map getPayMap(Account routingAccount, Order order, School school) throws Exception {
+
+        String notifyUrl = this.notifyUrl; //异步通知地址
+        String returnUrl = this.returnHost + "/#/payment?userId="+order.getUserId();//支付后返回页面
+
+        if (school != null) {
+            returnUrl = this.returnHost + "/#/login?schoolId=" + school.getSchoolId() + "&classId=" + order.getClassId() + "&cityId=" + school.getCityId();//支付后返回页面
+        }
+        String payUrl = "https://qyfapi.95epay.com/api/api/hPay/toPayHtml";//支付跳转页
+        String payChannels = "{\"weChatPay\":true,\"weChatPayMobile\":false,\"aliPay\":true,\"fastpayXy\":true,\"aliPayMobile\":false,\"balancePay\":false}";//支付方式配置
+
+        List<Map> tempRoutingList = new ArrayList();
+        if (routingAccount.getBranchId().equals(0)) {
+            Map<String, Object> routingList = new HashMap<>();
+            routingList.put("routingMerNo", routingAccount.getSellerNo());//分佣账户
+            routingList.put("routingFee", order.getAmount()); //分佣金额
+            tempRoutingList.add(routingList);
+        }
+
+        /*订单信息*/
+        String orderBody = "大雅乐盟培训课程";
+        /*订单标题*/
+        String orderSubject = "培训订单";
+
+        Map<String, Object> resultMap = new LinkedHashMap<String, Object>();
+        resultMap.put("sellerNo", "0021677"); //收款商户号
+        resultMap.put("payChannels", payChannels); //支付方式
+        resultMap.put("orderBody", orderBody); //订单信息
+        resultMap.put("payAmount", order.getAmount()); //支付金额
+        resultMap.put("apiPayType", "1"); //*API支付类型1-即时支付,2-担保支付,3-预授权支付*/
+        resultMap.put("tradeType", "0"); //*交易类型1—充值,0—收款*
+        resultMap.put("merMerOrderNo", order.getOrderNo()); //商户订单号
+        resultMap.put("orderSubject", orderSubject); //订单标题
+        resultMap.put("returnUrl", returnUrl); //前台页面地址
+        if (routingAccount.getBranchId().equals(0)) {
+            resultMap.put("tempRoutingList", JSON.toJSONString(tempRoutingList));//分账设置
+        }
+        Map rqMap = new YqPayUtil(notifyUrl, resultMap).getRequestMap();
+        rqMap.put("host", payUrl);
+        return rqMap;
+    }
 
 
 }

+ 15 - 8
src/main/java/com/ym/mec/collectfee/service/impl/RenewalsServiceImpl.java

@@ -12,6 +12,7 @@ import com.ym.mec.collectfee.service.AccountService;
 import com.ym.mec.collectfee.service.OrderService;
 import com.ym.mec.collectfee.service.RenewalsService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -45,18 +46,19 @@ public class RenewalsServiceImpl extends BaseServiceImpl<Integer, Renewals> impl
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Order addRenewalsOrder(Renewals renewals, BigDecimal amount, String orderNo, List<MecCourse> mecCourses, String routingMerNo,int accountId, String remark) {
+    public Order addRenewalsOrder(Renewals renewals, BigDecimal amount, String orderNo, List<MecCourse> mecCourses, Account routingAccount, String remark) {
 
+        ////classType 小课1 大课2
         Order order = new Order();
         order.setBranchId(renewals.getBranchId());
         order.setUserId(renewals.getUserId());
         order.setOrderNo(orderNo);
         order.setAmount(amount);
-        order.setAccount(routingMerNo);
+        order.setAccount(routingAccount.getSellerNo());
         order.setRemark(remark);
         order.setClassId(renewals.getClassId());
         order.setStatus(1);
-        order.setUAccount(String.valueOf(accountId));
+        order.setUAccount(String.valueOf(routingAccount.getId()));
         order.setCreateTime(new Date());
 
         //1、插入订单
@@ -65,6 +67,11 @@ public class RenewalsServiceImpl extends BaseServiceImpl<Integer, Renewals> impl
 
         for (int i = 0; i < mecCourses.size(); i++) {
             MecCourse course = mecCourses.get(i);
+            order.setClassId(course.getClassId());
+            order.setUserName(course.getSubNames());
+            Integer type = course.getClassType() == 2 ? 2 : 3;
+            order.setType(type);
+
             Renewals rws = new Renewals();
             rws.setUserId(course.getStudentId());
             rws.setBranchId(renewals.getBranchId());
@@ -77,16 +84,16 @@ public class RenewalsServiceImpl extends BaseServiceImpl<Integer, Renewals> impl
             rws.setBuy(course.getBuyCount());
             rws.setOrderId(order.getId());
             renewalsArrayList.add(rws);
+
         }
 
-        //2、添加
+        //2、添加续费记录
         renewalsService.renewalsInsert(renewalsArrayList);
         //3、修改分佣账户已收金额
         //获取分佣账户
-        Account account = accountService.getAccountByBranchId(renewals.getBranchId());
-        BigDecimal HasRouting = account.getHasRouting().add(amount);
-        account.setHasRouting(HasRouting);
-        accountService.upByIdAndVersion(account);
+        BigDecimal HasRouting = routingAccount.getHasRouting().add(amount);
+        routingAccount.setHasRouting(HasRouting);
+        accountService.upByIdAndVersion(routingAccount);
         return order;
     }
 

+ 6 - 0
src/main/java/com/ym/mec/collectfee/service/impl/SchoolServiceImpl.java

@@ -91,6 +91,12 @@ public class SchoolServiceImpl extends BaseServiceImpl<Integer, School> implemen
 			SmsExample.setBatchOnlySms(appId,secretKey,host,algorithm,smsMsg,null,objects,isGizp,encode);
 		}
 	}
+
+	@Override
+	public void sendPayMsg(String mobile,String amount){
+		SmsExample.setSingleSms(appId,secretKey,host,algorithm,
+				String.format(Constants.PAY_SMS_TEMPLATE,amount),null,null, mobile,isGizp,encode);
+	}
 	
 //	public static void main(String[] args) {
 //		System.out.println(String.format(Constants.SMS_TEMPLATE, DateUtils.getDayForAfter(new Date(), 2)));

+ 2 - 2
src/main/java/com/ym/mec/collectfee/utils/Constants.java

@@ -5,6 +5,6 @@ public interface Constants {
     String PARAM_EXIST_ERROR_MSG = "该用户已在其他乐团报名";
     
     String SMS_TEMPLATE = "家长您好:恭喜您的孩子被管乐团录取!请您收到录取通知书后,于%s晚24:00前点此链接%s 或扫录取通知书上的二维码为学生完成入团注册缴费手续,专业以录取专业为准。完成后请关注深圳大雅乐盟(D-Y-M-E)点击菜单栏乐人进入乐团助手页面,查看课程安排。";
-
-    String SEND_LOGIN_SME_MSG = "您的验证码是:%s, 在15分钟内有效,请勿向任何人提供您收到的短信验证码。";
+    String PAY_SMS_TEMPLATE = "家长您好:您已支付乐器及相关费用%s元并完成乐团相关注册手续,欢迎加入管乐团开启您的器乐学习之旅,请等待开课通知!。";
+	String SEND_LOGIN_SME_MSG = "您的验证码是:%s, 在15分钟内有效,请勿向任何人提供您收到的短信验证码。";
 }

+ 2 - 0
src/main/resources/application.yml

@@ -63,6 +63,8 @@ logging:
 yq-pay:
   pay-host: https://qyfapi.95epay.com
   query-host: https://qyfquery.95epay.com
+  notify-url: http://47.99.212.176:9000/yqpay/notify #通知
+  return-host: http://pay.dayaedu.com #支付返回
   merno: 0021677
 
 common:

+ 4 - 2
src/main/resources/config/mybatis/OrderMapper.xml

@@ -13,8 +13,10 @@
 		<result column="group_id" property="groupId" />
 		<result column="order_no" property="orderNo" />
 		<result column="user_id" property="userId" />
+		<result column="user_name" property="userName" />
 		<result column="amount" property="amount" />
-		<result column="pay" property="pay" />
+		<result column="type" property="type" />
+		<result column="pay" property="pay"/>
 		<result column="bank" property="bank" />
 		<result column="account" property="account" />
 		<result column="u_account" property="uAccount" />
@@ -51,7 +53,7 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
 		</selectKey>
 		-->
-		INSERT INTO `order` (id,oid,order_no,branch_id,group_id,user_id,amount,pay,bank,account,u_account,pay_id,pay_time,remark,class_id,status,create_time,po_name,voicy_part,balance,batch_num,tui_fee,goods_fee,sd_name,sd_fee) VALUES(#{id},#{oid},#{orderNo},#{branchId},#{groupId},#{userId},#{amount},#{pay},#{bank},#{account},#{uAccount},#{payId},#{payTime},#{remark},#{classId},#{status},#{createTime},#{poName},#{voicyPart},#{balance},#{batchNum},#{tuiFee},#{goodsFee},#{sdName},#{sdFee})
+		INSERT INTO `order` (id,oid,order_no,branch_id,group_id,user_id,user_name,amount,type,pay,bank,account,u_account,pay_id,pay_time,remark,class_id,status,create_time,po_name,voicy_part,balance,batch_num,tui_fee,goods_fee,sd_name,sd_fee) VALUES(#{id},#{oid},#{orderNo},#{branchId},#{groupId},#{userId},#{userName},#{amount},#{type},#{pay},#{bank},#{account},#{uAccount},#{payId},#{payTime},#{remark},#{classId},#{status},#{createTime},#{poName},#{voicyPart},#{balance},#{batchNum},#{tuiFee},#{goodsFee},#{sdName},#{sdFee})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->

+ 18 - 0
src/main/resources/instruments.json

@@ -99,6 +99,24 @@
       "checked": true,
       "texture": ""
     },
+    "12": {
+      "index": "次中音号",
+      "default": 1,
+      "name": "标准配置",
+      "marketPrice": 5800,
+      "referencePrice": 3980,
+      "checked": true,
+      "texture": "白铜变音管磷铜发音管"
+    },
+    "13": {
+      "index": "打击乐",
+      "default": 1,
+      "name": "标准配置",
+      "marketPrice": 3700,
+      "referencePrice": 3190,
+      "checked": true,
+      "texture": ""
+    },
     "99": {
       "index": "小号",
       "default": 1,