From 65aaf1c05bd06cefa82ebc40cc3e01cf4ac233c0 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期六, 27 七月 2024 13:52:08 +0800 Subject: [PATCH] 代理新功能完善 --- src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java | 198 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 179 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java b/src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java index 2ccc418..7ef1ea8 100644 --- a/src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java +++ b/src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java @@ -1,18 +1,29 @@ package com.taoke.autopay.service.impl; import com.taoke.autopay.dao.KeyOrderMapper; -import com.taoke.autopay.entity.KeyOrder; -import com.taoke.autopay.entity.OrderDistributeCountInfo; +import com.taoke.autopay.dao.WxUserSettingsMapper; +import com.taoke.autopay.dto.DYOrderDto; +import com.taoke.autopay.entity.*; import com.taoke.autopay.exception.KeyOrderException; +import com.taoke.autopay.exception.KeyVerifyException; +import com.taoke.autopay.exception.WxOrderCountException; import com.taoke.autopay.factory.OrderFactory; import com.taoke.autopay.service.KeyOrderService; +import com.taoke.autopay.service.SystemConfigService; +import com.taoke.autopay.service.WxUserOrderCountService; +import com.taoke.autopay.service.WxUserSettingService; +import com.taoke.autopay.utils.*; +import com.taoke.autopay.utils.order.DYOrderApi; +import com.taoke.autopay.vo.SubmitKeyInfo; +import net.sf.json.JSONArray; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.Comparator; -import java.util.Date; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author hxh @@ -26,26 +37,47 @@ @Resource private KeyOrderMapper keyOrderMapper; + @Resource + private WxUserSettingService wxUserSettingService; + + @Resource + private WxUserOrderCountService wxUserOrderCountService; + + @Resource + private SystemConfigService systemConfigService; + @Override public KeyOrder selectById(String id) { return keyOrderMapper.selectById(id); } + @Transactional(rollbackFor = Exception.class) @Override - public KeyOrder addKeyOrder(String key) throws KeyOrderException { - String id = OrderFactory.createId(key); - KeyOrder order = keyOrderMapper.selectById(id); - if(order!=null){ - throw new KeyOrderException("璇峰嬁閲嶅鎻愪氦鍙d护"); + public KeyOrder addKeyOrder(SubmitKeyInfo keyInfo, Long uid, String day) throws KeyOrderException, WxOrderCountException { + // 鍒ゆ柇鎻愪氦娆℃暟鏄惁杩囬噺 + if (uid != null) { + WxUserSettings settings = wxUserSettingService.getUserSettings(uid); + wxUserOrderCountService.addOrderCount(uid, OrderCountTypeEnum.SUBMIT_TOKEN_COUNT, day, 1, settings.getTotalOrderCountPerDay()); } - order =new KeyOrder(); + String id = OrderFactory.createId(keyInfo.getKey()); + KeyOrder order = keyOrderMapper.selectById(id); + if (order != null) { + throw new KeyOrderException("璇峰嬁閲嶅鎻愪氦鍙d护"); + } + order = new KeyOrder(); order.setId(id); - order.setKey(key); + order.setKey(keyInfo.getKey()); + if(!StringUtil.isNullOrEmpty(keyInfo.getMoney())){ + order.setOrderMoney(new BigDecimal(keyInfo.getMoney())); + } + order.setUid(uid); order.setState(KeyOrder.STATE_NOT_PROCESS); order.setStateDesc("灏氭湭澶勭悊"); order.setCreateTime(new Date()); keyOrderMapper.insertSelective(order); + + return order; } @@ -67,12 +99,35 @@ @Transactional(rollbackFor = Exception.class) @Override - public void setOrderInfo(String id,String orderNo, int orderState) throws KeyOrderException{ + public void paySuccess(String id, String stateDesc,String day) throws WxOrderCountException { + KeyOrder old = keyOrderMapper.selectByPrimaryKeyForUpdate(id); + if(old==null){ + return; + } + if(old.getState() == KeyOrder.STATE_PAY){ + return; + } + if(old.getUid()!=null) { + wxUserOrderCountService.addOrderCount(old.getUid(),OrderCountTypeEnum.DY_ORDER_PAY,day,1,null); + } + KeyOrder orderUpdate = new KeyOrder(); + orderUpdate.setId(id); + orderUpdate.setState(KeyOrder.STATE_PAY); + orderUpdate.setStateDesc(stateDesc); + if(old.getPayTime()==null){ + orderUpdate.setPayTime(new Date()); + } + update(orderUpdate); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void setOrderInfo(String id, String orderNo, int orderState) throws KeyOrderException { KeyOrder old = keyOrderMapper.selectByPrimaryKeyForUpdate(id); if (old == null) { - throw new KeyOrderException("鍙d护涓嶅瓨鍦�"); + throw new KeyOrderException("鍙d护涓嶅瓨鍦�"); } - KeyOrder keyOrder=new KeyOrder(); + KeyOrder keyOrder = new KeyOrder(); keyOrder.setId(id); // 榛樿1鎶栭煶 keyOrder.setOrderType(1); @@ -96,17 +151,122 @@ @Override public Long getCanDistributeUid() { - List<OrderDistributeCountInfo> list = keyOrderMapper.listDistributeUids(); - if(list==null||list.size()==0){ + // 鏈�杩�1灏忔椂鏈夋椿璺�,涓斾笉绠�12浠ヤ笂鏈墽琛岀殑鏁版嵁 + List<OrderDistributeCountInfo> list = keyOrderMapper.listDistributeUids(new Date(System.currentTimeMillis() - 1000 * 60 * 60L),new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 12L)); + if (list == null || list.size() == 0) { return null; } - Comparator<OrderDistributeCountInfo> cm = (OrderDistributeCountInfo o1, OrderDistributeCountInfo o2)-> o1.getCount()-o2.getCount(); + // count灏忎簬2鐩存帴瑙嗕负0 + for (OrderDistributeCountInfo info : list) { + if (info.getCount() < 2) { + info.setCount(0); + } + } + + Comparator<OrderDistributeCountInfo> cm = new Comparator<OrderDistributeCountInfo>() { + @Override + public int compare(OrderDistributeCountInfo o1, OrderDistributeCountInfo o2) { + return o1.getCount() - o2.getCount(); + } + }; list.sort(cm); + if (list.get(0).getCount() == 0) { + // 澶勭悊澶у鏁拌澶囬兘娌℃湁鍒嗛厤鐨勬儏鍐� + // 灏嗕负0鐨勬暟鎹殢鏈哄垎閰� + List<OrderDistributeCountInfo> tempList = new ArrayList<>(); + for (OrderDistributeCountInfo info : list) { + if (info.getCount() == 0) { + tempList.add(info); + } + } + int index = new Random().nextInt(tempList.size()); + if (index < 0) { + index = 0; + } + if (index >= tempList.size()) { + index = tempList.size() - 1; + } + return tempList.get(index).getUid(); + } return list.get(0).getUid(); } @Override public List<KeyOrder> listNotDistributed(int page, int pageSize) { - return keyOrderMapper.listNotDistributed((page-1)*pageSize,pageSize); + return keyOrderMapper.listNotDistributed((page - 1) * pageSize, pageSize); + } + + @Override + public void deleteAll(Date maxCreateTime) { + keyOrderMapper.deleteAll(maxCreateTime); + } + + @Override + public DYOrderDto verifyKey(String orderNoDesc, String orderStatus, String money) throws KeyVerifyException { + int orderType= Constant.ORDER_TYPE_UNKNOWN; + if(orderNoDesc.contains("鎶栭煶")){ + orderType = Constant.ORDER_TYPE_DY; + }else if(orderNoDesc.contains("蹇墜")){ + orderType = Constant.ORDER_TYPE_KS; + } + + String orderNo= ""; + // 鍖归厤杩炵画鐨勬暟瀛� + Pattern pattern = Pattern.compile("\\d+"); + Matcher matcher = pattern.matcher(orderNoDesc); + while (matcher.find()) { + // 鑾峰彇鍖归厤鍒扮殑鏁板瓧瀛楃涓� + String number = matcher.group(); + if (number.length() > 10) { + orderNo = number; + break; + } + } + + if(orderType==Constant.ORDER_TYPE_UNKNOWN){ + throw new KeyVerifyException(KeyVerifyException.CODE_ORDER_TYPE_ERROR, "鏈畾涔夌殑璁㈠崟绫诲瀷"); + } + + if (!StringUtil.isNullOrEmpty(orderStatus)&&!orderStatus.contains("鏈敮浠�")) { + throw new KeyVerifyException(KeyVerifyException.CODE_ORDER_STATUS_ERROR, "璁㈠崟鐘舵�侊細"+orderStatus); + } + DYOrderDto dyOrderDto=null; + // 鍏堝尮閰嶈鍗� + try { + if(orderType == Constant.ORDER_TYPE_DY&&!StringUtil.isNullOrEmpty(orderNo)){ + dyOrderDto = DYOrderApi.getOrderDetail(orderNo); + if(dyOrderDto!=null){ + // 楠岃瘉閲戦 + if( dyOrderDto.getPay_amount().intValue()!= new BigDecimal(money).multiply(new BigDecimal(100)).setScale(0).intValue()){ + throw new KeyVerifyException(KeyVerifyException.CODE_ORDER_MONEY_NOT_MATCH ,String.format("鏀粯閲戦涓庤鍗曢噾棰濅笉涓�鑷达細%s-%d",money,dyOrderDto.getPay_amount() )); + } + } + }else{ + throw new KeyOrderException("鎶栭煶璁㈠崟鑾峰彇澶辫触"); + } + }catch(KeyOrderException e){ + // 鎶栭煶璁㈠崟鏈獙璇侀�氳繃锛屽尮閰嶉噾棰� + // 楠岃瘉鎻愪氦鐨勯噾棰濇槸鍚︽纭� + String moneyStr = systemConfigService.getValueCache(SystemConfigKeyEnum.PAY_MONEY_LIST); + if(StringUtil.isNullOrEmpty(moneyStr)){ + throw new KeyVerifyException(KeyVerifyException.CODE_KEY_MONEY_NOT_MATCH ,"灏氭湭閰嶇疆閲戦"); + } + JSONArray array=JSONArray.fromObject(moneyStr); + Set<String> moneySet=new HashSet<>(); + for(int i=0;i<array.size();i++){ + moneySet.add(MoneyUtil.getMoneyStr(new BigDecimal(array.optString(i)))); + } + // 鍖归厤閲戦 + if(!moneySet.contains(money)){ + throw new KeyVerifyException(KeyVerifyException.CODE_KEY_MONEY_NOT_MATCH, String.format("閲戦鏈湪绯荤粺璁剧疆涓細%s",money)); + } + } + + return dyOrderDto; + } + + @Override + public void removeDistributedClient(String id) { + keyOrderMapper.removeDistributedClient(id); } } -- Gitblit v1.8.0