diff --git a/src/main/java/au/com/royalpay/payment/manage/bdprize/core/impls/BDPrizeServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/bdprize/core/impls/BDPrizeServiceImpl.java index c52dac881..99217ffa0 100644 --- a/src/main/java/au/com/royalpay/payment/manage/bdprize/core/impls/BDPrizeServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/bdprize/core/impls/BDPrizeServiceImpl.java @@ -28,6 +28,8 @@ import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.joda.time.DateTime; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -79,6 +81,7 @@ public class BDPrizeServiceImpl implements BDPrizeService { private static BigDecimal percent = new BigDecimal(100); private static String[] channels = new String[]{"Wechat", "Alipay", "Bestpay", "jd", "AlipayOnline","hf"}; + private static Logger logger = LoggerFactory.getLogger(BDPrizeServiceImpl.class); @Override public void generateRecord(String month) { @@ -121,14 +124,16 @@ public class BDPrizeServiceImpl implements BDPrizeService { List trades = transactionMapper.listTransactionsForBDPrize(now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1, channel); List clientsWithBDAway = clientBDMapper.clientsWithBDAway(); List rateConfig = getRateConfig(); - BDPrizeCalculator calculator = new BDPrizeCalculatorDefaultImpl(trades, now.getTime()).clientBDMapper(clientBDMapper) + BDPrizeCalculator calculator = new BDPrizeCalculatorDefaultImpl(trades, now.getTime()).clientBDMapper(clientBDMapper).transactionMapper(transactionMapper) .clientsWithBDAwayDeterminor(new DefaultClientWithBDAwayDeterminor(clientsWithBDAway)).rateConfig(rateConfig); calculator.calculate(); - List report = calculator.getReport(); + List report = calculator.getReport(now.get(Calendar.YEAR),now.get(Calendar.MONTH) + 1); + logger.info("======calculator.report=========="+channel+"===="+report.toString()); for (JSONObject log : report) { log.put("record_id", record.getString("record_id")); log.put("channel", channel); log.remove("prize_log_id"); + logger.info("=========financialBDPrizeLogMapper.save======="+log.toString()); financialBDPrizeLogMapper.save(log); List details = (List) log.get("details"); for (JSONObject detail : details) { diff --git a/src/main/java/au/com/royalpay/payment/manage/bdprize/support/BDPrizeCalculator.java b/src/main/java/au/com/royalpay/payment/manage/bdprize/support/BDPrizeCalculator.java index 49e4365b6..049a5bedb 100644 --- a/src/main/java/au/com/royalpay/payment/manage/bdprize/support/BDPrizeCalculator.java +++ b/src/main/java/au/com/royalpay/payment/manage/bdprize/support/BDPrizeCalculator.java @@ -11,5 +11,5 @@ public interface BDPrizeCalculator { void calculate(); - List getReport(); + List getReport(int year,int month); } diff --git a/src/main/java/au/com/royalpay/payment/manage/bdprize/support/impls/BDPrizeCalculatorDefaultImpl.java b/src/main/java/au/com/royalpay/payment/manage/bdprize/support/impls/BDPrizeCalculatorDefaultImpl.java index 7107827b1..d2e234522 100644 --- a/src/main/java/au/com/royalpay/payment/manage/bdprize/support/impls/BDPrizeCalculatorDefaultImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/bdprize/support/impls/BDPrizeCalculatorDefaultImpl.java @@ -9,16 +9,20 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper; import com.alibaba.fastjson.JSONObject; import au.com.royalpay.payment.manage.bdprize.support.BDPrizeCalculator; import au.com.royalpay.payment.manage.mappers.system.ClientBDMapper; import au.com.royalpay.payment.tools.exceptions.ServerErrorException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Created by yixian on 2017-02-08. */ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator { + private static Logger logger = LoggerFactory.getLogger(BDPrizeCalculator.class); private final List tradeLogs; private final Date month; private ClientBDMapper clientBDMapper; @@ -27,6 +31,7 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator { private Map bdMap = new HashMap<>(); private Map>> rateConfigMap = new HashMap<>(); private Map bdTotalMap = new HashMap<>(); + private TransactionMapper transactionMapper; public BDPrizeCalculatorDefaultImpl(List tradeLogs, Date month) { this.tradeLogs = tradeLogs; @@ -38,6 +43,11 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator { return this; } + public BDPrizeCalculatorDefaultImpl transactionMapper(TransactionMapper transactionMapper) { + this.transactionMapper = transactionMapper; + return this; + } + public BDPrizeCalculatorDefaultImpl clientsWithBDAwayDeterminor(DefaultClientWithBDAwayDeterminor clientWithBDAwayDeterminor) { this.clientsWithBDAwayDeterminor = clientWithBDAwayDeterminor; return this; @@ -47,15 +57,15 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator { for (JSONObject rateCfgItem : rateConfig) { int level = rateCfgItem.getIntValue("bd_level"); int kpiRange = rateCfgItem.getIntValue("kpi_range"); - Map> rates = rateConfigMap.get(level); - if (rates == null) { - rates = new HashMap<>(); - rateConfigMap.put(level, rates); + Map> levelRates = rateConfigMap.get(level); + if (levelRates == null) { + levelRates = new HashMap<>(); + rateConfigMap.put(level, levelRates); } - List rate = rates.get(kpiRange); + List rate = levelRates.get(kpiRange); if (rate == null) { rate = new ArrayList<>(); - rates.put(kpiRange, rate); + levelRates.put(kpiRange, rate); } rate.add(rateCfgItem); } @@ -73,7 +83,7 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator { } @Override - public List getReport() { + public List getReport(int year,int month1) { List report = new ArrayList<>(); for (Map.Entry> resultItem : results.entrySet()) { JSONObject log = new JSONObject(); @@ -86,15 +96,8 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator { log.put("total_amount", 0); log.put("total_prize", 0); log.put("total_donation", 0); - BigDecimal totalAmount = log.getBigDecimal("total_amount"); + BigDecimal totalAmount = transactionMapper.TotalAmountForBDPrize(year,month1,bd.getString("bd_id")); List details = new ArrayList<>(); - for (Map.Entry detail : resultItem.getValue().entrySet()) { - JSONObject detailItem = detail.getValue(); - BigDecimal totalTransaction = detailItem.getBigDecimal("total_transaction"); - BigDecimal coefficient = detailItem.getBigDecimal("coefficient"); - BigDecimal realTransaction = totalTransaction.multiply(coefficient).setScale(2,BigDecimal.ROUND_DOWN); - totalAmount = totalAmount.add(realTransaction); - } for (Map.Entry detail : resultItem.getValue().entrySet()) { JSONObject detailItem = detail.getValue(); int clientId = detailItem.getIntValue("client_id"); @@ -102,6 +105,7 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator { BigDecimal totalTransaction = detailItem.getBigDecimal("total_transaction"); BigDecimal coefficient = detailItem.getBigDecimal("coefficient"); int prizeLevel = getKpiPrizeLevel(totalAmount,log.getBigDecimal("kpi_amount")); + logger.debug("-------->bd kpi level:"+bd.getString("bd_name")+"---level:"+prizeLevel+",kpi:"+log.getBigDecimal("kpi_amount")+",trans:"+totalAmount+",client_id:"+clientId); BigDecimal bdRate = getNewRate(bdLevel, prizeLevel, detailItem.getIntValue("client_source"), detailItem.getBigDecimal("rate_value")); BigDecimal prizeValue = totalTransaction.multiply(coefficient).multiply(bdRate).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN); BigDecimal donation = BigDecimal.ZERO; @@ -222,8 +226,8 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator { private BigDecimal getNewRate(int bdLevel, int kpiRange, int clientSource, BigDecimal clientRate) { BigDecimal prizeRate = BigDecimal.ZERO; - Map> rates = rateConfigMap.get(bdLevel); - List rate = rates.get(kpiRange); + Map> levelRates = rateConfigMap.get(bdLevel); + List rate = levelRates.get(kpiRange); for (JSONObject rateCfg : rate) { if (rateCfg.getBigDecimal("rate_from").compareTo(clientRate) <= 0 && rateCfg.getBigDecimal("rate_to").compareTo(clientRate) >= 0) { prizeRate= rateCfg.getBigDecimal("prize_rate"); diff --git a/src/main/java/au/com/royalpay/payment/manage/customers/web/EncourageMoneyController.java b/src/main/java/au/com/royalpay/payment/manage/customers/web/EncourageMoneyController.java index 8a753f4e4..39009ee7d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/customers/web/EncourageMoneyController.java +++ b/src/main/java/au/com/royalpay/payment/manage/customers/web/EncourageMoneyController.java @@ -32,10 +32,10 @@ public class EncourageMoneyController { public JSONObject takeEncourageMoney(@PathVariable String orderId, @ModelAttribute(CommonConsts.WECHATINFO) JSONObject wxUser, @ModelAttribute(CommonConsts.ALIUSER) JSONObject aliuser) { String user_id = ""; + logger.info("problem order id:"+orderId+"--wxUser:"+wxUser+"--aliuser:"+aliuser); if (wxUser == null) { user_id = aliuser.getString("user_id"); } else { - logger.info("====wxUser==" + wxUser.toJSONString()); user_id = wxUser.getString("openid"); } if (StringUtils.isEmpty(user_id)) { @@ -81,4 +81,13 @@ public class EncourageMoneyController { public ModelAndView merchantsPage() { return new ModelAndView("activity/encourage_money/merchants"); } + + + public static void main(String[] args) { + JSONObject asd = null; + + JSONObject qwe = null; + System.out.println(asd); + System.out.println(qwe); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/core/ManualService.java b/src/main/java/au/com/royalpay/payment/manage/dev/core/ManualService.java new file mode 100644 index 000000000..cc083f972 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/dev/core/ManualService.java @@ -0,0 +1,9 @@ +package au.com.royalpay.payment.manage.dev.core; + +/** + * @author kira + * @date 2018/8/2 + */ +public interface ManualService { + void clientPostpone(); +} diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/ManualServiceimpl.java b/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/ManualServiceimpl.java new file mode 100644 index 000000000..6218b5be9 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/ManualServiceimpl.java @@ -0,0 +1,95 @@ +package au.com.royalpay.payment.manage.dev.core.impl; + +import au.com.royalpay.payment.manage.dev.core.ManualService; +import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientRateMapper; +import au.com.royalpay.payment.manage.merchants.core.ClientModifySupport; +import au.com.royalpay.payment.manage.merchants.entity.impls.SwitchPermissionModify; +import au.com.royalpay.payment.manage.task.PostponeClientTask; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; + +import com.alibaba.fastjson.JSONObject; + +import org.apache.commons.lang3.time.DateFormatUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +/** + * @author kira + * @date 2018/8/2 + */ +@Service +public class ManualServiceimpl implements ManualService { + + Logger logger = LoggerFactory.getLogger(PostponeClientTask.class); + @Resource + private ClientRateMapper clientRateMapper; + @Resource + private ClientAccountMapper clientAccountMapper; + @Resource + private SynchronizedScheduler synchronizedScheduler; + @Resource + private ClientModifySupport clientModifySupport; + + @Override + public void clientPostpone() { + logger.info("start doing client postpone"); + synchronizedScheduler.executeProcess("manage_task:postPoneClient", 120_000, () -> { + Date now = new Date(); + Date tomorrow = DateUtils.addDays(now, 1); + Date yearTomorrow = DateUtils.addYears(tomorrow, 1); + String expireDate = DateFormatUtils.format(yearTomorrow, "yyyy-MM-dd"); + List expiryClient = clientRateMapper.getAllExpiry(now); + + if (CollectionUtils.isEmpty(expiryClient)) { + return; + } + Map expiryClients = new HashMap<>(); + expiryClient.forEach(p -> { + expiryClients.put(p.getInteger("client_id"), p); + }); + expiryClients.values().forEach(p -> { + int client_id = p.getIntValue("client_id"); + List adminAccounts = clientAccountMapper.listAdminAccounts(client_id); + List clientRates = clientRateMapper.maxChannelExpiryTime(client_id, null); + JSONObject wechatRate = clientRateMapper.latestChannelCleanDays("Wechat", p.getIntValue("client_id")); + int cleanDays = 1; + if (wechatRate.getInteger("clean_days") != null) { + cleanDays = wechatRate.getIntValue("clean_days"); + } else { + cleanDays = wechatRate.getIntValue("c_clean_days"); + } + int finalCleanDays = cleanDays; + clientRates.forEach(o -> { + JSONObject record = clientRateMapper.latestExpiryConfig(client_id, o.getString("rate_name")); + record.remove("client_rate_id"); + record.put("active_time", now); + record.put("manager_id", 0); + record.put("expiry_time", yearTomorrow); + record.put("create_time", now); + record.put("update_time", now); + record.put("clean_days", finalCleanDays); + record.put("manager_name", "System"); + record.put("remark", "费率到期系统自动延期1年"); + clientRateMapper.saveRate(record); + + }); + if(p.getBooleanValue("tax_in_surcharge")){ + clientModifySupport.processClientConfigModify(new SwitchPermissionModify(null,p.getString("client_moniker"),"tax_in_surcharge",false)); + } + }); + }); + logger.info("end doing client postpone"); + + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/web/ManualController.java b/src/main/java/au/com/royalpay/payment/manage/dev/web/ManualController.java new file mode 100644 index 000000000..32892a63f --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/dev/web/ManualController.java @@ -0,0 +1,26 @@ +package au.com.royalpay.payment.manage.dev.web; + +import au.com.royalpay.payment.manage.dev.core.ManualService; +import au.com.royalpay.payment.manage.permission.manager.ManagerMapping; +import au.com.royalpay.payment.tools.permission.enums.ManagerRole; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * Created by yixian on 2017-01-25. + */ +@RestController +@ManagerMapping(role = ManagerRole.DEVELOPER,value = "/dev/manual") +public class ManualController { + @Resource + private ManualService manualService; + + @RequestMapping(method = RequestMethod.GET,value = "/client/postpone") + public void clientPostpone(){ + manualService.clientPostpone(); + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java index be48b0efc..38eb75087 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java @@ -93,6 +93,8 @@ public interface TransactionMapper { List listTransactionsForBDPrize(@Param("year") int year, @Param("month") int month, @Param("channel") String channel); + BigDecimal TotalAmountForBDPrize(@Param("year") int year, @Param("month") int month, @Param("bd_id") String bd_id); + BigDecimal TotalAmountForBDLeaderPrize(@Param("year") int year, @Param("month") int month, @Param("bd_group") String bd_group); BigDecimal TotalAmountForSydneyGMPrize(@Param("year") int year, @Param("month") int month); diff --git a/src/main/java/au/com/royalpay/payment/manage/task/PostponeClientTask.java b/src/main/java/au/com/royalpay/payment/manage/task/PostponeClientTask.java index 34f765665..36365eb9e 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/PostponeClientTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/PostponeClientTask.java @@ -22,6 +22,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.util.Date; import java.util.HashMap; @@ -111,6 +112,9 @@ public class PostponeClientTask { JSONObject client = clientManager.getClientInfo(account.getIntValue("client_id")); try { + if(StringUtils.isEmpty(account.getString("wechat_openid"))){ + return; + } MpWechatApi api = mpWechatApiProvider.getApiFromOpenId(account.getString("wechat_openid")); if (api != null) { String templateId = api.getTemplateId("client-postpone"); diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml index c6911c549..4b4b0063e 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml @@ -502,23 +502,32 @@ ORDER BY trade_date ASC, o.client_id ASC + +