diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java index ac99a87ba..e60b3dd93 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java @@ -109,4 +109,6 @@ public interface RetailAppService { JSONObject getAd(JSONObject device); JSONObject getAdDetail(JSONObject device, String article_id); + + JSONObject getClientRateExpire(int client_id); } diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java index dd24c77db..8cf9af7f6 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java @@ -16,6 +16,7 @@ import au.com.royalpay.payment.manage.mappers.payment.OrderMapper; import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper; import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper; import au.com.royalpay.payment.manage.mappers.system.ClientDeviceTokenMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientRateMapper; import au.com.royalpay.payment.manage.mappers.system.ClientSettleDelayConfMapper; import au.com.royalpay.payment.manage.mappers.system.CustomerMapper; import au.com.royalpay.payment.manage.mappers.system.CustomerRelationAlipayMapper; @@ -38,6 +39,7 @@ import au.com.royalpay.payment.tools.device.support.DeviceRegister; import au.com.royalpay.payment.tools.env.PlatformEnvironment; import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.exceptions.ForbiddenException; +import au.com.royalpay.payment.tools.exceptions.NotFoundException; import au.com.royalpay.payment.tools.exceptions.ServerErrorException; import au.com.royalpay.payment.tools.locale.LocaleSupport; import au.com.royalpay.payment.tools.merchants.core.MerchantInfoProvider; @@ -62,6 +64,7 @@ import org.slf4j.LoggerFactory; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.text.DateFormat; @@ -136,6 +139,8 @@ public class RetailAppServiceImp implements RetailAppService { private ClientDeviceTokenMapper clientDeviceTokenMapper; @Resource private JpushMessageHelper jpushMessageHelper; + @Resource + private ClientRateMapper clientRateMapper; private Map senderMap = new HashMap<>(); @@ -175,8 +180,8 @@ public class RetailAppServiceImp implements RetailAppService { setAllClientIds(params, client_id); params.put("client_id", client_id); JSONObject res = transactionAnalysisMapper.getClientTransaction(params); -// res.put("trade_amount", transactionAnalysisMapper.analysisTotalAmount(params)); -// res.put("trade_count", transactionAnalysisMapper.analysisTotalCount(params)); + // res.put("trade_amount", transactionAnalysisMapper.analysisTotalAmount(params)); + // res.put("trade_count", transactionAnalysisMapper.analysisTotalCount(params)); // res.put("refund_amount", transactionAnalysisMapper.analysisRefundAmount(params)); res.put("not_settled", transactionAnalysisMapper.analysisNotSettled(params)); res.put("old_customers", transactionAnalysisMapper.countOldCustomers(params)); @@ -202,8 +207,8 @@ public class RetailAppServiceImp implements RetailAppService { params.put("client_id", client_id); JSONObject res = transactionAnalysisMapper.getClientTransaction(params); -// res.put("trade_amount", transactionAnalysisMapper.analysisTotalAmount(params)); -// res.put("trade_count", transactionAnalysisMapper.analysisTotalCount(params)); + // res.put("trade_amount", transactionAnalysisMapper.analysisTotalAmount(params)); + // res.put("trade_count", transactionAnalysisMapper.analysisTotalCount(params)); res.put("not_settled", transactionAnalysisMapper.analysisNotSettled(params)); return res; } @@ -629,7 +634,7 @@ public class RetailAppServiceImp implements RetailAppService { public void sendNoticeMessage(final NoticeInfo notice, final String[] client_monikers) { for (String clientMoniker : client_monikers) { JSONObject client = clientManager.getClientInfoByMoniker(clientMoniker); - if(client==null){ + if (client == null) { continue; } sendingAppleMsgPool.execute(() -> { @@ -1035,12 +1040,12 @@ public class RetailAppServiceImp implements RetailAppService { Boolean isUpdate = PlatformEnvironment.getEnv().isAppUpdate(clientType); String updateContent = PlatformEnvironment.getEnv().getAppUpdateContent(clientType); int update_type = 0;// 0:不更新 1:更新 2:强制更新 - String versionInt = version.replace(".",""); - String newAppVersionInt = newAppVersion.replace(".",""); - if (Integer.valueOf(versionInt) rateInfo = clientRateMapper.minExpiryTime(client_id, null); + JSONObject result = new JSONObject(); + result.put("rate_expire", false); + result.put("rate_waring", false); + if (CollectionUtils.isEmpty(rateInfo)) { + return result; + } + Date now = new Date(); + rateInfo.forEach((p)->{ + if (now.compareTo(p.getDate("expiry_time")) > -1) { + result.put("rate_expire", true); + } + if (DateUtils.addDays(now, 10).compareTo(p.getDate("expiry_time")) > -1) { + result.put("rate_waring", true); + } + }); + return result; + } + private static boolean mathchLetterorNum(String str) { String regex = "[A-Za-z0-9]{8}"; return str.matches(regex); diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java index 368ed4069..c67a61bfe 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java @@ -1,9 +1,28 @@ package au.com.royalpay.payment.manage.appclient.web; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import org.springframework.validation.Errors; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + import au.com.royalpay.payment.core.exceptions.ParamInvalidException; import au.com.royalpay.payment.manage.appclient.beans.AppClientBean; import au.com.royalpay.payment.manage.appclient.beans.AppQueryBean; import au.com.royalpay.payment.manage.appclient.core.RetailAppService; +import au.com.royalpay.payment.manage.apps.core.AppFileService; import au.com.royalpay.payment.manage.bill.bean.NewBillBean; import au.com.royalpay.payment.manage.bill.bean.QueryBillBean; import au.com.royalpay.payment.manage.bill.bean.QueryBillOrderBean; @@ -16,28 +35,10 @@ import au.com.royalpay.payment.tools.device.advise.AppClientController; import au.com.royalpay.payment.tools.exceptions.ForbiddenException; import au.com.royalpay.payment.tools.http.HttpUtils; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; - -import org.springframework.validation.Errors; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; - -import java.math.BigDecimal; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.validation.Valid; - /** * Created by yishuqian on 28/03/2017. */ -@AppClientController + @AppClientController @RequestMapping("/api/v1.0/retail/app") public class RetailAppController { @Resource @@ -48,6 +49,8 @@ public class RetailAppController { private BillOrderService billOrderService; @Resource private BillService billService; + @Resource + private AppFileService appFileService; @RequestMapping(value = "/token", method = RequestMethod.PUT) public void updateDevToken(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestBody JSONObject token) { @@ -59,7 +62,6 @@ public class RetailAppController { return retailAppService.listSubClients(device); } - @RequestMapping(value = "/common", method = RequestMethod.GET) public JSONObject getTransactionCommonData(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) { return retailAppService.getTransactionCommonData(device, appQueryBean); @@ -102,20 +104,21 @@ public class RetailAppController { return retailAppService.getClientSettlementLog(device, appQueryBean); } - @RequestMapping("/transaction_log/{clearing_detail_id}") - public JSONObject getTransactionLogByClearingDetailId(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable int clearing_detail_id, @RequestParam(required = false) String timezone) { + public JSONObject getTransactionLogByClearingDetailId(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable int clearing_detail_id, + @RequestParam(required = false) String timezone) { return retailAppService.getTransactionLogsByClearingDetailId(device, clearing_detail_id, timezone); } - /*消息模块begin*/ + /* 消息模块begin */ @RequestMapping(value = "/notice", method = RequestMethod.GET) public JSONObject listNotices(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestParam Map params) { return retailAppService.listNotices(device, (JSONObject) JSON.toJSON(params)); } @RequestMapping(value = "/notice/{noticeId}", method = RequestMethod.PUT) - public void updateNoticePartnerHasRead(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable String noticeId, @RequestBody JSONObject account_param) { + public void updateNoticePartnerHasRead(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable String noticeId, + @RequestBody JSONObject account_param) { if (!device.getString("account_id").equals(account_param.getString("account_id"))) { throw new ForbiddenException("You have no permission"); } @@ -126,12 +129,12 @@ public class RetailAppController { public JSONObject getNoticeId(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable String noticeId) { return retailAppService.getNoticeDetailById(device, noticeId); } - /*消息模块end*/ - + /* 消息模块end */ - /*我的页面begin*/ + /* 我的页面begin */ @RequestMapping(value = "/partner_password/{account_id}", method = RequestMethod.PUT) - public void changePassword(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable String account_id, @RequestBody @Valid ChangePwdBean change, Errors errors) { + public void changePassword(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable String account_id, + @RequestBody @Valid ChangePwdBean change, Errors errors) { HttpUtils.handleValidErrors(errors); retailAppService.changeAccountPassword(device, change, account_id); } @@ -155,12 +158,12 @@ public class RetailAppController { public void signOut(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { retailAppService.sign_out(device); } - /*我的页面end*/ + /* 我的页面end */ - /*活动页面 begin*/ + /* 活动页面 begin */ @RequestMapping(value = "/activities", method = RequestMethod.GET) public JSONObject getActivities(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestParam(defaultValue = "activity_page") String type, - @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int limit) { + @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int limit) { return retailAppService.getActivities(device, type, page, limit); } @@ -174,7 +177,7 @@ public class RetailAppController { return retailAppService.checkT1Client(device); } - /*活动页面 end*/ + /* 活动页面 end */ /** * 获取最新版本 @@ -191,17 +194,19 @@ public class RetailAppController { public JSONObject getClientInfo(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { return retailAppService.getClientInfo(device); } + @RequestMapping(value = "/client/check", method = RequestMethod.GET) + public JSONObject getCheckClientInfo(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { + return retailAppService.getClientRateExpire(device.getIntValue("client_id")); + } @RequestMapping(value = "/client", method = RequestMethod.PUT) public void updateClient(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestBody AppClientBean appClientBean) { retailAppService.updateClient(device, appClientBean); } - @RequestMapping(value = "/daily_transactions/date/{dateStr}", method = RequestMethod.GET) public JSONObject listDailyTransactions(@PathVariable String dateStr, @RequestParam(defaultValue = "Australia/Melbourne") String timezone, - @RequestParam(defaultValue = "false") boolean thisdevice, - @ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { + @RequestParam(defaultValue = "false") boolean thisdevice, @ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { return retailAppService.listDailyTransactions(dateStr, timezone, thisdevice, device); } @@ -251,7 +256,8 @@ public class RetailAppController { } @RequestMapping(value = "/cash_back/clean_info", method = RequestMethod.GET) - public JSONObject getCashbackCleanInfo(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestParam(value = "client_id", required = false) String client_id) { + public JSONObject getCashbackCleanInfo(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, + @RequestParam(value = "client_id", required = false) String client_id) { if (client_id == null) { client_id = device.getString("client_id"); } @@ -263,11 +269,11 @@ public class RetailAppController { signInStatusManager.clientQRCodeAppSignIn(device, codeId); } - - /*优惠券Begin*/ + /* 优惠券Begin */ @RequestMapping(value = "/coupon/used", method = RequestMethod.GET) - public JSONObject getCoupons(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int limit) { + public JSONObject getCoupons(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestParam(value = "page", defaultValue = "1") int page, + @RequestParam(value = "limit", defaultValue = "10") int limit) { return retailAppService.getCoupons(device, page, limit); } @@ -280,8 +286,7 @@ public class RetailAppController { public void useCoupon(@PathVariable String coupon_log_id, @ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { retailAppService.useCoupon(device, coupon_log_id); } - /*优惠券End*/ - + /* 优惠券End */ /** * 广告位 @@ -296,30 +301,43 @@ public class RetailAppController { return retailAppService.getAdDetail(device, article_id); } - - - @RequestMapping(value = "/bills/{bill_id}",method = RequestMethod.GET) - public JSONObject getBill(@PathVariable("bill_id")String bill_id,@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device){ - return billService.getBillDetail(bill_id,device.getIntValue("client_id")); + @RequestMapping(value = "/bills/{bill_id}", method = RequestMethod.GET) + public JSONObject getBill(@PathVariable("bill_id") String bill_id, @ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { + return billService.getBillDetail(bill_id, device.getIntValue("client_id")); } - @RequestMapping(value = "/bills/list",method = RequestMethod.GET) - public JSONObject getBills(QueryBillBean queryBillBean,@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device){ - return billService.queryBills(device.getIntValue("client_id"),queryBillBean); + + @RequestMapping(value = "/bills/list", method = RequestMethod.GET) + public JSONObject getBills(QueryBillBean queryBillBean, @ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { + return billService.queryBills(device.getIntValue("client_id"), queryBillBean); } - @RequestMapping(value = "/bills",method = RequestMethod.PUT) - public JSONObject addBill(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device,@RequestBody NewBillBean newBillBean){ - JSONObject result = billService.save(device.getIntValue("client_id"),newBillBean); + + @RequestMapping(value = "/bills", method = RequestMethod.PUT) + public JSONObject addBill(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestBody NewBillBean newBillBean) { + JSONObject result = billService.save(device.getIntValue("client_id"), newBillBean); result.remove("bill"); return result; } - @RequestMapping(value = "/bills/{bill_id}/close",method = RequestMethod.POST) - public void closeBill(@PathVariable("bill_id")String bill_id,@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device){ - billService.updateBillStatus(bill_id,"2",device.getIntValue("client_id")); + + @RequestMapping(value = "/bills/{bill_id}/close", method = RequestMethod.POST) + public void closeBill(@PathVariable("bill_id") String bill_id, @ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { + billService.updateBillStatus(bill_id, "2", device.getIntValue("client_id")); } - @RequestMapping(value = "/bills/orders/{bill_id}",method = RequestMethod.GET) - public JSONObject getBillOrders(@PathVariable("bill_id")String bill_id, QueryBillOrderBean queryBillOrderBean,@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device){ - JSONObject result =billOrderService.query(bill_id,device.getIntValue("client_id"),queryBillOrderBean); - result.put("analysis",billOrderService.analysis(bill_id,device.getIntValue("client_id"),queryBillOrderBean)); + + @RequestMapping(value = "/bills/orders/{bill_id}", method = RequestMethod.GET) + public JSONObject getBillOrders(@PathVariable("bill_id") String bill_id, QueryBillOrderBean queryBillOrderBean, + @ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { + JSONObject result = billOrderService.query(bill_id, device.getIntValue("client_id"), queryBillOrderBean); + result.put("analysis", billOrderService.analysis(bill_id, device.getIntValue("client_id"), queryBillOrderBean)); return result; } + + @RequestMapping(value = "/file/agree", method = RequestMethod.PUT) + public JSONObject generateSourceAgreeFile(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { + return appFileService.getOrGenerateSourceAgreement(device.getIntValue("client_id")); + } + + @RequestMapping(value = "/file/agree/confirm", method = RequestMethod.POST) + public void confirmSourceAgreeFile(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) { + appFileService.confirmSourceAgreement(device.getIntValue("client_id")); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/apps/core/AppFileService.java b/src/main/java/au/com/royalpay/payment/manage/apps/core/AppFileService.java new file mode 100644 index 000000000..8b3da4594 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/apps/core/AppFileService.java @@ -0,0 +1,10 @@ +package au.com.royalpay.payment.manage.apps.core; + +import com.alibaba.fastjson.JSONObject; + +public interface AppFileService { + + JSONObject getOrGenerateSourceAgreement(int client_id); + + void confirmSourceAgreement(int client_id); +} diff --git a/src/main/java/au/com/royalpay/payment/manage/apps/core/impls/AppFileServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/apps/core/impls/AppFileServiceImpl.java new file mode 100644 index 000000000..b893f6b72 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/apps/core/impls/AppFileServiceImpl.java @@ -0,0 +1,75 @@ +package au.com.royalpay.payment.manage.apps.core.impls; + +import au.com.royalpay.payment.manage.apps.core.AppFileService; +import au.com.royalpay.payment.manage.mappers.system.ClientFilesMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientsContractMapper; +import au.com.royalpay.payment.manage.merchants.core.ClientManager; +import au.com.royalpay.payment.tools.exceptions.BadRequestException; + +import com.alibaba.fastjson.JSONObject; + +import org.apache.commons.lang3.time.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +@Service +public class AppFileServiceImpl implements AppFileService { + + Logger logger = LoggerFactory.getLogger(AppFileServiceImpl.class); + @Resource + private ClientFilesMapper clientFilesMapper; + @Resource + private ClientManager clientManager; + @Resource + private ClientsContractMapper clientsContractMapper; + + @Override + @Transactional + public JSONObject getOrGenerateSourceAgreement(int client_id) { + JSONObject client = clientManager.getClientInfo(client_id); + JSONObject contract = clientsContractMapper.findByClientId(client_id); + List files = clientFilesMapper.findFileByClientAndType(client_id, "source_agree_file"); + Date now = new Date(); + if (contract == null || now.compareTo(contract.getDate("expiry_date")) > 0) { + try { + clientManager.getAggregateAgreeFile(client.getString("client_moniker"), null); + } catch (Exception e) { + logger.info("App generate PDF failed"); + } + files = clientFilesMapper.findFileByClientAndType(client_id, "source_agree_file"); + saveContract(client_id, now); + return files.get(0); + } else { + return files.get(0); + } + + } + + private void saveContract(int client_id, Date now) { + JSONObject newContract = new JSONObject(); + newContract.put("create_time", now); + newContract.put("expiry_date", DateUtils.addYears(now, 1)); + newContract.put("sign_channel", "App"); + newContract.put("client_id", client_id); + newContract.put("has_sign", false); + clientsContractMapper.save(newContract); + } + + @Override + public void confirmSourceAgreement(int client_id) { + JSONObject file = clientsContractMapper.findByClientId(client_id); + if (file == null) { + throw new BadRequestException("generate contract first"); + } + file.put("has_sign", 1); + clientsContractMapper.update(file); + } + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientFilesMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientFilesMapper.java index f79d2dfed..bf626bc3b 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientFilesMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientFilesMapper.java @@ -25,6 +25,8 @@ public interface ClientFilesMapper { @AutoSql(type = SqlType.SELECT) JSONObject findFileById(@Param("file_id") String file_id); - @AutoSql(type = SqlType.SELECT) - JSONObject findFileByClientAndType(@Param("client_id") int client_id, @Param("file_name") String file_name); + List findFileByClientAndType(@Param("client_id") int client_id, @Param("file_name") String file_name); + + void confirmAgreeFile(@Param("client_id") int client_id); + } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientRateMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientRateMapper.java index 0f3021bf5..321fd8a37 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientRateMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientRateMapper.java @@ -36,4 +36,6 @@ public interface ClientRateMapper { List listClientRatesForSaving(@Param("client_id") int clientId, @Param("active_time") Date activeTime, @Param("expiry_time") Date expiryTime, @Param("rate_value") Double rateValue, @Param("clean_days") Integer cleanDays, @Param("rate_name") String rateName); + + List minExpiryTime(@Param("client_id")int client_id,@Param("rate_name") String rate_name); } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientsContractMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientsContractMapper.java new file mode 100644 index 000000000..043079965 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientsContractMapper.java @@ -0,0 +1,26 @@ +package au.com.royalpay.payment.manage.mappers.system; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.alibaba.fastjson.JSONObject; + +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; + +/** + * Created by yishuqian on 06/03/2017. + */ +@AutoMapper(tablename = "sys_clients_contract", pkName = "id") +public interface ClientsContractMapper { + @AutoSql(type = SqlType.INSERT) + void save(JSONObject partner); + + @AutoSql(type = SqlType.UPDATE) + void update(JSONObject partner); + + JSONObject findByClientId(@Param("client_id") int clientId); + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java index cc679bfbb..5c05476b4 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java @@ -1,24 +1,32 @@ package au.com.royalpay.payment.manage.merchants.core; -import au.com.royalpay.payment.channels.wechat.runtime.beans.SubMerchantInfo; import au.com.royalpay.payment.core.exceptions.EmailException; import au.com.royalpay.payment.manage.appclient.beans.AppClientBean; -import au.com.royalpay.payment.manage.merchants.beans.*; +import au.com.royalpay.payment.manage.merchants.beans.BankAccountInfo; +import au.com.royalpay.payment.manage.merchants.beans.ClientAuthFilesInfo; +import au.com.royalpay.payment.manage.merchants.beans.ClientRateConfig; +import au.com.royalpay.payment.manage.merchants.beans.ClientRegisterInfo; +import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean; +import au.com.royalpay.payment.manage.merchants.beans.PartnerQuery; +import au.com.royalpay.payment.manage.merchants.beans.SubMerchantIdApply; import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery; import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig; import au.com.royalpay.payment.tools.merchants.beans.UpdateSurchargeDTO; + import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; + import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.math.BigDecimal; import java.util.List; +import javax.servlet.http.HttpServletResponse; + /** * Created by yixian on 2016-06-25. */ diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java index 0a314423a..2b796fcb6 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java @@ -14,8 +14,28 @@ import au.com.royalpay.payment.manage.appclient.beans.AppClientBean; import au.com.royalpay.payment.manage.mappers.financial.FinancialBDConfigMapper; import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper; import au.com.royalpay.payment.manage.mappers.redpack.ActClientInvitationCodeMapper; -import au.com.royalpay.payment.manage.mappers.system.*; -import au.com.royalpay.payment.manage.merchants.beans.*; +import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientApplyMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientAuditProcessMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientBDMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientBankAccountMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientDeviceMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientFilesMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientRateMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientsContractMapper; +import au.com.royalpay.payment.manage.mappers.system.CommoditiesMapper; +import au.com.royalpay.payment.manage.mappers.system.ManagerMapper; +import au.com.royalpay.payment.manage.mappers.system.OrgMapper; +import au.com.royalpay.payment.manage.mappers.system.SysWxMerchantApplyMapper; +import au.com.royalpay.payment.manage.merchants.beans.ActivityPosterBuilder; +import au.com.royalpay.payment.manage.merchants.beans.BankAccountInfo; +import au.com.royalpay.payment.manage.merchants.beans.ClientAuthFilesInfo; +import au.com.royalpay.payment.manage.merchants.beans.ClientRateConfig; +import au.com.royalpay.payment.manage.merchants.beans.ClientRegisterInfo; +import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean; +import au.com.royalpay.payment.manage.merchants.beans.PartnerQuery; +import au.com.royalpay.payment.manage.merchants.beans.SubMerchantIdApply; import au.com.royalpay.payment.manage.merchants.core.ClientComplyValidator; import au.com.royalpay.payment.manage.merchants.core.ClientManager; import au.com.royalpay.payment.manage.notice.core.MailService; @@ -43,16 +63,21 @@ import au.com.royalpay.payment.tools.merchants.qrboard.QRBoard; import au.com.royalpay.payment.tools.merchants.qrboard.QRBoardProvider; import au.com.royalpay.payment.tools.permission.enums.ManagerRole; import au.com.royalpay.payment.tools.permission.enums.PartnerRole; -import au.com.royalpay.payment.tools.utils.*; +import au.com.royalpay.payment.tools.utils.ImageUtils; +import au.com.royalpay.payment.tools.utils.PageListUtils; +import au.com.royalpay.payment.tools.utils.PasswordUtils; +import au.com.royalpay.payment.tools.utils.PdfUtils; +import au.com.royalpay.payment.tools.utils.QRCodeUtils; +import au.com.royalpay.payment.tools.utils.TimeZoneUtils; import au.com.royalpay.payment.tools.websocket.notify.PartnerPageEvent; -import cn.yixblog.platform.http.HttpRequestGenerator; -import cn.yixblog.platform.http.HttpRequestResult; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.github.miemiedev.mybatis.paginator.domain.Order; import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import com.github.miemiedev.mybatis.paginator.domain.PageList; + import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; @@ -71,27 +96,40 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestMethod; import org.thymeleaf.context.Context; import org.thymeleaf.spring4.SpringTemplateEngine; -import javax.annotation.Resource; -import javax.imageio.ImageIO; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.math.BigDecimal; import java.net.URISyntaxException; import java.net.URL; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; + +import cn.yixblog.platform.http.HttpRequestGenerator; +import cn.yixblog.platform.http.HttpRequestResult; + import static au.com.royalpay.payment.manage.permission.utils.OrgCheckUtils.checkOrgPermission; /** @@ -168,6 +206,9 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid @Resource private FinancialBDConfigMapper financialBDConfigMapper; + @Resource + private ClientsContractMapper clientsContractMapper; + private static final String SOURCE_AGREE_FILE = "source_agree_file"; private static final String CLIENT_BANK_FILE = "client_bank_file"; private static final String CLIENT_ID_FILE = "client_id_file"; @@ -1848,37 +1889,23 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid client.put("company_name_acn", client.getString("company_name") + " (ABN " + client.getString("abn") + ")"); } - JSONObject weChatRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Wechat"); - if (weChatRate == null) { - throw new BadRequestException("The Partner's Rate is not config!"); - } - client.put("wechat_rate", weChatRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); - client.put("clean", "T+" + weChatRate.getString("clean_days")); - client.put("clean_days", weChatRate.getString("clean_days")); - - try { - JSONObject alipayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Alipay"); - if (alipayRate != null) { - client.put("alipay_rate", alipayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); - } - - JSONObject bestPayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Bestpay"); - if (bestPayRate != null) { - client.put("bestpay_rate", bestPayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); - } - - JSONObject jdRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "jd"); - if (jdRate != null) { - client.put("jd_rate", jdRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); - } - - JSONObject alipayOnlineRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "AlipayOnline"); - if (alipayOnlineRate != null) { - client.put("alipay_online_rate", alipayOnlineRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); - } - } catch (Exception ignored) { - // do nothing - } + List clientRate = clientRateMapper.minExpiryTime(client.getIntValue("client_id"),null); + clientRate.forEach((p)->{ + String rate_name = p.getString("rate_name"); + if("Wechat".equals(rate_name)){ + client.put("wechat_rate", p.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); + client.put("clean", "T+" + p.getString("clean_days")); + client.put("clean_days", p.getString("clean_days")); + }else if("Alipay".equals(rate_name)){ + client.put("alipay_rate", p.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); + }else if("Bestpay".equals(rate_name)){ + client.put("bestpay_rate", p.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); + }else if("jd".equals(rate_name)){ + client.put("jd_rate", p.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); + }else if("AlipayOnline".equals(rate_name)){ + client.put("alipay_online_rate", p.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN)); + } + }); JSONObject account = getBankAccountByClientId(client.getIntValue("client_id")); if (account == null || account.size() <= 0) { @@ -1897,7 +1924,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid File file = new File(clientMoniker + "_agreement.pdf"); ByteArrayOutputStream bos = pdu.templetPdfBos(file); InputStream stream = new ByteArrayInputStream(bos.toByteArray()); - JSONObject fileRes = attachmentClient.uploadFile(stream, clientMoniker + "_agreement.pdf", false); + JSONObject fileRes = attachmentClient.uploadFile(stream, clientMoniker +"_"+System.currentTimeMillis()+ "_agreement.pdf", false); if (fileRes != null) { importAgreeFile(clientMoniker, manager, fileRes.getString("url")); } @@ -1991,15 +2018,24 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid throw new InvalidShortIdException(); } if (sourceFile != null) { - JSONObject existFile = clientFilesMapper.findFileByClientAndType(client.getIntValue("client_id"), SOURCE_AGREE_FILE); - + List existFiles = clientFilesMapper.findFileByClientAndType(client.getIntValue("client_id"), SOURCE_AGREE_FILE); + JSONObject existFile = null; + if (!CollectionUtils.isEmpty(existFiles)) { + existFile = existFiles.get(0); + } + Date now = new Date(); JSONObject file = new JSONObject(); file.put("file_name", SOURCE_AGREE_FILE); file.put("file_value", sourceFile); file.put("client_id", client.getIntValue("client_id")); - file.put("last_update_date", new Date()); - file.put("last_update_by", manager.getString("display_name")); - if (existFile == null || existFile.isEmpty()) { + file.put("last_update_date", now); + if(manager == null){ + file.put("last_update_by", "System Import"); + }else { + file.put("last_update_by", manager.getString("display_name")); + } + JSONObject contract = clientsContractMapper.findByClientId(client.getIntValue("client_id")); + if (contract == null ||now.compareTo(contract.getDate("expiry_date"))>0||existFile == null || existFile.isEmpty()) { clientFilesMapper.save(file); } else { file.put("file_id", existFile.getString("file_id")); @@ -2007,7 +2043,10 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } client.put("open_status", 2); clientMapper.update(client); - saveClientAuditProcess(client.getIntValue("client_id"), 1, 2, "Compliance合同制作中", manager); + + if (manager != null) { + saveClientAuditProcess(client.getIntValue("client_id"), 1, 2, "Compliance合同制作中", manager); + } } } @@ -2017,8 +2056,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid if (client == null) { throw new InvalidShortIdException(); } - JSONObject existFiles = clientFilesMapper.findFileByClientAndType(client.getIntValue("client_id"), SOURCE_AGREE_FILE); - if (existFiles == null || existFiles.isEmpty()) { + List existFiles = clientFilesMapper.findFileByClientAndType(client.getIntValue("client_id"), SOURCE_AGREE_FILE); + if (CollectionUtils.isEmpty(existFiles)) { throw new BadRequestException("The Agree File is not Complete!"); } client.put("open_status", 3); @@ -2077,7 +2116,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } checkOrgPermission(manager, client); if (StringUtils.isNotBlank(master_merchant)) { - //throw new NotFoundException("Invalid Input"); + // throw new NotFoundException("Invalid Input"); JSONObject master_client = getClientInfoByMoniker(master_merchant); if (master_client == null) { throw new InvalidShortIdException(); @@ -2296,7 +2335,12 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid public void updateSysClientFiles(JSONObject manager, int clientId, String fileType, String fileValue) { if (fileValue != null) { - JSONObject existFile = clientFilesMapper.findFileByClientAndType(clientId, fileType); + + List existFiles = clientFilesMapper.findFileByClientAndType(clientId, fileType); + JSONObject existFile = null; + if (!CollectionUtils.isEmpty(existFiles)) { + existFile = existFiles.get(0); + } JSONObject fileJson = new JSONObject(); fileJson.put("client_id", clientId); fileJson.put("last_update_date", new Date()); @@ -2825,7 +2869,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } private TemplateMessage initSendToComplianceGreenChannelTemplate(String loginUrl, String wxopenid, String templateId2, String bd_user_name, - JSONObject client) { + JSONObject client) { TemplateMessage msg = new TemplateMessage(wxopenid, templateId2, loginUrl); msg.put("first", bd_user_name + " 提交了新商户绿色通道申请,请审核", "#ff0000"); msg.put("keyword1", client.getString("client_moniker") + "申请绿色通道", "#0000ff"); @@ -2984,7 +3028,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid throw new InvalidShortIdException(); } checkOrgPermission(manager, client); - List applices = sysWxMerchantApplyMapper.listWxMerchantApplices(client.getInteger("client_id"), new PageBounds(Order.formString("create_time.desc"))); + List applices = sysWxMerchantApplyMapper.listWxMerchantApplices(client.getInteger("client_id"), + new PageBounds(Order.formString("create_time.desc"))); if (!applices.isEmpty()) { return applices; } else { diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java index 3bb6f6056..16f88fd5d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java @@ -1,27 +1,42 @@ package au.com.royalpay.payment.manage.merchants.web; import au.com.royalpay.payment.manage.dev.core.MerchantLocationService; -import au.com.royalpay.payment.manage.merchants.beans.*; +import au.com.royalpay.payment.manage.merchants.beans.BankAccountInfo; +import au.com.royalpay.payment.manage.merchants.beans.ClientAuthFilesInfo; +import au.com.royalpay.payment.manage.merchants.beans.ClientRateConfig; +import au.com.royalpay.payment.manage.merchants.beans.ClientRegisterInfo; +import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean; +import au.com.royalpay.payment.manage.merchants.beans.PartnerQuery; +import au.com.royalpay.payment.manage.merchants.beans.SubMerchantIdApply; import au.com.royalpay.payment.manage.merchants.core.ClientManager; import au.com.royalpay.payment.manage.permission.manager.ManagerMapping; -import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig; -import au.com.royalpay.payment.tools.permission.enums.ManagerRole; import au.com.royalpay.payment.manage.permission.manager.RequireManager; import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery; import au.com.royalpay.payment.manage.tradelog.core.TradeLogService; import au.com.royalpay.payment.tools.CommonConsts; import au.com.royalpay.payment.tools.http.HttpUtils; +import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig; +import au.com.royalpay.payment.tools.permission.enums.ManagerRole; + import com.alibaba.fastjson.JSONObject; + import org.springframework.validation.Errors; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; import java.io.IOException; import java.io.OutputStream; import java.util.List; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + /** * Created by yixian on 2016-06-27. */ diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientFilesMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientFilesMapper.xml new file mode 100644 index 000000000..e58c81269 --- /dev/null +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientFilesMapper.xml @@ -0,0 +1,16 @@ + + + + + + update sys_files + set state = 2 + where file_name = 'source_agree_file' + and client_id = #{client_id} + + \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientRateMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientRateMapper.xml index e49faa46d..9c8788324 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientRateMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientRateMapper.xml @@ -87,4 +87,14 @@ order by update_time desc ]]> + \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientsContractMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientsContractMapper.xml new file mode 100644 index 000000000..f0b8b14c7 --- /dev/null +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientsContractMapper.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file