From ad9fbd2c18f280ef9bba47f28353d367cf2d94e8 Mon Sep 17 00:00:00 2001
From: yujian <yujian>
Date: 星期二, 14 五月 2019 11:28:03 +0800
Subject: [PATCH] Merge branch 'div_12'

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/ExtractServiceImpl.java |  143 ++++++++++++++++++++++++++---------------------
 1 files changed, 78 insertions(+), 65 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/ExtractServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/ExtractServiceImpl.java
index 795c150..658d29b 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/ExtractServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/ExtractServiceImpl.java
@@ -1,7 +1,7 @@
 package com.yeshi.fanli.service.impl.user;
 
-import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -24,25 +24,21 @@
 import com.yeshi.fanli.dao.mybatis.ExtractMapper;
 import com.yeshi.fanli.dao.mybatis.ExtractRecordMapper;
 import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
-import com.yeshi.fanli.dao.mybatis.MoneyRecordMapper;
 import com.yeshi.fanli.dao.mybatis.PayInfoMapper;
-import com.yeshi.fanli.dao.mybatis.SystemMapper;
 import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
 import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper;
-import com.yeshi.fanli.dao.user.AccountMessageDao;
-import com.yeshi.fanli.dao.user.ExtractDao;
-import com.yeshi.fanli.dao.user.ExtractRecordDao;
-import com.yeshi.fanli.dao.user.MoneyRecordDao;
 import com.yeshi.fanli.dto.HongBao;
 import com.yeshi.fanli.entity.bus.user.AlipayTransferResultInfo;
 import com.yeshi.fanli.entity.bus.user.Extract;
 import com.yeshi.fanli.entity.bus.user.ExtractAuditRecord;
 import com.yeshi.fanli.entity.bus.user.ExtractRecord;
-import com.yeshi.fanli.entity.bus.user.MoneyRecord;
+import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 import com.yeshi.fanli.entity.bus.user.PayInfo;
+import com.yeshi.fanli.entity.bus.user.UserAccountBindingHistory;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 import com.yeshi.fanli.entity.common.AdminUser;
 import com.yeshi.fanli.entity.money.UserMoneyDetail;
+import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
 import com.yeshi.fanli.exception.ExtractException;
 import com.yeshi.fanli.exception.NotExistObjectException;
 import com.yeshi.fanli.exception.ObjectStateException;
@@ -50,13 +46,15 @@
 import com.yeshi.fanli.log.LogHelper;
 import com.yeshi.fanli.service.inter.config.ConfigService;
 import com.yeshi.fanli.service.inter.config.SystemConfigService;
+import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
+import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
 import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
 import com.yeshi.fanli.service.inter.push.PushService;
-import com.yeshi.fanli.service.inter.user.AccountMessageService;
 import com.yeshi.fanli.service.inter.user.ExtractRecordService;
 import com.yeshi.fanli.service.inter.user.ExtractService;
-import com.yeshi.fanli.service.inter.user.MoneyRecordService;
+import com.yeshi.fanli.service.inter.user.UserAccountBindingHistoryService;
 import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.UserMoneyDetailService;
 import com.yeshi.fanli.service.inter.user.UserNotificationService;
 import com.yeshi.fanli.util.CMQManager;
 import com.yeshi.fanli.util.Constant;
@@ -71,13 +69,7 @@
 public class ExtractServiceImpl implements ExtractService {
 
 	@Resource
-	private ExtractDao extractDao;
-
-	@Resource
 	private UserInfoService userInfoService;
-
-	@Resource
-	private MoneyRecordService moneyRecordService;
 
 	@Resource
 	private ConfigService configService;
@@ -87,10 +79,6 @@
 
 	@Resource
 	private SystemConfigService systemConfigService;
-
-
-	@Resource
-	private AccountMessageService accountMessageService;
 
 	@Resource
 	private ExtractMapper extractMapper;
@@ -102,19 +90,7 @@
 	private UserInfoMapper userInfoMapper;
 
 	@Resource
-	private ExtractRecordDao extractRecordDao;
-
-	@Resource
-	private MoneyRecordDao moneyRecordDao;
-
-	@Resource
-	private AccountMessageDao accountMessageDao;
-
-	@Resource
 	private PayInfoMapper payInfoMapper;
-
-	@Resource
-	private MoneyRecordMapper moneyRecordMapper;
 
 	@Resource
 	private AccountMessageMapper accountMessageMapper;
@@ -123,10 +99,10 @@
 	private ExtractRecordMapper extractRecordMapper;
 
 	@Resource
-	private SystemMapper systemMapper;
+	private HongBaoV2Mapper hongBaoV2Mapper;
 
 	@Resource
-	private HongBaoV2Mapper hongBaoV2Mapper;
+	private HongBaoV2Service hongBaoV2Service;
 
 	@Resource
 	private PushService pushService;
@@ -143,24 +119,19 @@
 	@Resource
 	private AlipayAccountValidNormalHistoryMapper alipayAccountValidNormalHistoryMapper;
 
-	public List<Extract> getExtractInfoByUid(long uid) {
-		return extractDao.list("from Extract e where e.userInfo.id=? and e.state != 2", new Serializable[] { uid });
-	}
+	@Resource
+	private UserMoneyDetailService userMoneyDetailService;
+
+	@Resource
+	private UserAccountBindingHistoryService userAccountBindingHistoryService;
+
+	@Resource
+	private UserMoneyDebtService userMoneyDebtService;
 
 	@Transactional
 	public Integer addExtract(Extract extract) {
 		Integer integer = extract(extract);
 		return integer;
-	}
-
-	public List<Extract> getExtractList(int index) {
-		int start = index * Constant.PAGE_SIZE;
-		return extractDao.list("from Extract e order by e.id desc", start, Constant.PAGE_SIZE, new Serializable[] {});
-	}
-
-	public int getCount() {
-		Long lcount = extractDao.getCount("select count(e.id) from Extract e");
-		return lcount.intValue();
 	}
 
 	@Transactional
@@ -184,7 +155,7 @@
 	}
 
 	@Transactional
-	public synchronized void rejectExtract(long id, String reason, long extractTime, AdminUser admin)
+	public synchronized void rejectExtract(long id, String reason, AdminUser admin)
 			throws ObjectStateException, NotExistObjectException {
 		Extract find = extractMapper.selectByPrimaryKey(id);
 
@@ -199,9 +170,6 @@
 		UserInfo user = find.getUserInfo();
 
 		userInfoMapper.addHongBaoByUid(user.getId(), find.getMoney());
-
-		// 鍒犻櫎鎻愮幇璁板綍
-		moneyRecordMapper.deleteMoneyRecordByExtractId(id);
 
 		// 鏇存柊鍘熸潵鐨勭姸鎬�
 		Extract updateExtract = new Extract();
@@ -269,6 +237,13 @@
 	 */
 	@Transactional
 	private Integer extract(Extract extract) {
+		UserAccountBindingHistory history = userAccountBindingHistoryService
+				.getLatestHistory(extract.getUserInfo().getId(), UserAccountBindingHistory.TYPE_PHONE);
+		// 鎵嬫満鍙锋洿鎹㈢粦瀹氱殑7澶╁唴涓嶈兘鎻愮幇
+		if (history != null && !history.getFirst()
+				&& (System.currentTimeMillis() - history.getCreateTime().getTime()) < 1000 * 60 * 60 * 24 * 7L)
+			return 111;
+
 		final String autoExtract = configService.get("extract_way"); // 鏄惁鑷姩杞处
 		final String maxCount = configService.get("extract_count_day");
 		final String maxMoney = configService.get("extract_money_day");
@@ -279,10 +254,17 @@
 			return 3;
 		}
 
+		// 鏈夊�熻捶鍏崇郴
+		boolean isHaveToReplay = userMoneyDebtService.isHaveDebtToRepay(extract.getUserInfo().getId());
+		if (isHaveToReplay) {
+			return 110;
+		}
+
 		Integer type = setExtractRecord(extract, maxCount, maxMoney);
 		if (type != 0) {
 			return type;
 		}
+
 		extractMapper.insertSelective(extract);
 
 		ExtractAuditRecord auditRecord = new ExtractAuditRecord();
@@ -292,11 +274,6 @@
 
 		// 鍑忓幓璐︽埛璧勯噾
 		userInfoMapper.subHongBaoByUid(extract.getUserInfo().getId(), extract.getMoney());
-
-		MoneyRecord moneyRecord = new MoneyRecord(user, null, extract.getMoney(), "鎻愮幇", "", extract.getExtractTime(),
-				2);
-		moneyRecord.setExtract(extract);
-		moneyRecordMapper.insertSelective(moneyRecord);
 
 		// 鏂扮増璧勯噾璇︽儏
 		try {
@@ -317,7 +294,8 @@
 		if ("鏄�".equals(autoExtract)) {
 			LogHelper.userInfo("uid=" + user.getId() + ",鎻愪氦杞处鐢宠!");
 		} else {// 鏆傛椂涓嶈嚜鍔ㄦ彁鐜�
-			transfer(extract, null);
+			// transfer(extract, null);
+			;
 		}
 		return null;
 	}
@@ -400,15 +378,15 @@
 				Constant.alipayConfig.getAppId(), privateKey, "json", "gbk", null, "RSA2");
 		AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
 		String uuid = UUID.randomUUID().toString().replace("-", "");
-		String appName = systemConfigService.get("appName", extract.getSystem());
+		String appName = Constant.systemCommonConfig.getProjectChineseName();
 		JSONObject json = new JSONObject();
 		json.put("out_biz_no", uuid);
 		json.put("payee_type", "ALIPAY_LOGONID");
 		json.put("payee_account", extract.getAccount());
 		json.put("amount", extract.getMoney());
-		json.put("payer_show_name", appName + "鎻愮幇");
+		json.put("payer_show_name", appName + "App" + "鎻愮幇");
 		json.put("payee_real_name", extract.getName());
-		json.put("remark", "鏉ヨ嚜" + appName + "鐨勬彁鐜�");
+		json.put("remark", "鏉ヨ嚜" + appName + "App" + "鐨勬彁鐜�");
 		request.setBizContent(json.toString());
 		AlipayFundTransToaccountTransferResponse response = null;
 		try {
@@ -531,16 +509,51 @@
 	 */
 	@Override
 	public Extract getExtractById(long id) {
-		return extractDao.find(Extract.class, id);
+		return extractMapper.selectByPrimaryKey(id);
 	}
 
+	@Transactional
 	@Override
-	public void checkExtract(String uid) throws ExtractException {
-		Long count = hongBaoV2Mapper.countByUidAndState(Long.parseLong(uid), HongBao.STATE_YILINGQU);
+	public void checkExtract(Long uid) throws ExtractException {
+		Long count = hongBaoV2Mapper.countByUidAndState(uid, HongBao.STATE_YILINGQU);
 		if (count == null || count == 0)
 			throw new ExtractException(1, "娌℃湁宸插埌璐︾殑绾㈠寘");
-		List<Integer> list = extractMapper.checkExtract(uid);
-		if (list != null && list.size() > 0 && list.get(0) == 0)
+		// 鏌ヨ鏄惁鏈夋瑺璐�
+		boolean isDebt = userMoneyDebtService.isHaveDebtToRepay(uid);
+		if (isDebt)
+			throw new ExtractException(3, "鏈夋瑺璐︽湭杩�");
+		// 鑾峰彇鎵�鏈夋敹鍏ユ墍寰�
+		BigDecimal hongBaoMoney = hongBaoV2Service.computeMoneyByUidAndState(uid, HongBaoV2.STATE_YILINGQU);
+
+		Date now = new Date();
+		// 鑾峰彇鎻愮幇锛岃幏鍙栨彁鐜伴獙璇�
+		List<UserMoneyDetailTypeEnum> typeList = new ArrayList<>();
+		typeList.add(UserMoneyDetailTypeEnum.extract);
+		typeList.add(UserMoneyDetailTypeEnum.extractReject);
+		typeList.add(UserMoneyDetailTypeEnum.extractVerify);
+		BigDecimal extractMoney = userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, new Date(0),
+				now);
+		extractMoney = extractMoney.abs();
+		// 鑾峰彇缁存潈
+		typeList = new ArrayList<>();
+		typeList.add(UserMoneyDetailTypeEnum.weiQuan);
+		typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuan);
+		typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
+		typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
+		typeList.add(UserMoneyDetailTypeEnum.hongbaoDeduct);
+		BigDecimal weiqaunMoney = userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, new Date(0),
+				now);
+		weiqaunMoney = weiqaunMoney.abs();
+
+		BigDecimal balance = userInfoService.selectByPKey(uid).getMyHongBao();
+
+		BigDecimal compensateMoney = extractMapper.computeCompensateByUid(uid);
+		if (compensateMoney == null)
+			compensateMoney = new BigDecimal(0);
+
+		BigDecimal after = hongBaoMoney.subtract(extractMoney.add(weiqaunMoney).add(balance).add(compensateMoney));
+
+		if (after.compareTo(new BigDecimal("0")) != 0)
 			throw new ExtractException(2, "缁撶畻璧勯噾寮傚父");
 	}
 

--
Gitblit v1.8.0