From 0e9b6603d4ae9d11c1fbc90257ce816c5807b8ff Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 28 十月 2022 16:55:02 +0800 Subject: [PATCH] 批量添加结算消息 --- app/src/main/java/com/yeshi/makemoney/app/service/impl/money/ExtractServiceImpl.java | 166 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 134 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/yeshi/makemoney/app/service/impl/money/ExtractServiceImpl.java b/app/src/main/java/com/yeshi/makemoney/app/service/impl/money/ExtractServiceImpl.java index 4183d53..ab7f5ee 100644 --- a/app/src/main/java/com/yeshi/makemoney/app/service/impl/money/ExtractServiceImpl.java +++ b/app/src/main/java/com/yeshi/makemoney/app/service/impl/money/ExtractServiceImpl.java @@ -18,12 +18,15 @@ import com.yeshi.makemoney.app.exception.money.UserMoneyBalanceException; import com.yeshi.makemoney.app.service.inter.config.SystemConfigService; import com.yeshi.makemoney.app.service.inter.money.ExtractService; +import com.yeshi.makemoney.app.service.inter.money.UserExtractMoneyLimitService; import com.yeshi.makemoney.app.service.inter.money.UserMoneyRecordService; import com.yeshi.makemoney.app.service.inter.money.UserMoneyService; +import com.yeshi.makemoney.app.service.inter.msg.UserMsgNotifyService; import com.yeshi.makemoney.app.service.inter.user.UserInfoService; import com.yeshi.makemoney.app.service.query.money.ExtractQuery; import com.yeshi.makemoney.app.utils.Constant; import com.yeshi.makemoney.app.utils.factory.UserMoneyRecordFactory; +import com.yeshi.makemoney.app.utils.factory.msg.UserMsgFactory; import com.yeshi.makemoney.app.utils.mq.CMQManager; import com.yeshi.makemoney.app.utils.pay.AlipayUtil; import org.slf4j.Logger; @@ -39,6 +42,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; @@ -63,14 +67,20 @@ @Resource private UserMoneyRecordService userMoneyRecordService; + @Resource + private UserExtractMoneyLimitService userExtractMoneyLimitService; + + @Resource + private UserMsgNotifyService userMsgNotifyService; + @Override public List<Extract> list(ExtractQuery extractQuery, int page, int pageSize) { DaoQuery daoQuery = new DaoQuery(); - try { - BeanUtil.copyProperties(extractQuery, daoQuery); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } + daoQuery.uid = extractQuery.getUid(); + daoQuery.state = extractQuery.getState(); + daoQuery.minCreateTime = extractQuery.toStartTime(); + daoQuery.maxCreateTime = extractQuery.toEndTime(); + daoQuery.sortList = Arrays.asList(new String[]{"create_time desc"}); daoQuery.start = (page - 1) * pageSize; daoQuery.count = pageSize; return extractMapper.list(daoQuery); @@ -79,11 +89,10 @@ @Override public long count(ExtractQuery extractQuery) { DaoQuery daoQuery = new DaoQuery(); - try { - BeanUtil.copyProperties(extractQuery, daoQuery); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } + daoQuery.uid = extractQuery.getUid(); + daoQuery.state = extractQuery.getState(); + daoQuery.minCreateTime = extractQuery.toStartTime(); + daoQuery.maxCreateTime = extractQuery.toEndTime(); return extractMapper.count(daoQuery); } @@ -99,12 +108,34 @@ return extractMapper.count(daoQuery) < 1L; } - private ExtractConfig getExtractConfig(SystemEnum system) { + @Override + public ExtractConfig getExtractConfig(SystemEnum system) { String value = systemConfigService.getValueCache(system, SystemConfigKey.extractConfig); if (StringUtil.isNullOrEmpty(value)) { return null; } return new Gson().fromJson(value, ExtractConfig.class); + } + + @Override + public List<Extract> listNeedPassRecord(BigDecimal maxMoney, Date minCreateTime, int page, int pageSize) { + DaoQuery daoQuery = new DaoQuery(); + daoQuery.state = Extract.STATE_NOT_PROCESS; + daoQuery.minCreateTime = minCreateTime; + daoQuery.maxMoney = maxMoney; + daoQuery.sortList = Arrays.asList(new String[]{"create_time asc"}); + daoQuery.start = (page - 1) * pageSize; + daoQuery.count = pageSize; + return extractMapper.list(daoQuery); + } + + @Override + public long countNeedPassRecord(BigDecimal maxMoney, Date minCreateTime) { + DaoQuery daoQuery = new DaoQuery(); + daoQuery.state = Extract.STATE_NOT_PROCESS; + daoQuery.minCreateTime = minCreateTime; + daoQuery.maxMoney = maxMoney; + return extractMapper.count(daoQuery); } private void validateExtract(BigDecimal money, UserInfo user) throws ExtractException { @@ -113,15 +144,11 @@ throw new ExtractException(ExtractException.CODE_EXTRACT_CONFIG_ERROR, "鎻愮幇閰嶇疆閿欒"); } - if (isFirst(user.getId())) { - if (money.compareTo(config.getFirstMinMoney()) < 0) { - throw new ExtractException(ExtractException.CODE_MONEY_LIMIT, String.format("棣栨鎻愮幇鏈�浣庨噾棰濅负%s鍏�", config.getFirstMinMoney().toString())); - } - } else { - if (money.compareTo(config.getMinMoney()) < 0) { - throw new ExtractException(ExtractException.CODE_MONEY_LIMIT, String.format("鏈�浣庢彁鐜伴噾棰濅负%s鍏�", config.getMinMoney().toString())); - } + + if (money.compareTo(config.getMinMoney()) < 0) { + throw new ExtractException(ExtractException.CODE_MONEY_LIMIT, String.format("鏈�浣庢彁鐜伴噾棰濅负%s鍏�", config.getMinMoney().toString())); } + if (money.compareTo(config.getMaxMoney()) > 0) { throw new ExtractException(ExtractException.CODE_MONEY_LIMIT, String.format("鏈�楂樻彁鐜伴噾棰濅负%s鍏�", config.getMaxMoney().toString())); @@ -147,6 +174,44 @@ throw new ExtractException(ExtractException.CODE_MONEY_LIMIT, String.format("鍗曟棩绱鏈�楂樻彁鐜版鏁颁负%s娆�", config.getMaxNumPerDay().toString())); } + //灏忛噾棰濇彁鐜伴檺鍒� + if (money.compareTo(Constant.EXTRACT_LITTLE_MONEY_LIMIT) < 0) { + //鏄惁宸茬粡鐢ㄥ畬鏂扮敤鎴烽搴� + if (!canExtractLittleMoney(user.getId(), config.getNewerLittleMoneyNum(), new Date(currentTime))) { + throw new ExtractException(ExtractException.CODE_LITTLE_MONEY_LIMIT, "浠婃棩灏忎簬1鍏冩彁鐜版鏁板凡鐢ㄥ敖"); + } + } + + } + + @Override + public boolean canExtractLittleMoney(Long uid, int maxNewerCount, Date date) { + //鍒ゆ柇鏂颁汉 + long count = countByMaxMoney(uid, Constant.EXTRACT_LITTLE_MONEY_LIMIT, Arrays.asList(new Integer[]{Extract.STATE_NOT_PROCESS, Extract.STATE_PROCESSING, Extract.STATE_PASS}), null); + if (maxNewerCount > count) { + return true; + } + + //鍒ゆ柇婵�鍔卞垎閰� + int limit = userExtractMoneyLimitService.getLittleMoneyLimit(uid, date); + if (limit <= 0) { + return false; + } + count = countByMaxMoney(uid, Constant.EXTRACT_LITTLE_MONEY_LIMIT, Arrays.asList(new Integer[]{Extract.STATE_NOT_PROCESS, Extract.STATE_PROCESSING, Extract.STATE_PASS}), new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyyMMdd"), "yyyyMMdd"))); + if (count < limit) { + return true; + } + return false; + } + + @Override + public BigDecimal getExtractingMoney(Long uid) { + DaoQuery daoQuery = new DaoQuery(); + daoQuery.uid = uid; + daoQuery.state = Extract.STATE_NOT_PROCESS; + BigDecimal money = extractMapper.sumMoney(daoQuery); + + return money == null ? new BigDecimal(0) : money; } @@ -193,7 +258,7 @@ @Transactional(rollbackFor = Exception.class) @Override - public void passExtract(Long id, Long adminId) throws ExtractException { + public void passExtract(Long id, String adminId) throws ExtractException { Extract extract = extractMapper.selectByPrimaryKeyForUpdate(id); if (extract == null) { throw new ExtractException(ExtractException.CODE_NOT_EXIST, "鎻愮幇璁板綍涓嶅瓨鍦�"); @@ -217,15 +282,26 @@ if (extract.getType() == ExtractPayType.alipay) { transferByAlipay(extract, adminId); } else { - transferByWX(extract, adminId, systemConfigService.getValueCache(user.getSystem(), SystemConfigKey.wxAppId)); + String result = transferByWX(extract, adminId, systemConfigService.getValueCache(user.getSystem(), SystemConfigKey.wxAppId)); + Map<String, String> resultMap = WXUtil.parseXML(result); + if ("SUCCESS".equalsIgnoreCase(resultMap.get("return_code")) && "SUCCESS".equalsIgnoreCase(resultMap.get("result_code"))) { + ; + } else { + + String errCode = resultMap.get("err_code"); + String errMsg = resultMap.get("err_code_des"); + boolean noMoney = "NOTENOUGH".equalsIgnoreCase(errCode); + if(noMoney) { + throw new ExtractException(ExtractException.CODE_WX_PAY_ACCOUNT_NO_MONEY,"寰俊鏀粯璐︽埛浣欓涓嶈冻"); + } + } + } - - } @Transactional(rollbackFor = Exception.class) @Override - public void rejectExtract(Long id, Long adminId, String reason) throws ExtractException, UserMoneyBalanceException, ParamsException { + public void rejectExtract(Long id, String adminId, String reason) throws ExtractException, UserMoneyBalanceException, ParamsException { Extract extract = extractMapper.selectByPrimaryKeyForUpdate(id); if (extract == null) { throw new ExtractException(ExtractException.CODE_NOT_EXIST, "鎻愮幇璁板綍涓嶅瓨鍦�"); @@ -244,7 +320,12 @@ updateExtract.setState(Extract.STATE_REJECT); updateExtract.setReason(reason); extractMapper.updateByPrimaryKeySelective(updateExtract); - //TODO 娑堟伅 + //娣诲姞娑堟伅閫氱煡 + try { + userMsgNotifyService.notify(UserMsgFactory.createExtractFail(extract.getUser().getId(), extract.getMoney(), reason)); + } catch (Exception e) { + e.printStackTrace(); + } } @Override @@ -283,13 +364,23 @@ } } + @Override + public long countByMaxMoney(Long uid, BigDecimal money, List<Integer> stateList, Date minCreateTime) { + DaoQuery daoQuery = new DaoQuery(); + daoQuery.uid = uid; + daoQuery.maxMoney = money; + daoQuery.stateList = stateList; + daoQuery.minCreateTime = minCreateTime; + return extractMapper.count(daoQuery); + } + /** * 鎻愮幇鍒版敮浠樺疂 * * @param extract * @param adminId */ - private void transferByAlipay(Extract extract, Long adminId) { + private void transferByAlipay(Extract extract, String adminId) { //鑾峰彇鐢ㄦ埛鐨勭郴缁� UserInfo user = userInfoService.get(extract.getUser().getId()); String appName = user.getSystem().getName(); @@ -313,18 +404,20 @@ } } - private void transferByWX(Extract extract, Long adminId, String wxAPPId) { + private String transferByWX(Extract extract, String adminId, String wxAPPId) { //鑾峰彇鐢ㄦ埛鐨勭郴缁� UserInfo user = userInfoService.get(extract.getUser().getId()); String appName = user.getSystem().getName(); //鐞嗙敱 - String result = WXPayUtil.payToOpenId(wxAPPId, extract.getAccount(), Constant.wxTransferConfig.getMchId(), Constant.wxTransferConfig.getKey(), Constant.wxTransferConfig.getCertPwd(), this.getClass().getClassLoader().getResourceAsStream(Constant.wxTransferConfig.getCertPath()), "makemoney" + extract.getId(), extract.getMoney(), "鎻愮幇", extract.getIp()); + String result = WXPayUtil.payToOpenId(wxAPPId, extract.getAccount(), Constant.wxTransferConfig.getMchId(), Constant.wxTransferConfig.getKey(), Constant.wxTransferConfig.getCertPwd(), this.getClass().getClassLoader().getResourceAsStream(Constant.wxTransferConfig.getCertPath()), "makemoney" + extract.getId(), extract.getMoney(), String.format("鏉ヨ嚜%s鐨勬彁鐜�",appName), extract.getIp()); try { CMQManager.getInstance().addExtractResultMsg(new ExtractTransferResultMQMsg(extract.getId(), result, adminId)); logger.info("鎻愮幇:娣诲姞澶勭悊闃熷垪鎴愬姛-" + extract.getId()); } catch (Exception e) { logger.error("鎻愮幇:寰俊鎻愮幇CMQ寮傚父锛歿}", result + ",鎻愮幇淇℃伅" + GsonUtil.toJson(extract)); } + + return result; } @@ -360,7 +453,12 @@ userMoneyRecordService.update(update); } } - // TODO 閫氱煡杞处鎴愬姛 + //娣诲姞娑堟伅閫氱煡 + try { + userMsgNotifyService.notify(UserMsgFactory.createExtractSuccess(extract.getUser().getId(), extract.getMoney())); + } catch (Exception e) { + e.printStackTrace(); + } } @@ -370,7 +468,7 @@ if (noMoney) { Extract updateExtract = new Extract(); updateExtract.setId(extract.getId()); - updateExtract.setState(Extract.STATE_PROCESSING); + updateExtract.setState(Extract.STATE_NOT_PROCESS); updateExtract.setReason(msg); extractMapper.updateByPrimaryKeySelective(updateExtract); } else { @@ -388,8 +486,12 @@ } catch (Exception e) { e.printStackTrace(); } - // 鏂扮増鎻愮幇 - //TODO 閫氱煡杞处琚嫆缁� + //娣诲姞娑堟伅閫氱煡 + try { + userMsgNotifyService.notify(UserMsgFactory.createExtractFail(extract.getUser().getId(), extract.getMoney(), null)); + } catch (Exception e) { + e.printStackTrace(); + } } } -- Gitblit v1.8.0