Переглянути джерело

add 乐器置换支付接口

周箭河 4 роки тому
батько
коміт
8c2ce811ff

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java

@@ -13,7 +13,8 @@ public enum GroupType implements BaseEnum<String, GroupType> {
 	GOODS_SELL("商品销售"),
 	OUTORDER("外部订单"),
 	SUBJECT_CHANGE("声部更换"),
-	MAINTENANCE("乐保");
+	MAINTENANCE("乐保"),
+	REPLACEMENT("乐器置换");
 
 	private String desc;
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java

@@ -22,7 +22,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	REPAIR("REPAIR","乐器维修"),
 	SUBJECT_CHANGE("SUBJECT_CHANGE","声部更换"),
 	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名"),
-	MAINTENANCE("MAINTENANCE","乐保");
+	MAINTENANCE("MAINTENANCE","乐保"),
+	REPLACEMENT("REPLACEMENT","乐器置换");
 
 
 	private String code;

+ 12 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/ReplacementInstrumentActivityService.java

@@ -1,13 +1,14 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.ReplacementInstrumentActivityStatDto;
+import com.ym.mec.biz.dal.dto.ReplacementPayDto;
 import com.ym.mec.biz.dal.entity.ReplacementInstrumentActivity;
 import com.ym.mec.biz.dal.page.ReplacementInstrumentActivityQueryInfo;
-import com.ym.mec.biz.dal.page.ReplacementInstrumentQueryInfo;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.Map;
+
 public interface ReplacementInstrumentActivityService extends BaseService<Integer, ReplacementInstrumentActivity> {
 
     Object add(ReplacementInstrumentActivity replacementInstrumentActivity);
@@ -15,4 +16,13 @@ public interface ReplacementInstrumentActivityService extends BaseService<Intege
     ReplacementInstrumentActivity findByUserId(Integer userId);
 
     PageInfo<ReplacementInstrumentActivityStatDto> queryReplacementsStat(ReplacementInstrumentActivityQueryInfo queryInfo);
+
+    /**
+     * 乐器置换的支付
+     * @param replacementPayDto
+     * @return
+     * @throws Exception
+     */
+    Map pay(ReplacementPayDto replacementPayDto) throws Exception;
+
 }

+ 179 - 65
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java

@@ -3,95 +3,209 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CooperationOrganDao;
+import com.ym.mec.biz.dal.dao.ReplacementInstrumentDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.ReplacementInstrumentActivityStatDto;
 import com.ym.mec.biz.dal.dto.ReplacementInstrumentActivityStatHead;
-import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.dto.ReplacementPayDto;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.ReplacementInstrumentActivityQueryInfo;
 import com.ym.mec.biz.dal.page.ReplacementInstrumentQueryInfo;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
-import com.ym.mec.biz.dal.entity.ReplacementInstrumentActivity;
-import com.ym.mec.biz.service.ReplacementInstrumentActivityService;
 import com.ym.mec.biz.dal.dao.ReplacementInstrumentActivityDao;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 @Service
 public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<Integer, ReplacementInstrumentActivity> implements ReplacementInstrumentActivityService {
-	
-	@Autowired
-	private ReplacementInstrumentActivityDao replacementInstrumentActivityDao;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private CooperationOrganDao cooperationOrganDao;
-
-	@Override
-	public BaseDAO<Integer, ReplacementInstrumentActivity> getDAO() {
-		return replacementInstrumentActivityDao;
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public Object add(ReplacementInstrumentActivity replacementInstrumentActivity) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			throw new BizException("用户信息获取失败,请重新登陆");
-		}
-		replacementInstrumentActivity.setUserId(sysUser.getId());
-		//如果用户是43分部,那么修改用户信息
-		//如果提交过调查问卷,那么覆盖之前的记录
-		ReplacementInstrumentActivity activity = replacementInstrumentActivityDao.findByUserId(sysUser.getId());
-		if(activity != null){
-			//覆盖之前的数据
-			replacementInstrumentActivity.setId(activity.getId());
-			replacementInstrumentActivityDao.update(replacementInstrumentActivity);
-		}else {
-			replacementInstrumentActivityDao.insert(replacementInstrumentActivity);
-		}
-		return replacementInstrumentActivity;
-	}
-
-	@Override
-	public ReplacementInstrumentActivity findByUserId(Integer userId) {
-		return replacementInstrumentActivityDao.findByUserId(userId);
-	}
-
-	@Override
-	public PageInfo<ReplacementInstrumentActivityStatDto> queryReplacementsStat(ReplacementInstrumentActivityQueryInfo queryInfo) {
-		PageInfo<ReplacementInstrumentActivityStatDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-
-		if(Objects.isNull(queryInfo.getCooperationOrganId())){
-			throw new BizException("请指定合作单位");
-		}
 
-		int count = replacementInstrumentActivityDao.countReplacements(params);
+    @Autowired
+    private ReplacementInstrumentActivityDao replacementInstrumentActivityDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private CooperationOrganDao cooperationOrganDao;
+    @Autowired
+    private ReplacementInstrumentDao replacementInstrumentDao;
+    @Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
+    @Autowired
+	private IdGeneratorService idGeneratorService;
+    @Autowired
+	private StudentPaymentOrderService studentPaymentOrderService;
+    @Autowired
+	private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
+    @Autowired
+	private SysConfigDao sysConfigDao;
+    @Autowired
+	private PayService payService;
 
-		if(queryInfo.getPage()==1){
-			ReplacementInstrumentActivityStatHead head = replacementInstrumentActivityDao.countReplacementsInfo(queryInfo.getCooperationOrganId());
-			CooperationOrgan cooperationOrgan = cooperationOrganDao.get(queryInfo.getCooperationOrganId());
-			head.setCooperationOrganName(cooperationOrgan.getName());
-			pageInfo.setStatInfo(head);
-		}
+    @Override
+    public BaseDAO<Integer, ReplacementInstrumentActivity> getDAO() {
+        return replacementInstrumentActivityDao;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Object add(ReplacementInstrumentActivity replacementInstrumentActivity) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败,请重新登陆");
+        }
+        replacementInstrumentActivity.setUserId(sysUser.getId());
+        //如果用户是43分部,那么修改用户信息
+        //如果提交过调查问卷,那么覆盖之前的记录
+        ReplacementInstrumentActivity activity = replacementInstrumentActivityDao.findByUserId(sysUser.getId());
+        if (activity != null) {
+            //覆盖之前的数据
+            replacementInstrumentActivity.setId(activity.getId());
+            replacementInstrumentActivityDao.update(replacementInstrumentActivity);
+        } else {
+            replacementInstrumentActivityDao.insert(replacementInstrumentActivity);
+        }
+        return replacementInstrumentActivity;
+    }
+
+    @Override
+    public ReplacementInstrumentActivity findByUserId(Integer userId) {
+        return replacementInstrumentActivityDao.findByUserId(userId);
+    }
+
+    @Override
+    public PageInfo<ReplacementInstrumentActivityStatDto> queryReplacementsStat(ReplacementInstrumentActivityQueryInfo queryInfo) {
+        PageInfo<ReplacementInstrumentActivityStatDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        if (Objects.isNull(queryInfo.getCooperationOrganId())) {
+            throw new BizException("请指定合作单位");
+        }
+
+        int count = replacementInstrumentActivityDao.countReplacements(params);
+
+        if (queryInfo.getPage() == 1) {
+            ReplacementInstrumentActivityStatHead head = replacementInstrumentActivityDao.countReplacementsInfo(queryInfo.getCooperationOrganId());
+            CooperationOrgan cooperationOrgan = cooperationOrganDao.get(queryInfo.getCooperationOrganId());
+            head.setCooperationOrganName(cooperationOrgan.getName());
+            pageInfo.setStatInfo(head);
+        }
+
+        pageInfo.setTotal(count);
+        params.put("offset", pageInfo.getOffset());
+        List<ReplacementInstrumentActivityStatDto> dataList = replacementInstrumentActivityDao.queryReplacements(params);
+        if (!CollectionUtils.isEmpty(dataList)) {
 
-		pageInfo.setTotal(count);
-		params.put("offset", pageInfo.getOffset());
-		List<ReplacementInstrumentActivityStatDto> dataList = replacementInstrumentActivityDao.queryReplacements(params);
-		if (!CollectionUtils.isEmpty(dataList)) {
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 
+    @Override
+    public Map pay(ReplacementPayDto replacementPayDto) throws Exception {
+        ReplacementInstrumentActivity replacementInstrumentActivity = replacementInstrumentActivityDao.get(replacementPayDto.getId());
+        if (replacementInstrumentActivity == null) {
+            throw new BizException("乐器置换不存在,请核查");
+        }
+        if (replacementInstrumentActivity.getInstrumentsId() == null || replacementInstrumentActivity.getInstrumentsId() == 0) {
+			throw new BizException("没有置换的乐器,请核查");
 		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
+        Integer userId = replacementInstrumentActivity.getUserId();
+		ReplacementInstrument replacementInstrument = replacementInstrumentDao.get(replacementInstrumentActivity.getInstrumentsId());
+		BigDecimal orderAmount = replacementInstrument.getSalePrice();
+		BigDecimal amount = replacementPayDto.getAmount(); //扣除余额之前的金额
+        if (amount.compareTo(replacementInstrument.getSalePrice()) != 0) {
+            throw new BizException("商品价格不符");
+        }
+
+        String channelType = "";
+        Date nowDate = new Date();
+
+        BigDecimal balance = BigDecimal.ZERO;
+        if (replacementPayDto.getUseBalance() && amount.compareTo(BigDecimal.ZERO) > 0) {
+            SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
+            if (userCashAccount == null) {
+                throw new BizException("用户账户找不到");
+            }
+            if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+                balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
+                amount = amount.subtract(balance);
+                sysUserCashAccountService.updateBalance(userId, balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "乐保购买");
+            }
+        }
+
+		CooperationOrgan cooperationOrgan = cooperationOrganDao.get(replacementInstrumentActivity.getCooperationOrganId());
+
+		String orderNo = idGeneratorService.generatorId("payment") + "";
+        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+
+        studentPaymentOrder.setPaymentChannel("BALANCE");
+        studentPaymentOrder.setUserId(userId);
+        studentPaymentOrder.setGroupType(GroupType.REPLACEMENT);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.REPLACEMENT);
+        studentPaymentOrder.setExpectAmount(orderAmount);
+        studentPaymentOrder.setActualAmount(amount);
+        studentPaymentOrder.setBalancePaymentAmount(balance);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setMusicGroupId(replacementInstrumentActivity.getId().toString());
+        studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setOrganId(cooperationOrgan.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(cooperationOrgan.getOrganId());
+        studentPaymentOrder.setCreateTime(nowDate);
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.insert(studentPaymentOrder);
+        //修改支付状态
+
+
+        studentPaymentOrder.setVersion(0);
+        if (amount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, cooperationOrgan.getOrganId(), balance);
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            notifyMap.put("channelType", channelType);
+            notifyMap.put("orderNo", "");
+            studentPaymentOrderService.updateOrder(notifyMap);
+            return notifyMap;
+        }
+
+        String orderSubject = "乐器置换";
+        String receiver = "replacement";
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+
+        Map payMap = payService.getPayMap(
+                amount,
+                balance,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                orderSubject,
+                orderSubject,
+                cooperationOrgan.getOrganId(),
+                receiver
+        );
+
+        studentPaymentOrder.setOrganId(cooperationOrgan.getOrganId());
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.update(studentPaymentOrder);
+        return payMap;
+    }
 }

+ 1 - 2
mec-student/src/main/java/com/ym/mec/student/controller/ReplacementInstrumentActivityController.java

@@ -100,7 +100,6 @@ public class ReplacementInstrumentActivityController extends BaseController {
     @PostMapping("/pay")
     @ApiImplicitParams({@ApiImplicitParam(name = "replacementPayDto", value = "支付参数", required = true, dataType = "ReplacementPayDto")})
     public HttpResponseResult pay(ReplacementPayDto replacementPayDto) throws Exception {
-        //return succeed(studentInstrumentService.pay(maintenancePayDto));
-        return null;
+        return succeed(replacementInstrumentActivityService.pay(replacementPayDto));
     }
 }

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ReplacementInstrumentCooperationController.java

@@ -60,7 +60,7 @@ public class ReplacementInstrumentCooperationController extends BaseController {
 
     @ApiOperation(value = "新增合作单位置换活动")
     @PostMapping("/add")
-    @PreAuthorize("@pcs.hasPermissions('replacementInstrumentActivity/add')")
+    @PreAuthorize("@pcs.hasPermissions('replacementInstrumentCooperation/add')")
     public HttpResponseResult<ReplacementInstrumentCooperation> add(ReplacementInstrumentCooperation replacementInstrumentCooperation) {
         ReplacementInstrumentCooperation hasOld = replacementInstrumentCooperationService.getByCooperationId(replacementInstrumentCooperation.getCooperationOrganId());
         if (hasOld != null) {
@@ -75,7 +75,7 @@ public class ReplacementInstrumentCooperationController extends BaseController {
 
     @ApiOperation(value = "开启缴费")
     @PostMapping("/openPay")
-    @PreAuthorize("@pcs.hasPermissions('replacementInstrumentActivity/openPay')")
+    @PreAuthorize("@pcs.hasPermissions('replacementInstrumentCooperation/openPay')")
     public HttpResponseResult<ReplacementInstrumentCooperation> openPay(Integer id) {
         return succeed(replacementInstrumentCooperationService.openPay(id));
     }