diff --git a/pom.xml b/pom.xml index 721c08ecc..e248fac25 100644 --- a/pom.xml +++ b/pom.xml @@ -9,10 +9,10 @@ 4.0.0 manage - 1.2.88 + 1.2.89 UTF-8 - 1.6.1 + 1.4.0 ${project.version} @@ -237,6 +237,42 @@ + + officedev + + + + com.google.cloud.tools + jib-maven-plugin + ${jib-maven-plugin.version} + + + 192.168.0.84:5000/royalpay/serverjre:openj9 + + + 192.168.0.84:5000/royalpay/manage-dev + + latest + ${docker-image.version} + + + + extra/ + + true + + + + package + + build + + + + + + + dev diff --git a/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/CleanServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/CleanServiceImpl.java index bdce657cf..d26342ad5 100644 --- a/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/CleanServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/CleanServiceImpl.java @@ -5,6 +5,7 @@ import au.com.royalpay.payment.core.exceptions.InvalidShortIdException; import au.com.royalpay.payment.core.tasksupport.SettlementSupport; import au.com.royalpay.payment.manage.management.clearing.core.CleanService; import au.com.royalpay.payment.manage.mappers.log.*; +import au.com.royalpay.payment.manage.mappers.payment.SysClientIncrementalMapper; import au.com.royalpay.payment.manage.mappers.payment.TaskManualSettleMapper; import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper; import au.com.royalpay.payment.manage.mappers.system.*; @@ -133,6 +134,8 @@ public class CleanServiceImpl implements CleanService, ManagerTodoNoticeProvider @Resource private ClearingDistributedSurchargeMapper clearingDistributedSurchargeMapper; @Resource + private SysClientIncrementalMapper sysClientIncrementalMapper; + @Resource private Locker locker; @Resource @@ -727,6 +730,10 @@ public class CleanServiceImpl implements CleanService, ManagerTodoNoticeProvider } List transactions = transactionMapper.listTransactionsOfClearingOrder(clearClient.getIntValue("clear_detail_id"), new PageBounds(Order.formString("order_id.asc"))); + + for (JSONObject transaction : transactions) { + transaction.put("rate_value",StringUtils.defaultString(sysClientIncrementalMapper.findByChannelAndClientId(transaction.getString("client_id"),transaction.getString("source")) ,"0")); + } String timezone_client = client.getString("timezone"); if (timezone_client != null) { transactions.parallelStream().forEach(p -> { diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.java index e10baf602..57d95ccaf 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.java @@ -30,10 +30,14 @@ public interface OrderMapper { PageList listOrders(JSONObject params, PageBounds pagination); + PageList listIncrementalOrders(JSONObject params, PageBounds pagination); + List listOrdersNoPage(JSONObject params); PageList listOrdersByClients(JSONObject params, PageBounds pagination); + PageList listIncrementalOrdersByClients(JSONObject params, PageBounds pagination); + JSONObject analysisOrders(JSONObject params); JSONObject getOrderDetail(@Param("order_id") String orderId); diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/SysClientIncrementalMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/SysClientIncrementalMapper.java new file mode 100644 index 000000000..4b1f2990d --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/SysClientIncrementalMapper.java @@ -0,0 +1,25 @@ +package au.com.royalpay.payment.manage.mappers.payment; + +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; +import com.alibaba.fastjson.JSONObject; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * Created by liuxinxin on 2019-11-12. + */ +@AutoMapper(tablename = "sys_client_incremental", pkName = "incremental_id") +public interface SysClientIncrementalMapper { + + @Select("SELECT incremental_rate_value FROM sys_client_incremental WHERE channel = #{channel} AND client_id = #{client_id} ") + String findByChannelAndClientId(@Param("client_id") String clientId,@Param("channel") String channel); + + @AutoSql(type = SqlType.SELECT) + List find(@Param("client_id") String clientId); + + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientIncrementalMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientIncrementalMapper.java new file mode 100644 index 000000000..c66c1003a --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientIncrementalMapper.java @@ -0,0 +1,37 @@ +package au.com.royalpay.payment.manage.mappers.system; + +import cn.yixblog.support.mybatis.autosql.annotations.AdvanceSelect; +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; +import com.alibaba.fastjson.JSONObject; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * @Author DuLingLing + * @create 2019/11/13 0013 14:49 + */ +@AutoMapper(tablename = "sys_client_incremental", pkName = "incremental_id", keyGenerator = Jdbc3KeyGenerator.class) +public interface ClientIncrementalMapper { + + /** + * 获取商户所有增值渠道信息 + * @param clientId + * @return + */ + @AutoSql(type = SqlType.SELECT) + List findAllByclientMoniker(@Param("client_id") int clientId); + + @AutoSql(type = SqlType.SELECT) + JSONObject findByClinetIdAndChannel(@Param("client_id")int clinet_id, @Param("channel")String channel); + + @AutoSql(type = SqlType.INSERT) + void save(JSONObject saveIncrementalService); + + @AutoSql(type = SqlType.UPDATE) + void update(JSONObject saveIncrementalService); +} 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 5df0a155e..74a2c790a 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 @@ -477,4 +477,33 @@ public interface ClientManager { JSONObject getClientInfoByAggree(JSONObject account); JSONObject getComplianceFilesForBD(JSONObject account); + + /** + * 获取商户所有增值服务 + * + * @param clientMoniker + * @return + */ + JSONObject partnerIncrementalService(String clientMoniker); + + /** + * 保存/修改增值服务配置 + * @param clientMoniker + * @param incrementalService + */ + void changePartnerIncrementalService(String clientMoniker, JSONObject incrementalService,JSONObject manager); + + /** + * 禁用/启用增值服务 + * @param clientMoniker + * @param incrementalService + */ + void changeSwitchIncrementalService(String clientMoniker, JSONObject incrementalService,JSONObject manager); + + /** + * 获取商户增值服务详情 + * @param clientMoniker + * @return + */ + JSONObject partnerIncrementalServiceInfo(String clientMoniker, String incrementalId); } 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 093c6de17..1e0fafd47 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 @@ -17,6 +17,7 @@ import au.com.royalpay.payment.core.PaymentChannelApi; import au.com.royalpay.payment.core.exceptions.EmailException; import au.com.royalpay.payment.core.exceptions.InvalidShortIdException; import au.com.royalpay.payment.core.mappers.SysClientMapper; +import au.com.royalpay.payment.tools.defines.IncrementalChannel; import au.com.royalpay.payment.core.utils.OrderExpiryRuleResolver; import au.com.royalpay.payment.manage.analysis.mappers.TransactionAnalysisMapper; import au.com.royalpay.payment.manage.appclient.beans.AppClientBean; @@ -122,11 +123,12 @@ import java.math.RoundingMode; import java.net.URISyntaxException; import java.net.URL; import java.net.URLDecoder; -import java.security.*; +import java.security.InvalidParameterException; +import java.security.KeyPair; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; -import java.util.List; import java.util.*; +import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.zip.ZipEntry; @@ -162,6 +164,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid private StringRedisTemplate stringRedisTemplate; @Resource private ClientComplianceApply clientComplianceApply; + @Resource + private ClientIncrementalMapper clientIncrementalMapper; @Value("${app.redis.prefix}") private String redisPrefix; @@ -267,8 +271,6 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid @Resource private ClientConfigMapper clientConfigMapper; @Resource - private PermissionPartnerModuleMapper permissionPartnerModuleMapper; - @Resource private PermissionPartnerManagerImpl permissionPartnerManagerImpl; @Resource private RiskAttentionMerchantsMapper riskAttentionMerchantsMapper; @@ -356,7 +358,6 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid if (manager != null) { checkClientOrg(manager, client); } - String same_phone = clientMapper.findSamePhone(client.getString("contact_phone")).getString("a"); if (same_phone != null && client.getString("contact_phone") != null && same_phone.contains(" ")) { same_phone = same_phone.replace(client.getString("client_moniker"), ""); @@ -1580,7 +1581,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid private void checkPhoneAndWechatExist(NewAccountBean account) { List accounts = clientAccountMapper.findByPhone(account.getContactPhone(), account.getNation_code().startsWith("+") ? account.getNation_code() : "+" + account.getNation_code()); - if ( accounts != null && accounts.size()>0) { + if (accounts != null && accounts.size() > 0) { throw new BadRequestException("Mobile phone number has been bound to other accounts"); } } @@ -1653,13 +1654,13 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid if (account == null) { throw new BadRequestException("account not exists"); } - if(user.getString("openid")!=null && !"".equals(user.getString("openid"))) { + if (user.getString("openid") != null && !"".equals(user.getString("openid"))) { if (clientAccountMapper.findByWechatOpenId(user.getString("openid")).size() > 0) { throw new BadRequestException("The WeChat has been linked to other accounts"); } } - if(user.getString("unioinid")!=null && !"".equals(user.getString("unioinid"))){ - if(clientAccountMapper.findByWechatUnionId(user.getString("unioinid")).size()>0 ){ + if (user.getString("unioinid") != null && !"".equals(user.getString("unioinid"))) { + if (clientAccountMapper.findByWechatUnionId(user.getString("unioinid")).size() > 0) { throw new BadRequestException("The WeChat has been linked to other accounts"); } } @@ -5899,4 +5900,93 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid return key; } + @Override + public JSONObject partnerIncrementalService(String clientMoniker) { + JSONObject client = clientMapper.findClientByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + List service = clientIncrementalMapper.findAllByclientMoniker(client.getInteger("client_id")); + List incrementalChannels = new ArrayList<>(); + for (IncrementalChannel e : IncrementalChannel.values()) { + boolean exist = false; + for (JSONObject s : service) { + exist = e.getChannel().equals(s.getString("channel")); + if (exist) { + break; + } + } + if (!exist) { + incrementalChannels.add(e.getChannel()); + } + } + incrementalChannels.remove("system"); + return new JSONObject() {{ + put("all_service", service); + put("incremental_channel", incrementalChannels); + }}; + } + + @Override + public JSONObject partnerIncrementalServiceInfo(String clientMoniker,String channel){ + JSONObject client = clientMapper.findClientByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + JSONObject incrementalInfo = clientIncrementalMapper.findByClinetIdAndChannel(client.getInteger("client_id"), channel); + if(incrementalInfo==null){ + throw new BadRequestException("Merchant service not opened"); + } + return incrementalInfo; + } + + @Override + public void changePartnerIncrementalService(String clientMoniker, JSONObject incrementalService, JSONObject manager) { + JSONObject client = clientMapper.findClientByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + JSONObject existIncrementalService = clientIncrementalMapper.findByClinetIdAndChannel(client.getInteger("client_id"), incrementalService.getString("channel")); + JSONObject saveIncrementalService = new JSONObject(); + if (existIncrementalService == null) { + saveIncrementalService.put("incremental_id", UUID.randomUUID().toString()); + saveIncrementalService.put("channel", incrementalService.getString("channel")); + saveIncrementalService.put("create_time", new Date()); + saveIncrementalService.put("update_time", new Date()); + saveIncrementalService.put("is_valid", 1); + } else { + saveIncrementalService.put("incremental_id", incrementalService.getString("incremental_id")); + saveIncrementalService.put("update_time", new Date()); + } + saveIncrementalService.put("client_id", client.getInteger("client_id")); + saveIncrementalService.put("operator", manager.getString("display_name")); + saveIncrementalService.put("incremental_mode", incrementalService.getInteger("incremental_mode")); + saveIncrementalService.put("incremental_rate_value", incrementalService.getInteger("incremental_mode") == 1 ? incrementalService.getString("incremental_rate_value") : 0); + saveIncrementalService.put("total_incremental_amount", incrementalService.getInteger("incremental_mode") != 1 ? incrementalService.getString("total_incremental_amount") : 0); + if (existIncrementalService == null) { + clientIncrementalMapper.save(saveIncrementalService); + } else { + clientIncrementalMapper.update(saveIncrementalService); + } + + } + + @Override + public void changeSwitchIncrementalService(String clientMoniker, JSONObject incrementalService, JSONObject manager) { + JSONObject client = clientMapper.findClientByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + JSONObject existIncrementalService = clientIncrementalMapper.findByClinetIdAndChannel(client.getInteger("client_id"), incrementalService.getString("channel")); + if (existIncrementalService == null) { + throw new BadRequestException("Incremental service is not exist"); + } + + existIncrementalService.put("update_time", new Date()); + existIncrementalService.put("incremental_id", incrementalService.getString("incremental_id")); + existIncrementalService.put("is_valid", incrementalService.getInteger("is_valid")); + existIncrementalService.put("operator", manager.getString("display_name")); + clientIncrementalMapper.update(existIncrementalService); + } + } 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 fe64de521..11ff648b1 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 @@ -809,4 +809,34 @@ public class PartnerManageController { public void switchPartnerCBChannelConfig(@PathVariable String clientMoniker, @PathVariable String channelKey, @RequestBody JSONObject channel) { clientManager.partnerCBChannelConfig(clientMoniker, channelKey, channel.getString("channel_id")); } + + /** + * 获取商户所有增值服务 + * @param clientMoniker + * @return + */ + @ManagerMapping(value = "/{clientMoniker}/incremental_service", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR}) + public JSONObject getClientIncrementalService(@PathVariable String clientMoniker){ + return clientManager.partnerIncrementalService(clientMoniker); + } + + /** + * 保存/修改增值服务配置 + * @param clientMoniker + * @param incrementalService + */ + @ManagerMapping(value = "/{clientMoniker}/incremental_service", method = RequestMethod.POST, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR}) + public void updateClientIncrementalService(@PathVariable("clientMoniker") String clientMoniker,@RequestBody JSONObject incrementalService, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager){ + clientManager.changePartnerIncrementalService(clientMoniker,incrementalService,manager); + } + + /** + * 禁用/启用增值服务 + * @param clientMoniker + * @param incrementalService + */ + @ManagerMapping(value = "/{clientMoniker}/incremental_service/status", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR}) + public void switchClientIncrementalService(@PathVariable("clientMoniker") String clientMoniker,@RequestBody JSONObject incrementalService, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager){ + clientManager.changeSwitchIncrementalService(clientMoniker,incrementalService,manager); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java index 188fd1031..263f41335 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java @@ -301,6 +301,12 @@ public class PartnerViewController { return tradeLogService.listPartnerTradeLogs(null, account, account.getString("client_moniker"), query, account.getJSONObject("client").getString("timezone")); } + @PartnerMapping(value = "/incremental_trade_logs", method = RequestMethod.GET) + @ResponseBody + public JSONObject listIncrementalTradeLogs(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account, TradeLogQuery query) throws Exception { + return tradeLogService.listPartnerIncrementalTradeLogs(null, account, account.getString("client_moniker"), query, account.getJSONObject("client").getString("timezone")); + } + @PartnerMapping(value = "/trade_logs/{orderId}", method = RequestMethod.GET) @ResponseBody public JSONObject getOrderDetail(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account, @PathVariable String orderId) { @@ -602,4 +608,28 @@ public class PartnerViewController { public void deleteAuthFiles(@PathVariable String fileId, @ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account) { clientManager.deleteAuthFiles(fileId); } + + /** + * 获取商户所有增值服务 + * @param clientMoniker + * @return + */ + @PartnerMapping(value = "/{clientMoniker}/incremental_service", method = RequestMethod.GET, roles = {PartnerRole.ADMIN, PartnerRole.MANAGER}) + @ResponseBody + public JSONObject getClientIncrementalService(@PathVariable String clientMoniker){ + return clientManager.partnerIncrementalService(clientMoniker); + } + + /** + * 获取商户增值服务详情 + * @param clientMoniker + * @param channel + * @return + */ + @PartnerMapping(value = "/{clientMoniker}/incremental_service/{channel}/info", method = RequestMethod.GET, roles = {PartnerRole.ADMIN, PartnerRole.MANAGER}) + @ResponseBody + public JSONObject getClientIncrementalServiceInfo(@PathVariable("clientMoniker") String clientMoniker, @PathVariable("channel") String channel){ + return clientManager.partnerIncrementalServiceInfo(clientMoniker,channel); + } + } diff --git a/src/main/java/au/com/royalpay/payment/manage/signin/web/SignInController.java b/src/main/java/au/com/royalpay/payment/manage/signin/web/SignInController.java index 0bc258cfb..b7e7a3f67 100644 --- a/src/main/java/au/com/royalpay/payment/manage/signin/web/SignInController.java +++ b/src/main/java/au/com/royalpay/payment/manage/signin/web/SignInController.java @@ -60,7 +60,6 @@ public class SignInController { private ManagerTodoNoticeProvider[] managerTodoNoticeProviders; @Resource private ClientManager clientManager; - @Resource private ManagerAccountsService managerAccountsService; @@ -191,6 +190,7 @@ public class SignInController { @PartnerMapping(value = "/current_partner", method = RequestMethod.GET) public JSONObject partnerLoginStatus(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner) { + partner.put("has_incremental_setvice",clientManager.partnerIncrementalService(partner.getString("client_moniker")).getJSONArray("all_service").size()>0); return partner; } diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/beans/TradeLogQuery.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/beans/TradeLogQuery.java index ca724c916..0758af65d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/beans/TradeLogQuery.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/beans/TradeLogQuery.java @@ -28,6 +28,7 @@ public class TradeLogQuery { private String datefrom; private String dateto; private int[] gateway; + private String source = "ALL" ; private OrderStatus status = OrderStatus.PAID; private PayChannel channel = PayChannel.ALL; private String[] client_ids; @@ -84,6 +85,8 @@ public class TradeLogQuery { if (client_ids != null) { params.put("client_ids", client_ids); } + + params.put("source", source); params.put("status", status.getStatus()); params.put("channel", channel.getChannels()); @@ -242,4 +245,12 @@ public class TradeLogQuery { public void setorg_id2(String org_id2) { this.org_id2 = org_id2; } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/TradeLogService.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/TradeLogService.java index 53de695e5..c691ba40f 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/TradeLogService.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/TradeLogService.java @@ -14,8 +14,12 @@ import java.util.List; public interface TradeLogService { JSONObject listPartnerTradeLogs(JSONObject manager, JSONObject account, String clientMoniker, TradeLogQuery query, String timezone) throws Exception; + JSONObject listPartnerIncrementalTradeLogs(JSONObject manager, JSONObject account, String clientMoniker, TradeLogQuery query, String timezone) throws Exception; + JSONObject listAllTradeLogs(TradeLogQuery query, JSONObject manager); + JSONObject listAllIncrementalTradeLogs(TradeLogQuery query, JSONObject manager); + List listOrderRefunds(String orderId, String timezone); void getOrderDetail(Model model, String clientMoniker, String orderId, String openid); diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java index f728f5350..eb859afe0 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java @@ -112,6 +112,8 @@ public class TradeLogServiceImpl implements TradeLogService { @Resource private ManagerCustomerRelationAlipayMapper managerCustomerRelationAlipayMapper; @Resource + private SysClientIncrementalMapper sysClientIncrementalMapper; + @Resource private ClientCustomersMapper clientCustomersMapper; @Resource private ClearingLogMapper clearingLogMapper; @@ -171,6 +173,42 @@ public class TradeLogServiceImpl implements TradeLogService { return result; } + @Override + public JSONObject listPartnerIncrementalTradeLogs(JSONObject manager, JSONObject account, String shortId, TradeLogQuery query, String timezone) throws Exception { + JSONObject client = clientManager.getClientInfoByMoniker(shortId); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + JSONObject params = query.toParams(timezone); + clientManager.validateClients(client.getIntValue("client_id"), params); + params.put("client_id", client.getIntValue("client_id")); + if (manager != null && manager.getInteger("org_id") != null) { + params.put("org_id", manager.getIntValue("org_id")); + } + if(query.getGatewayChild()!=null){ + params.put("trade_type",new ArrayList(){{add(query.getGatewayChild());}}); + } + PageList logs = orderMapper.listIncrementalOrdersByClients(params, + new PageBounds(query.getPage(), query.getLimit(), Order.formString("create_time.desc"))); + if (timezone != null) { + TimeZoneUtils.switchTimeZone(logs, timezone, "create_time", "confirm_time", "transaction_time"); + } + if (account != null) { + PartnerRole role = PartnerRole.getRole(account.getIntValue("role")); + if (role == PartnerRole.MANAGER || role == PartnerRole.ADMIN) { + for (JSONObject log : logs) { + log.put("audition", !refundAuditionMapper.listAuditingRefundsOfOrder(log.getString("order_id")).isEmpty()); + } + } + } + JSONObject result = PageListUtils.buildPageListResult(logs); + JSONObject analysis = orderMapper.analysisOrders(params); + result.put("analysis", analysis); + return result; + } + + @Override public JSONObject listAllTradeLogs(TradeLogQuery query, JSONObject manager) { JSONObject params = query.toParams(null); @@ -195,6 +233,33 @@ public class TradeLogServiceImpl implements TradeLogService { return result; } + @Override + public JSONObject listAllIncrementalTradeLogs(TradeLogQuery query, JSONObject manager) { + JSONObject params = query.toParams(null); + if (ManagerRole.BD_USER.hasRole(manager.getIntValue("role")) && !ManagerRole.ORG_MANAGER.hasRole(manager.getIntValue("role"))) { + params.put("bd_user", manager.getString("manager_id")); + } + if (query.isOnlyGroup() && ManagerRole.BD_LEADER.hasRole(manager.getIntValue("role"))) { + params.remove("bd_user"); + params.put("bd_group", manager.getString("manager_id")); + if (query.getGroup_bd() > 0) { + params.put("bd_group_bd", query.getGroup_bd()); + } + } + orgManager.checkOrgIds(manager, params); + if(query.getGatewayChild()!=null){ + params.put("trade_type",new ArrayList(){{add(query.getGatewayChild());}}); + } + PageList logs = orderMapper.listIncrementalOrders(params, new PageBounds(query.getPage(), query.getLimit(), Order.formString("create_time.desc"))); + for (JSONObject log : logs) { + log.put("rate_value",sysClientIncrementalMapper.findByChannelAndClientId(log.getString("client_id"),log.getString("source"))); + } + JSONObject result = PageListUtils.buildPageListResult(logs); + JSONObject analysis = orderMapper.analysisOrders(params); + result.put("analysis", analysis); + return result; + } + @Override public List listOrderRefunds(String orderId, String timezone) { @@ -727,14 +792,16 @@ public class TradeLogServiceImpl implements TradeLogService { row.createCell(10, Cell.CELL_TYPE_STRING).setCellValue(data.getString("clearing_amount")); row.createCell(11, Cell.CELL_TYPE_STRING).setCellValue(data.getString("settle_amount")); row.createCell(12, Cell.CELL_TYPE_STRING).setCellValue(data.getString("total_surcharge")); - row.createCell(13, Cell.CELL_TYPE_STRING).setCellValue(data.getString("tax_amount")); - row.createCell(14, Cell.CELL_TYPE_STRING).setCellValue(data.getString("clearing_time")); - row.createCell(15, Cell.CELL_TYPE_STRING).setCellValue(data.getString("trans_type").equals("clearing") ? "-" : data.getBigDecimal("exchange_rate").toString()); - row.createCell(16, Cell.CELL_TYPE_STRING).setCellValue(data.getString("trans_type")); - row.createCell(17, Cell.CELL_TYPE_STRING).setCellValue(data.getString("clear_status")); - row.createCell(18, Cell.CELL_TYPE_STRING).setCellValue(data.getString("gateway")); - row.createCell(19, Cell.CELL_TYPE_STRING).setCellValue(data.getString("order_detail")); - row.createCell(20, Cell.CELL_TYPE_STRING).setCellValue(data.getString("dev_id")); + row.createCell(13, Cell.CELL_TYPE_STRING).setCellValue(StringUtils.defaultString(data.getString("incremental_surcharge"),"0.0000")); + row.createCell(14, Cell.CELL_TYPE_STRING).setCellValue(data.getString("tax_amount")); + row.createCell(15, Cell.CELL_TYPE_STRING).setCellValue(data.getString("clearing_time")); + row.createCell(16, Cell.CELL_TYPE_STRING).setCellValue(data.getString("trans_type").equals("clearing") ? "-" : data.getBigDecimal("exchange_rate").toString()); + row.createCell(17, Cell.CELL_TYPE_STRING).setCellValue(data.getString("trans_type")); + row.createCell(18, Cell.CELL_TYPE_STRING).setCellValue(data.getString("clear_status")); + row.createCell(19, Cell.CELL_TYPE_STRING).setCellValue(data.getString("gateway")); + row.createCell(20, Cell.CELL_TYPE_STRING).setCellValue(data.getString("order_detail")); + row.createCell(21, Cell.CELL_TYPE_STRING).setCellValue(data.getString("dev_id")); + } @Override @@ -1383,7 +1450,7 @@ public class TradeLogServiceImpl implements TradeLogService { Row row = sheet.createRow(rowNum); String[] title = {"Transaction Time", "Client Order ID", "System Order ID", "Client Moniker", "Short Name", "Order ID", "Channel", "Input Amount", "Transaction Amount", "Transaction Currency", "Clearing Amount", - "Settle Amount", "Surcharge", "GST", "Settle Date", "Exchange Rate", + "Settle Amount", "Surcharge", "Incremental Surcharge", "GST", "Settle Date", "Exchange Rate", "Transaction Type", "Clearing Status", "Gateway", "Remark", "Dev No"}; for (int j = 0; j < title.length; j++) { row.createCell(j, Cell.CELL_TYPE_STRING).setCellValue(title[j]); diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/web/ManageTradelogController.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/web/ManageTradelogController.java index 68337775e..f81569efb 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/web/ManageTradelogController.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/web/ManageTradelogController.java @@ -34,6 +34,13 @@ public class ManageTradelogController { return tradeLogService.listAllTradeLogs(query, manager); } + @RequestMapping(value = "/incremental",method = RequestMethod.GET) + @ReadOnlyConnection + @RequireManager(role = {ManagerRole.ADMIN, ManagerRole.BD_USER, ManagerRole.OPERATOR, ManagerRole.FINANCIAL_STAFF, ManagerRole.SERVANT, ManagerRole.DIRECTOR}) + public JSONObject listAllIncrementalTradeLogs(TradeLogQuery query, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + return tradeLogService.listAllIncrementalTradeLogs(query, manager); + } + @ManagerMapping(value = "/{tradeId}/refunds", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.FINANCIAL_STAFF, ManagerRole.SERVANT, ManagerRole.DIRECTOR}) @ReadOnlyConnection @RequirePartner diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index cf8501c5a..aee3d5b60 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -1,6 +1,16 @@ -spring.datasource.driver-class-name=com.mysql.jdbc.Driver -spring.datasource.schema-name=royalpay_local -spring.datasource.host=192.168.0.50:3306 -spring.datasource.url=jdbc:mysql://${spring.datasource.host}/${spring.datasource.schema-name}?useUnicode=true&characterEncoding=utf8&useSSL=false -spring.datasource.username=root -spring.datasource.password=root +#多数据源配置 +spring.datasource.type = com.zaxxer.hikari.HikariDataSource +#数据源master + +spring.datasource.master.schema-name=royalpay_production +spring.datasource.master.host=192.168.1.52:3306 +spring.datasource.master.jdbc-url=jdbc:mysql://${spring.datasource.master.host}/${spring.datasource.master.schema-name}?useUnicode=true&characterEncoding=utf8&useSSL=false +spring.datasource.master.username=taylor +spring.datasource.master.password=taylor + +#数据源salve +spring.datasource.slave.schema-name=royalpay_production +spring.datasource.slave.host=192.168.1.52:3306 +spring.datasource.slave.jdbc-url=jdbc:mysql://${spring.datasource.slave.host}/${spring.datasource.slave.schema-name}?useUnicode=true&characterEncoding=utf8&useSSL=false +spring.datasource.slave.username=taylor +spring.datasource.slave.password=taylor \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/cashback/CashbackRecordsMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/cashback/CashbackRecordsMapper.xml index c511a96e9..d9ce45e15 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/cashback/CashbackRecordsMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/cashback/CashbackRecordsMapper.xml @@ -19,8 +19,8 @@ + + + + + @@ -396,6 +587,12 @@ count(DISTINCT l.client_id) clients, ifnull(sum(if(l.transaction_type='Credit' and l.refund_id is null and l.currency!='CNY',l.display_amount,0)),0) display_amount, + ifnull(sum(if(l.transaction_type='Credit' and l.refund_id is null and l.currency!='CNY',l.incremental_surcharge,0)),0) + incremental_surcharge, + ifnull(sum(if(l.transaction_type='Debit' and l.refund_id is not null and l.currency!='CNY',l.incremental_surcharge,0)),0) + refund_incremental_surcharge, + ifnull(sum(if(l.currency!='CNY',l.incremental_surcharge,0)),0) + all_incremental_surcharge, ifnull(sum(if(l.transaction_type='Credit' and l.refund_id is null and l.currency!='CNY' and l.pre_authorization=1,l.display_amount,0)),0) pre_display_amount, ifnull(sum(if(l.transaction_type='Credit' and l.refund_id is null and l.currency='CNY',l.display_amount,0)),0) @@ -475,6 +672,10 @@ o.channel=#{chan} + + and + o.source=#{source} + and p.client_id in (SELECT b.client_id FROM sys_client_bd b INNER JOIN financial_bd_config c ON c.manager_id=b.bd_id 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 99175a97a..7a54bdbc5 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 @@ -96,7 +96,7 @@ Orders +
  • Settlement @@ -1035,6 +1040,10 @@ margin-bottom: 10%;"/>
  • +
  • + R Services +
  • + diff --git a/src/main/ui/manage.html b/src/main/ui/manage.html index 80fd87ec4..f698cc064 100644 --- a/src/main/ui/manage.html +++ b/src/main/ui/manage.html @@ -343,6 +343,11 @@ margin-bottom: 10%;"/> 交易流水|Trades Logs +
  • + + 增值服务交易流水|Incremental Trades Logs + +
  • 交易数据|Transaction Data diff --git a/src/main/ui/static/boot/index-boot.js b/src/main/ui/static/boot/index-boot.js index c0dba0173..63d340672 100644 --- a/src/main/ui/static/boot/index-boot.js +++ b/src/main/ui/static/boot/index-boot.js @@ -78,7 +78,8 @@ var modules = [ {path: 'static/payment/surchargeaccount/partner-surcharge-account', module: 'surchargeAccountApp', roles: [1,2,3]}, {path: 'static/integralmall/coupon_cancellation', module: 'couponCancellation', roles: [1,2]}, {path: 'static/invoice/invoice_assistant', module: 'partnerInvoice', roles: [1]}, - {path: 'static/payment/billqrcode/bill-qrcode-manage', module: 'billQrCodeManagement', roles: [1,2,3]} + {path: 'static/payment/billqrcode/bill-qrcode-manage', module: 'billQrCodeManagement', roles: [1,2,3]}, + {path: 'static/incrementalService/partner-incremental-service', module: 'partnerIncrementalService', roles: [1,2,3]} ]; require(['angular', 'jquery'], function (angular, $) { diff --git a/src/main/ui/static/cashback/templates/partner_cashback_records.html b/src/main/ui/static/cashback/templates/partner_cashback_records.html index 99b0fb028..0157c9dd2 100644 --- a/src/main/ui/static/cashback/templates/partner_cashback_records.html +++ b/src/main/ui/static/cashback/templates/partner_cashback_records.html @@ -80,7 +80,13 @@ - + + + + {{record.order_id}} + diff --git a/src/main/ui/static/images/R跨境商城.jpg b/src/main/ui/static/images/R跨境商城.jpg new file mode 100644 index 000000000..9b0713935 Binary files /dev/null and b/src/main/ui/static/images/R跨境商城.jpg differ diff --git a/src/main/ui/static/images/r_cross_mall.png b/src/main/ui/static/images/r_cross_mall.png new file mode 100644 index 000000000..761f7ca4b Binary files /dev/null and b/src/main/ui/static/images/r_cross_mall.png differ diff --git a/src/main/ui/static/images/royalpay_sign_s.png b/src/main/ui/static/images/royalpay_sign_s.png new file mode 100644 index 000000000..44b461485 Binary files /dev/null and b/src/main/ui/static/images/royalpay_sign_s.png differ diff --git a/src/main/ui/static/images/yangmaimai.jpg b/src/main/ui/static/images/yangmaimai.jpg new file mode 100644 index 000000000..90e55f643 Binary files /dev/null and b/src/main/ui/static/images/yangmaimai.jpg differ diff --git a/src/main/ui/static/images/yangmaimai_sign.png b/src/main/ui/static/images/yangmaimai_sign.png new file mode 100644 index 000000000..a77e570a0 Binary files /dev/null and b/src/main/ui/static/images/yangmaimai_sign.png differ diff --git a/src/main/ui/static/incrementalService/partner-incremental-service.js b/src/main/ui/static/incrementalService/partner-incremental-service.js new file mode 100644 index 000000000..5780cdb59 --- /dev/null +++ b/src/main/ui/static/incrementalService/partner-incremental-service.js @@ -0,0 +1,271 @@ +define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { + 'use strict'; + var app = angular.module('partnerIncrementalService', ['ui.bootstrap', 'ui.router']); + app.config(['$stateProvider', function ($stateProvider) { + $stateProvider.state('partnerIncrementalService', { + url: '/partner_incremental_service', + templateUrl: '/static/incrementalService/templates/partner_incremental_service.html', + controller: 'partnerIncrementalServiceCtrl', + resolve:{ + partner:['$http',function($http){ + return $http.get('/client/partner_info'); + }] + } + }).state('partnerIncrementalServiceInfo', { + url: '/partner_incremental_service_info?:channel', + templateUrl: '/static/incrementalService/templates/partner_incremental_service_info.html', + controller: 'partnerIncrementalServiceInfoCtrl', + resolve:{ + partner:['$http',function($http){ + return $http.get('/client/partner_info'); + }] + } + }); + }]); + + app.controller('partnerIncrementalServiceCtrl', ['$scope', '$http', '$state', 'partner', function ($scope, $http, $state, partner) { + $scope.serviceAll = []; + $scope.channelOptions = []; + $scope.windowHeight = document.body.clientWidth; + $scope.clientInfo = partner.data + $scope.initDate = function(){ + $http.get("/client/partner_info/"+$scope.clientInfo.client_moniker+"/incremental_service").then(function (res) { + $scope.serviceAll = res.data.all_service; + $scope.serviceAll.forEach(function(service){ + service.logo_url = '/static/images/'+service.channel+'.jpg' + }) + res.data.incremental_channel.forEach(function(channel){ + $scope.channelOptions.push({name:channel,logo_url:'/static/images/'+channel+'.jpg'}) + }) + }) + + } + $scope.initDate(); + }]); + + app.controller('partnerIncrementalServiceInfoCtrl',['$scope', '$http', '$state','$stateParams','$filter', '$timeout', 'partnerRefunder', 'orderService', 'commonDialog','partner', + function($scope,$http,$state,$stateParams,$filter, $timeout, partnerRefunder, orderService, commonDialog,partner){ + $scope.serviceInfo = {} + $scope.initDate = function () { + $http.get("/client/partner_info/"+partner.data.client_moniker+"/incremental_service/"+$stateParams.channel+"/info").then(function(res){ + $scope.serviceInfo =res.data + $scope.serviceInfo.logo_url = '/static/images/'+$scope.serviceInfo.channel+'.jpg' + + }) + } + $scope.initDate(); + $scope.params = {source: $scope.serviceInfo.channel,status: 'PAID', channel :'ALL' ,textType: 'all', datefrom: new Date(), dateto: new Date()}; + $scope.pagination = {}; + $scope.today = new Date(); + $scope.isAll = true; + $scope.isLevel3All = true; + $scope.device_isAll = true; + $scope.dev_params = {client_type:'sunmi',limit:100}; + $scope.clients = [$scope.currentUser.client]; + $scope.showLevel3Clients = false; + + + $scope.chooseToday = function () { + $scope.params.datefrom = $scope.params.dateto = new Date(); + $scope.loadTradeLogs(1); + }; + $scope.chooseYesterday = function () { + var yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + $scope.params.datefrom = $scope.params.dateto = yesterday; + $scope.loadTradeLogs(1); + }; + $scope.chooseLast7Days = function () { + $scope.params.dateto = new Date(); + var day = new Date(); + day.setDate(day.getDate() - 7); + $scope.params.datefrom = day; + $scope.loadTradeLogs(1); + }; + $scope.thisMonth = function () { + $scope.params.dateto = new Date(); + var monthBegin = new Date(); + monthBegin.setDate(1); + $scope.params.datefrom = monthBegin; + $scope.loadTradeLogs(1); + }; + $scope.lastMonth = function () { + var monthFinish = new Date(); + monthFinish.setDate(0); + $scope.params.dateto = monthFinish; + var monthBegin = new Date(); + monthBegin.setDate(0); + monthBegin.setDate(1); + $scope.params.datefrom = monthBegin; + $scope.loadTradeLogs(1); + }; + $scope.loadTradeLogs = function (page) { + $scope.params.source = $scope.serviceInfo.channel; + var params = angular.copy($scope.params); + if (params.datefrom) { + params.datefrom = $filter('date')(params.datefrom, 'yyyyMMdd'); + } + if (params.dateto) { + params.dateto = $filter('date')(params.dateto, 'yyyyMMdd'); + } + params.page = page || $scope.pagination.page || 1; + $http.get('/client/partner_info/incremental_trade_logs', {params: params}).then(function (resp) { + $scope.tradeLogs = resp.data.data; + $scope.pagination = resp.data.pagination; + $scope.analysis = resp.data.analysis; + $scope.analysis.refund_fee = angular.copy(Math.abs($scope.analysis.refund_fee)); + }); + }; + + $scope.gatewaySelected = function (arr) { + return $scope.params.gateway != null && $scope.params.gateway.filter(function (gateway) { + return arr.indexOf(gateway) >= 0 + }).length > 0 + }; + $scope.showTradeDetail = function (order) { + orderService.clientOrderDetail(order) + }; + $scope.showPRefundLog = function (orderId) { + partnerRefunder.prefunded(orderId); + }; + $scope.newPRefund = function (orderId) { + partnerRefunder.prefund(orderId).then(function () { + $scope.loadTradeLogs(); + }); + }; + $scope.releasePreAuth = function (orderId) { + commonDialog.confirm({ + title: 'Pre Authorization Completion', + content: 'This bill will be taken into settlement, or you will be able to make a refund order. Are you sure?' + }).then(function () { + $http.put('/client/partner_info/trade_logs/' + orderId + '/release_preauth').then(function (resp) { + $scope.loadTradeLogs(); + }, function (resp) { + commonDialog.alert({title: 'Error!', content: resp.data.message, type: 'error'}) + }) + }) + }; + $scope.alerts = []; + $scope.$on('pe_order_paid', function (evt, order) { + $scope.alerts.push(order); + $timeout(function () { + $scope.alerts.splice(0, 1); + }, 10000); + $scope.loadTradeLogs(); + }); + $scope.chooseClient = function (client) { + if (client == 'all') { + $scope.params.client_ids = angular.copy($scope.clientIds); + $scope.isAll = true; + $scope.chooseClientId = ''; + $scope.dev_params.client_ids = angular.copy($scope.clientIds); + $scope.showLevel3Clients = false; + $scope.listDevices(); + } else if (client.level3Clients) { + $scope.chooseClientId = client.client_id; + $scope.showLevel3Clients = true; + $scope.level3Clients = client.level3Clients; + $scope.isAll = false; + $scope.level3ClientIds = []; + $scope.level3ClientIds.push(client.client_id); + client.level3Clients.forEach(function (client) { + $scope.level3ClientIds.push(client.client_id); + }); + $scope.chooseLevel3Client("all"); + return; + } else { + $scope.chooseClientId = client.client_id; + $scope.params.client_ids = [client.client_id]; + $scope.isAll = false; + $scope.dev_params.client_ids = [client.client_id]; + $scope.showLevel3Clients = false; + $scope.listDevices(); + } + $scope.loadTradeLogs(); + }; + + $scope.chooseLevel3Client = function (client) { + if (client == 'all') { + $scope.params.client_ids = angular.copy($scope.level3ClientIds); + $scope.isLevel3All = true; + $scope.chooseLevel3ClientId = ''; + $scope.dev_params.client_ids = angular.copy($scope.level3ClientIds); + $scope.listDevices(); + } else { + $scope.chooseLevel3ClientId = client.client_id; + $scope.params.client_ids = [client.client_id]; + $scope.isLevel3All = false; + $scope.dev_params.client_ids = [client.client_id]; + $scope.listDevices(); + } + $scope.loadTradeLogs(); + }; + + $scope.listDevices = function () { + var params = angular.copy($scope.dev_params) + $http.get('/client/partner_info/devices', {params: params}).then(function (resp) { + $scope.devices = resp.data.data; + }) + }; + $scope.chooseDevices = function (dev_id) { + if(dev_id == 'all'){ + $scope.chooseDevice_id = ''; + $scope.params.dev_id = null; + $scope.device_isAll = true; + $scope.loadTradeLogs(1); + }else { + $scope.chooseDevice_id = dev_id; + $scope.params.dev_id = dev_id; + $scope.device_isAll = false; + $scope.loadTradeLogs(1); + } + }; + $scope.listDevices(); + + if ($scope.currentUser.client.has_children) { + $http.get('/client/partner_info/sub_partners').then(function (resp) { + var clientList = resp.data; + clientList.forEach(function (client) { + $scope.clients.push(client); + }); + $scope.clientIds = []; + $scope.clients.forEach(function (client) { + $scope.clientIds.push(client.client_id); + if (client.level3Clients) { + client.level3Clients.forEach(function (level3Client) { + $scope.clientIds.push(level3Client.client_id); + }); + } + }); + $scope.params.client_ids = angular.copy($scope.clientIds); + + $scope.loadTradeLogs(1); + //console.log($rootScope.currentUser.client.clientList); + }) + }else{ + $scope.loadTradeLogs(1); + } + + $scope.fullReleasePreAuth = function (){ + var params = angular.copy($scope.params); + if (params.datefrom) { + params.datefrom = $filter('date')(params.datefrom, 'yyyyMMdd'); + } + if (params.dateto) { + params.dateto = $filter('date')(params.dateto, 'yyyyMMdd'); + } + commonDialog.confirm({ + title: 'All Pre Authorization Completion', + content: 'These pre authorization orders will be taken into settlement, or you will be able to make a refund order. Are you sure?' + }).then(function(){ + $http.put('/client/partner_info/trade_logs/full_release_preauth',params).then(function (resp){ + $scope.loadTradeLogs(1); + alert("Success"); + },function (resp) { + commonDialog.alert({title: 'Error!', content: resp.data.message, type: 'error'}) + }) + }); + } + }]); + return app; +}); diff --git a/src/main/ui/static/incrementalService/templates/partner_incremental_service.html b/src/main/ui/static/incrementalService/templates/partner_incremental_service.html new file mode 100644 index 000000000..902d02f31 --- /dev/null +++ b/src/main/ui/static/incrementalService/templates/partner_incremental_service.html @@ -0,0 +1,161 @@ + +
    +

    R Services

    + +
    +
    \ No newline at end of file diff --git a/src/main/ui/static/incrementalService/templates/partner_incremental_service_info.html b/src/main/ui/static/incrementalService/templates/partner_incremental_service_info.html new file mode 100644 index 000000000..e441d0ec1 --- /dev/null +++ b/src/main/ui/static/incrementalService/templates/partner_incremental_service_info.html @@ -0,0 +1,426 @@ + +
    +

    + + {{serviceInfo.channel}} + Service Info

    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + {{serviceInfo.incremental_mode==1?'固定手续费':'固定金额扣款' }} +
    +
    + + {{serviceInfo.incremental_mode==1?serviceInfo.incremental_rate_value+'%':serviceInfo.total_incremental_amount}} +
    +
    + + {{serviceInfo.create_time }} +
    +
    + + {{serviceInfo.is_valid?'已启用':'未启用' }} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + +
    +

    + All | + Wechat Pay | + Alipay | + AlipayOnline | + BestPay | + JD Pay | + HF Pay | + RPay+ | + Yeepay | + LakalaPay +

    +
    +
    +
    + +
    +
    +
    + +
    + ~ +
    + +
    + +
    + Today +
    +
    + Yesterday +
    + + + +
    + +
    + +
    +
    + +
    +

    + All + +

    +
    +
    +
    + +
    +

    + All + +

    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + Transaction Amount + + ( {{analysis.order_count}} Orders ) +
    +
    +
    + +
    +
    + +
    + Input Amount + + ( {{analysis.pre_display_amount | currency:'pre authorization '}} ) +
    +
    +
    +
    +
    + +
    + Input Amount + + + ( {{analysis.pre_display_amount | currency:'pre authorization '}} ) + + + + ( {{analysis.pre_cny_display_amount | currency:'pre authorization '}} ) + +
    +
    +
    +
    +
    + +
    + Refund Amount + + + ({{analysis.pre_refund_fee|currency:'pre authorization '}}) + +
    +
    +
    +
    +
    + +
    + Incremental Surcharge + + + ({{analysis.all_incremental_surcharge}} - {{analysis.refund_incremental_surcharge}} = {{analysis.incremental_surcharge}}) +
    +
    +
    +
    +
    +
    +
    +
    +

    Orders

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Client Order IDOrder IDAmountInput AmountSystem RateSystem ProfitIncremental RateIncremental ProfitStatusCreate TimeOperation
    + + + + + + + BestPay + Alipay + AlipayOnline + + + + + + {{trade.order_id}} + + {{trade.total_amount|currency:trade.currency+' '}} + (-{{trade.refund_fee}}) + {{(trade.surcharge_rate * 100 - trade.rate_value)| number : 2}}%{{(trade.total_surcharge-trade.incremental_surcharge) | number : 2 | currency:trade.currency}}{{trade.source}}:{{(trade.rate_value) | number : 2}}%{{trade.source}}:{{trade.incremental_surcharge | currency:trade.currency}}{{0.00 | currency:trade.currency}} + + + + +
    + +
    + +
    +
    +
    +
    + diff --git a/src/main/ui/static/invoice/invoice_assistant.js b/src/main/ui/static/invoice/invoice_assistant.js index 634b1d31e..938e7b61c 100644 --- a/src/main/ui/static/invoice/invoice_assistant.js +++ b/src/main/ui/static/invoice/invoice_assistant.js @@ -11,7 +11,7 @@ define(['angular','decimal'], function (angular,decimal) { controller: 'partnerInvoiceApp' }) }]); - app.controller('partnerInvoiceApp', ['$scope', '$http','$filter', 'commonDialog', function ($scope, $http,$filter, commonDialog) { + app.controller('partnerInvoiceApp', ['$scope', '$http','$filter', 'commonDialog','$sce',function ($scope, $http,$filter, commonDialog, $sce) { $scope.params = {channel:'ALL',clearing_status:-1,client_ids:[$scope.currentUser.client.client_id]}; $scope.today = new Date(); $scope.pagination = {}; @@ -90,6 +90,7 @@ define(['angular','decimal'], function (angular,decimal) { params.page = page || $scope.pagination.page || 1; $http.get('/partner/invoice/trans_flow', {params: params}).then(function (resp) { $scope.tradeLogs = resp.data.data; + $scope.htmlToolst(); $scope.tradeLogs.forEach(function (log) { if(log.total_surcharge){ log.total_surcharge = decimal.add(log.total_surcharge,log.tax_amount).toFixed(2); @@ -136,6 +137,28 @@ define(['angular','decimal'], function (angular,decimal) { return url; } + + $scope.htmlToolst = function(){ + for(var i=0;i< $scope.tradeLogs.length;i++){ + var tax_amount = $scope.tradeLogs[i].tax_amount; + var total_surcharge= $scope.tradeLogs[i].total_surcharge; + var incremental_surcharge = $scope.tradeLogs[i].incremental_surcharge; + var channel_surcharge = $scope.tradeLogs[i].channel_surcharge; + var royal_surcharge = $scope.tradeLogs[i].royal_surcharge; + var system_surcharge = (total_surcharge-incremental_surcharge).toFixed(2); + var channel = $scope.tradeLogs[i].source; + var tip = '
    ' + + '
    手续费组成
    '+'
    '+ + '

    system:'+ system_surcharge +'

    ' + + '

    '+channel+':'+ incremental_surcharge +'

    '; + var a = royal_surcharge+incremental_surcharge+channel_surcharge+tax_amount; + if(total_surcharge <= (royal_surcharge+incremental_surcharge+channel_surcharge+tax_amount)){ + tip = tip +'

    tax amount:'+ tax_amount +'

    '; + } + tip = tip + '
    '; + $scope.tradeLogs[i].htmlTooltip = $sce.trustAsHtml(tip); + } + }; }]); return app; -}); \ No newline at end of file +}); diff --git a/src/main/ui/static/invoice/templates/invoice_assistant.html b/src/main/ui/static/invoice/templates/invoice_assistant.html index 40315fcc0..db6e5a9a0 100644 --- a/src/main/ui/static/invoice/templates/invoice_assistant.html +++ b/src/main/ui/static/invoice/templates/invoice_assistant.html @@ -194,6 +194,10 @@ + + - {{trade.order_id2}} + {{trade.order_id2}} @@ -265,4 +269,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/payment/partner/partner-manage.js b/src/main/ui/static/payment/partner/partner-manage.js index 7021bc4e5..9fb781d55 100644 --- a/src/main/ui/static/payment/partner/partner-manage.js +++ b/src/main/ui/static/payment/partner/partner-manage.js @@ -197,6 +197,10 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter url: '/permission_client', templateUrl: 'static/payment/partner/templates/partner_permission.html', controller: 'permissionClientCtrl' + }).state('partners.detail.incremental_service', { + url: '/incremental_service', + templateUrl: 'static/payment/partner/templates/incremental_service.html', + controller: 'incrementalServiceCtrl' }); }]); app.controller('partnerListCtrl', ['$scope', '$sce', '$http', '$filter', '$uibModal', 'businessStructuresMap', 'industryMap', 'stateMap', 'sectorMap', 'countryMap', @@ -5186,6 +5190,123 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter }; }]); + app.controller('incrementalServiceCtrl',['$scope', '$http', '$uibModal', '$state', '$filter', 'commonDialog',function($scope, $http, $uibModal, $state, $filter, commonDialog){ + $scope.serviceAll = {}; + $scope.channelOptions=[]; + $scope.initData = function(){ + $http.get('/sys/partners/' + $scope.partner.client_moniker+'/incremental_service').then(function(res){ + $scope.serviceAll = res.data.all_service; + $scope.serviceAll.forEach(function(service){ + service.logo_url = '/static/images/'+service.channel+'.jpg' + }) + $scope.channelOptions=res.data.incremental_channel; + }) + } + $scope.initData(); + $scope.newServiceChannelDialog = function (){ + $uibModal.open({ + templateUrl: '/static/payment/partner/templates/incremental_service_dialog.html', + controller: 'incrementalServiceDialogCtrl', + resolve: { + params: function(){ + return { + isCreate:true, + clientMoniker:$scope.partner.client_moniker, + channelOptions:$scope.channelOptions, + serviceChannel:null + } + } + } + }).result.then(function () { + $scope.initData(); + }); + } + $scope.editServiceChannelDialog = function (serviceChannel){ + $uibModal.open({ + templateUrl: '/static/payment/partner/templates/incremental_service_dialog.html', + controller: 'incrementalServiceDialogCtrl', + resolve: { + params: function(){ + return { + isCreate:false, + clientMoniker:$scope.partner.client_moniker, + channelOptions:$scope.channelOptions, + serviceChannel:serviceChannel + } + } + } + }).result.then(function () { + $scope.initData(); + }); + } + $scope.updateStatus = function(service){ + commonDialog.confirm({ + title: 'Update '+service.channel+ ' Incremental Service Status', + content: 'Are you sure update ' + service.channel + ' status?', + choises: [ + {label: 'Submit', className: 'btn-success', key: 1}, + {label: 'Cancel', className: 'btn-warning', key: 0, dismiss: true} + ] + }).then(function (choice) { + if (choice == 1) { + service.is_valid = !service.is_valid; + $http.put('/sys/partners/'+$scope.partner.client_moniker+'/incremental_service/status',service).then(function(res){ + commonDialog.alert({ + title: 'Success', + content: 'Update Service Successful!', + type: 'success' + }); + $scope.initData(); + },function (resp) { + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}); + $scope.initData(); + }) + } + }) + + } + }]); + app.controller('incrementalServiceDialogCtrl',['$scope','$http','params','commonDialog',function($scope ,$http,params,commonDialog){ + $scope.model ={}; + $scope.ctrl = {sending: false}; + $scope.isCreate = true; + $scope.initData =function(){ + $scope.isCreate = angular.copy(params.isCreate); + if($scope.isCreate ){ + $scope.model.incremental_mode = "1" + $scope.model.channel= angular.copy(params.channelOptions[0]) + $scope.model.channelOptions= angular.copy(params.channelOptions) + }else{ + $scope.model = angular.copy(params.serviceChannel); + $scope.model.incremental_mode = $scope.model.incremental_mode.toString() + } + } + $scope.initData(); + $scope.save = function(form){ + if (form.$invalid) { + angular.forEach(form, function (item, key) { + if (key.indexOf('$') < 0) { + item.$dirty = true; + } + }); + return; + } + $scope.ctrl.sending = true; + $http.post('/sys/partners/'+params.clientMoniker+'/incremental_service',$scope.model).then(function(res){ + commonDialog.alert({ + title: 'Success', + content: $scope.isCreate?'Create Service Successful!':'Update Service Successful!', + type: 'success' + }); + $scope.ctrl.sending = false; + $scope.$close(); + },function (resp) { + $scope.ctrl.sending = false; + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}); + }) + + } + }]) app.filter('bdOrg', function () { diff --git a/src/main/ui/static/payment/partner/templates/incremental_service.html b/src/main/ui/static/payment/partner/templates/incremental_service.html new file mode 100644 index 000000000..ad18b740c --- /dev/null +++ b/src/main/ui/static/payment/partner/templates/incremental_service.html @@ -0,0 +1,38 @@ +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    LogoChannelModeRate ValueAmountOperatorCreate TimeUpdate TimeOperation
    {{service.channel}}{{service.incremental_mode==1?'固定手续费':'固定金额扣款' }}{{service.incremental_rate_value!=null?service.incremental_rate_value+'%':'-'}}{{service.total_incremental_amount}}{{service.operator}}{{service.create_time}}{{service.update_time}} + | + {{service.is_valid?'禁用':'启用'}} +
    +
    +
    +
    diff --git a/src/main/ui/static/payment/partner/templates/incremental_service_dialog.html b/src/main/ui/static/payment/partner/templates/incremental_service_dialog.html new file mode 100644 index 000000000..0c2de0935 --- /dev/null +++ b/src/main/ui/static/payment/partner/templates/incremental_service_dialog.html @@ -0,0 +1,72 @@ + + + \ No newline at end of file diff --git a/src/main/ui/static/payment/partner/templates/partner_detail.html b/src/main/ui/static/payment/partner/templates/partner_detail.html index 42063210f..7e2ac4067 100644 --- a/src/main/ui/static/payment/partner/templates/partner_detail.html +++ b/src/main/ui/static/payment/partner/templates/partner_detail.html @@ -295,6 +295,9 @@
  • Permissions
  • +
  • + R Services +
  • diff --git a/src/main/ui/static/payment/tradelog/templates/balance_report.html b/src/main/ui/static/payment/tradelog/templates/balance_report.html index 2bce88813..1a1c61623 100644 --- a/src/main/ui/static/payment/tradelog/templates/balance_report.html +++ b/src/main/ui/static/payment/tradelog/templates/balance_report.html @@ -311,6 +311,10 @@ + + - {{trade.order_id2}} + {{trade.order_id2}} diff --git a/src/main/ui/static/payment/tradelog/templates/incremental_trade_logs.html b/src/main/ui/static/payment/tradelog/templates/incremental_trade_logs.html new file mode 100644 index 000000000..7c1a6700f --- /dev/null +++ b/src/main/ui/static/payment/tradelog/templates/incremental_trade_logs.html @@ -0,0 +1,436 @@ + +
    +

    Trade Logs

    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    +
    +
    + + +
    +
    + +
    +

    + All | + Wechat Pay | + Alipay | + AlipayOnline + | + BestPay | + JD Pay | + HF Pay | + RPay + | + Yeepay | + LakalaPay +

    +
    +
    +
    + +
    +
    +
    + +
    + ~ +
    + +
    + +
    + Today +
    +
    + Yesterday +
    + + + +
    + +
    +
    + +
    +

    + All + +

    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + Transaction Amount + + ( {{analysis.order_count}} Orders ) +
    +
    +
    +
    +
    + +
    + Input Amount + + ( {{analysis.pre_display_amount | currency:'pre authorization '}} ) +
    +
    +
    +
    +
    + +
    + Input Amount + + + ( {{analysis.pre_display_amount | currency:'pre authorization '}} ) + + + + ( {{analysis.pre_cny_display_amount | currency:'pre authorization '}} ) + +
    +
    +
    +
    +
    + +
    + Refund Amount + + + ({{analysis.pre_refund_fee|currency:'pre authorization '}}) + +
    +
    +
    +
    +
    + +
    + Merchants + + +
    +
    +
    +
    +
    + +
    + Incremental Surcharge + +
    +
    +
    +
    +
    +
    +
    +
    +

    Trade Orders + Pre Authorization: +

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PartnerOrder IDAmountInput AmountSystem RateSystem ProfitR跨境商城 RateR跨境商城 ProfitStatusCreate TimeOperation
    + + {{trade.short_name}}({{trade.client_moniker}}) + + + + + + + + + + + + + + + {{trade.order_id}} + + {{trade.total_amount|currency:trade.currency}} + (-{{trade.refund_fee}}) + {{(trade.surcharge_rate * 100 - trade.rate_value)| number : 2}}%{{(trade.total_surcharge-trade.incremental_surcharge) | number : 2 | currency:trade.currency}}{{trade.source}}:{{(trade.rate_value) | number : 2}}%{{trade.source}}:{{trade.incremental_surcharge | currency:trade.currency}} + + + +
    + +
    +
    + +
    +
    Total Records:{{pagination.totalCount}};Total + Pages:{{pagination.totalPages}} +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/src/main/ui/static/payment/tradelog/templates/partner_incremental_trade_logs.html b/src/main/ui/static/payment/tradelog/templates/partner_incremental_trade_logs.html new file mode 100644 index 000000000..1724000a2 --- /dev/null +++ b/src/main/ui/static/payment/tradelog/templates/partner_incremental_trade_logs.html @@ -0,0 +1,388 @@ + +
    +

    Incremental Orders

    + +
    +
    +
    +

    {{order.display_amount|currency:order.currency+' '}} Paid + Success!

    +

    Pay Time:{{order.pay_time_local}}

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + +
    +

    + All | + Wechat Pay | + Alipay | + AlipayOnline | + BestPay | + JD Pay | + HF Pay | + RPay+ | + Yeepay | + LakalaPay +

    +
    +
    +
    + +
    +
    +
    + +
    + ~ +
    + +
    + +
    + Today +
    +
    + Yesterday +
    + + + +
    + +
    + +
    +
    + +
    +

    + All + +

    +
    +
    +
    + +
    +

    + All + +

    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + Transaction Amount + + ( {{analysis.order_count}} Orders ) +
    +
    +
    + +
    +
    + +
    + Input Amount + + ( {{analysis.pre_display_amount | currency:'pre authorization '}} ) +
    +
    +
    +
    +
    + +
    + Input Amount + + + ( {{analysis.pre_display_amount | currency:'pre authorization '}} ) + + + + ( {{analysis.pre_cny_display_amount | currency:'pre authorization '}} ) + +
    +
    +
    +
    +
    + +
    + Refund Amount + + + ({{analysis.pre_refund_fee|currency:'pre authorization '}}) + +
    +
    +
    +
    +
    + +
    + Incremental Surcharge + + + ({{analysis.all_incremental_surcharge}} - {{analysis.refund_incremental_surcharge}} = {{analysis.incremental_surcharge}}) +
    +
    +
    +
    +
    +
    +
    +
    +

    Orders

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Client Order IDOrder IDAmountInput AmountSystem RateSystem ProfitIncremental RateIncremental ProfitStatusCreate TimeOperation
    + + + + + + + BestPay + Alipay + AlipayOnline + + + + + + {{trade.order_id}} + + {{trade.total_amount|currency:trade.currency+' '}} + (-{{trade.refund_fee}}) + {{(trade.surcharge_rate * 100 - trade.rate_value)| number : 2}}%{{(trade.total_surcharge-trade.incremental_surcharge) | number : 2 | currency:trade.currency}}{{trade.source}}:{{(trade.rate_value) | number : 2}}%{{trade.source}}:{{trade.incremental_surcharge | currency:trade.currency}}{{0.00 | currency:trade.currency}} + + + + +
    + +
    + +
    +
    +
    +
    +
    diff --git a/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html b/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html index a2f2bb24d..3477729cd 100644 --- a/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html +++ b/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html @@ -205,8 +205,12 @@ Currency Input Amount Total Amount - Surcharge Rate + Surcharge Amount + System Rate + System Profit + Incremental Rate + Incremental Profit Tax Amount Settle Amount Remark @@ -215,14 +219,20 @@ + + {{tr.order_id}} - + + {{(tr.surcharge_rate * 100 - tr.rate_value)| number : 2}}% + {{(tr.total_surcharge-tr.incremental_surcharge) | number : 2 | currency:tr.currency}} + {{tr.source}}:{{(tr.rate_value) | number : 2}}% + {{tr.source}}:{{tr.incremental_surcharge | currency:tr.currency}}{{0.00 | currency:tr.currency}} diff --git a/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html b/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html index 8b1c3f72b..b0b8c09bd 100644 --- a/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html +++ b/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html @@ -109,6 +109,19 @@ ng-model="params.searchText">
    +
    + +
    +

    + All | + System | + R跨境商城 +

    +
    +
    @@ -406,6 +419,8 @@ + + BestPay @@ -416,7 +431,7 @@ - {{trade.order_id}} + {{trade.order_id}} {{trade.total_amount|currency:trade.currency+' '}} diff --git a/src/main/ui/static/payment/tradelog/templates/trade_logs.html b/src/main/ui/static/payment/tradelog/templates/trade_logs.html index 5b33d2b14..1b2d1b30e 100644 --- a/src/main/ui/static/payment/tradelog/templates/trade_logs.html +++ b/src/main/ui/static/payment/tradelog/templates/trade_logs.html @@ -142,6 +142,19 @@
    --> +
    + +
    +

    + All | + System | + R跨境商城 +

    +
    +
    @@ -449,6 +462,10 @@ + + - {{trade.order_id}} + {{trade.order_id}} {{trade.total_amount|currency:trade.currency}} diff --git a/src/main/ui/static/payment/tradelog/tradelog-manage.js b/src/main/ui/static/payment/tradelog/tradelog-manage.js index 77b5e54e7..b07360021 100644 --- a/src/main/ui/static/payment/tradelog/tradelog-manage.js +++ b/src/main/ui/static/payment/tradelog/tradelog-manage.js @@ -13,11 +13,15 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { url: '/refundReview', templateUrl: '/static/payment/tradelog/templates/refund_review.html', controller: 'refundReviewCtrl' + }).state('incremental_trade', { + url: '/incrementalTrade', + templateUrl: '/static/payment/tradelog/templates/incremental_trade_logs.html', + controller: 'globalIncrementalTradeLogCtrl' }) }]); - app.controller('globalTradeLogCtrl', ['$scope', '$http', '$filter', 'commonDialog', 'refunder', 'orderService', - function ($scope, $http, $filter, commonDialog, refunder, orderService) { - $scope.params = {status: 'PAID',channel:'ALL', textType: 'all', datefrom: new Date(), dateto: new Date(),org_name:'ALL'}; + app.controller('globalTradeLogCtrl', ['$scope', '$http', '$filter', 'commonDialog', 'refunder', 'orderService','$sce', + function ($scope, $http, $filter, commonDialog, refunder, orderService,$sce) { + $scope.params = {source: 'ALL',status: 'PAID',channel:'ALL', textType: 'all', datefrom: new Date(), dateto: new Date(),org_name:'ALL'}; $scope.pagination = {}; $scope.today = new Date(); @@ -127,6 +131,7 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { } $http.get('/sys/trade_logs', {params: params}).then(function (resp) { $scope.tradeLogs = resp.data.data; + $scope.htmlToolst(); $scope.pagination = resp.data.pagination; $scope.analysis = resp.data.analysis; $scope.analysis.refund_fee = angular.copy(Math.abs($scope.analysis.refund_fee)); @@ -167,6 +172,30 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { $scope.$on('order_refunded', function () { $scope.loadTradeLogs(); }); + + $scope.htmlToolst = function(){ + for(var i=0;i< $scope.tradeLogs.length;i++){ + var tax_amount = $scope.tradeLogs[i].tax_amount; + var total_surcharge= $scope.tradeLogs[i].total_surcharge; + var incremental_surcharge = $scope.tradeLogs[i].incremental_surcharge; + var total_amount = $scope.tradeLogs[i].total_amount; + var display_amount = $scope.tradeLogs[i].display_amount; + var source = $scope.tradeLogs[i].source; + var system_surcharge = (total_surcharge-incremental_surcharge).toFixed(2); + var tip = '
    ' + + '
    手续费组成
    '+'
    '+ + '

    system:'+ system_surcharge +'

    ' + + '

    '+ source +':'+incremental_surcharge +'

    '; + if(total_surcharge < (total_amount-display_amount).toFixed(2)){ + tip = tip +'

    tax amount:'+ tax_amount +'

    '; + } + tip = tip + '
    '; + $scope.tradeLogs[i].htmlTooltip = $sce.trustAsHtml(tip); + } + } + + + } ]); app.controller('refundReviewCtrl', ['$rootScope', '$scope', '$http', '$state', '$filter', '$uibModal', 'commonDialog', 'orderService', @@ -295,6 +324,134 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { }); }; }]); + app.controller('globalIncrementalTradeLogCtrl', ['$scope', '$http', '$filter', 'commonDialog', 'refunder', 'orderService','$sce', + function ($scope, $http, $filter, commonDialog, refunder, orderService,$sce) { + $scope.params = {source: 'R跨境商城',status: 'PAID',channel:'ALL', textType: 'all', datefrom: new Date(), dateto: new Date(),org_name:'ALL'}; + $scope.pagination = {}; + $scope.today = new Date(); + + if (($scope.currentUser.role & parseInt('1000000000', 2)) > 0 && $scope.currentUser.org_id) { + $http.get('/sys/manager_accounts/group/group_bds').then(function (resp) { + $scope.bd_group_bds = resp.data; + $scope.chooseBD('all'); + }); + } + $scope.chooseBD = function (groupBD) { + $scope.params.onlyGroup=true; + if (groupBD == 'all') { + $scope.isAll = true; + $scope.chooseBDId=''; + delete $scope.params.group_bd; + } else { + $scope.chooseBDId=groupBD; + $scope.params.group_bd = groupBD; + $scope.isAll = false; + } + $scope.loadTradeLogs(); + }; + + $scope.chooseToday = function () { + $scope.params.datefrom = $scope.params.dateto = new Date(); + $scope.loadTradeLogs(1); + }; + $scope.chooseYesterday = function () { + var yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + $scope.params.datefrom = $scope.params.dateto = yesterday; + $scope.loadTradeLogs(1); + }; + $scope.chooseLast7Days = function () { + $scope.params.dateto = new Date(); + var day = new Date(); + day.setDate(day.getDate() - 7); + $scope.params.datefrom = day; + $scope.loadTradeLogs(1); + }; + $scope.thisMonth = function () { + $scope.params.dateto = new Date(); + var monthBegin = new Date(); + monthBegin.setDate(1); + $scope.params.datefrom = monthBegin; + $scope.loadTradeLogs(1); + }; + $scope.lastMonth = function () { + var monthFinish = new Date(); + monthFinish.setDate(0); + $scope.params.dateto = monthFinish; + var monthBegin = new Date(); + monthBegin.setDate(0); + monthBegin.setDate(1); + $scope.params.datefrom = monthBegin; + $scope.loadTradeLogs(1); + }; + if (($scope.currentUser.role & parseInt('1000011', 2)) > 0 && !$scope.currentUser.org_id) { + $scope.org2 = "ALL" + $http.get('/sys/orgs', {params: {}}).then(function (resp) { + $scope.orgs = resp.data; + }); + } + + $scope.loadOrgs = function () { + var params = angular.copy($scope.params); + $http.get('/sys/orgs/orgChild',{params: params}).then(function (resp) { + $scope.orgs_child = resp.data; + }) + }; + if(($scope.currentUser.role & parseInt('1000000000000', 2)) > 0 && ($scope.currentUser.org_id != null)){ + $scope.org2 = "ALL Organizations" + $scope.loadOrgs(); + } + + $scope.loadTradeLogs = function (page) { + var params = angular.copy($scope.params); + if (params.datefrom) { + params.datefrom = $filter('date')(params.datefrom, 'yyyyMMdd'); + } + if (params.dateto) { + params.dateto = $filter('date')(params.dateto, 'yyyyMMdd'); + } + params.page = page || $scope.pagination.page || 1; + if(params.gateway){ + if((params.gateway.sort().toString()!=[0,1].toString()) && (params.gateway.sort().toString()!=[5,6].toString())){ + delete params.gatewayChilds; + delete params.gatewayChild; + } + if(params.gatewayChilds){ + var exist = false + params.gatewayChilds.forEach(function (child) { + if(child==params.gatewayChild){ + exist = true + } + }) + if(!exist){ + params.gatewayChild = null + } + }else{ + delete params.gatewayChild; + } + }else{ + delete params.gatewayChilds; + delete params.gatewayChild; + } + $http.get('/sys/trade_logs/incremental', {params: params}).then(function (resp) { + $scope.tradeLogs = resp.data.data; + $scope.pagination = resp.data.pagination; + $scope.analysis = resp.data.analysis; + $scope.analysis.refund_fee = angular.copy(Math.abs($scope.analysis.refund_fee)); + }); + }; + + $scope.showTradeDetail = function (order) { + orderService.managerOrderDetail(order) + }; + $scope.loadTradeLogs(1); + + $scope.$on('order_refunded', function () { + $scope.loadTradeLogs(); + }); + + } + ]); return app; }); diff --git a/src/main/ui/static/payment/tradelog/tradelog.js b/src/main/ui/static/payment/tradelog/tradelog.js index 710c2c71a..ff3dd0a0f 100644 --- a/src/main/ui/static/payment/tradelog/tradelog.js +++ b/src/main/ui/static/payment/tradelog/tradelog.js @@ -10,11 +10,15 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { url: '/trade', templateUrl: '/static/payment/tradelog/templates/partner_trade_logs.html', controller: 'tradeLogCtrl' + }).state('incremental_trade', { + url: '/IncrementalTrade', + templateUrl: '/static/payment/tradelog/templates/partner_incremental_trade_logs.html', + controller: 'IncrementalTradeLogCtrl' }) }]); - app.controller('tradeLogCtrl', ['$scope', '$http', '$filter', '$timeout', 'partnerRefunder', 'orderService', 'commonDialog', - function ($scope, $http, $filter, $timeout, partnerRefunder, orderService, commonDialog) { - $scope.params = {status: 'PAID', channel :'ALL' ,textType: 'all', datefrom: new Date(), dateto: new Date()}; + app.controller('tradeLogCtrl', ['$scope', '$http', '$filter', '$timeout', 'partnerRefunder', 'orderService', 'commonDialog','$sce', + function ($scope, $http, $filter, $timeout, partnerRefunder, orderService, commonDialog,$sce) { + $scope.params = {source: 'ALL',status: 'PAID', channel :'ALL' ,textType: 'all', datefrom: new Date(), dateto: new Date()}; $scope.pagination = {}; $scope.today = new Date(); $scope.isAll = true; @@ -92,12 +96,49 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { } $http.get('/client/partner_info/trade_logs', {params: params}).then(function (resp) { $scope.tradeLogs = resp.data.data; + $scope.htmlToolst(); $scope.pagination = resp.data.pagination; $scope.analysis = resp.data.analysis; $scope.analysis.refund_fee = angular.copy(Math.abs($scope.analysis.refund_fee)); }); }; + /*$scope.htmlToolst = function(){ + for(var i=0;i< $scope.tradeLogs.length;i++){ + var tax_amount = $scope.tradeLogs[i].tax_amount; + var total_surcharge= $scope.tradeLogs[i].total_surcharge; + var incremental_surcharge = $scope.tradeLogs[i].incremental_surcharge; + var system_surcharge = (total_surcharge-incremental_surcharge).toFixed(2); + $scope.tradeLogs[i].htmlTooltip = $sce.trustAsHtml('
    ' + + '
    手续费组成
    '+'
    '+ + '

    system:'+ system_surcharge +'

    ' + + '

    R跨境商城:'+ incremental_surcharge +'

    ' + + '

    tax amount:'+ tax_amount +'

    ' + + '
    '); + } + };*/ + + $scope.htmlToolst = function(){ + for(var i=0;i< $scope.tradeLogs.length;i++){ + var tax_amount = $scope.tradeLogs[i].tax_amount; + var total_surcharge= $scope.tradeLogs[i].total_surcharge; + var incremental_surcharge = $scope.tradeLogs[i].incremental_surcharge; + var total_amount = $scope.tradeLogs[i].total_amount; + var display_amount = $scope.tradeLogs[i].display_amount; + var source = $scope.tradeLogs[i].source; + var system_surcharge = (total_surcharge-incremental_surcharge).toFixed(2); + var tip = '
    ' + + '
    手续费组成
    '+'
    '+ + '

    system:'+ system_surcharge +'

    ' + + '

    '+ source +':'+incremental_surcharge +'

    '; + if(total_surcharge < (total_amount-display_amount).toFixed(2)){ + tip = tip +'

    tax amount:'+ tax_amount +'

    '; + } + tip = tip + '
    '; + $scope.tradeLogs[i].htmlTooltip = $sce.trustAsHtml(tip); + } + } + $scope.gatewaySelected = function (arr) { return $scope.params.gateway != null && $scope.params.gateway.filter(function (gateway) { return arr.indexOf(gateway) >= 0 @@ -254,5 +295,221 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { } }]); + app.controller('IncrementalTradeLogCtrl', ['$scope', '$http', '$filter', '$timeout', 'partnerRefunder', 'orderService', 'commonDialog', + function ($scope, $http, $filter, $timeout, partnerRefunder, orderService, commonDialog) { + $scope.params = {source: 'R跨境商城',status: 'PAID', channel :'ALL' ,textType: 'all', datefrom: new Date(), dateto: new Date()}; + $scope.pagination = {}; + $scope.today = new Date(); + $scope.isAll = true; + $scope.isLevel3All = true; + $scope.device_isAll = true; + $scope.dev_params = {client_type:'sunmi',limit:100}; + $scope.clients = [$scope.currentUser.client]; + $scope.showLevel3Clients = false; + + + $scope.chooseToday = function () { + $scope.params.datefrom = $scope.params.dateto = new Date(); + $scope.loadTradeLogs(1); + }; + $scope.chooseYesterday = function () { + var yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + $scope.params.datefrom = $scope.params.dateto = yesterday; + $scope.loadTradeLogs(1); + }; + $scope.chooseLast7Days = function () { + $scope.params.dateto = new Date(); + var day = new Date(); + day.setDate(day.getDate() - 7); + $scope.params.datefrom = day; + $scope.loadTradeLogs(1); + }; + $scope.thisMonth = function () { + $scope.params.dateto = new Date(); + var monthBegin = new Date(); + monthBegin.setDate(1); + $scope.params.datefrom = monthBegin; + $scope.loadTradeLogs(1); + }; + $scope.lastMonth = function () { + var monthFinish = new Date(); + monthFinish.setDate(0); + $scope.params.dateto = monthFinish; + var monthBegin = new Date(); + monthBegin.setDate(0); + monthBegin.setDate(1); + $scope.params.datefrom = monthBegin; + $scope.loadTradeLogs(1); + }; + $scope.loadTradeLogs = function (page) { + var params = angular.copy($scope.params); + if (params.datefrom) { + params.datefrom = $filter('date')(params.datefrom, 'yyyyMMdd'); + } + if (params.dateto) { + params.dateto = $filter('date')(params.dateto, 'yyyyMMdd'); + } + params.page = page || $scope.pagination.page || 1; + $http.get('/client/partner_info/incremental_trade_logs', {params: params}).then(function (resp) { + $scope.tradeLogs = resp.data.data; + $scope.pagination = resp.data.pagination; + $scope.analysis = resp.data.analysis; + $scope.analysis.refund_fee = angular.copy(Math.abs($scope.analysis.refund_fee)); + }); + }; + + $scope.gatewaySelected = function (arr) { + return $scope.params.gateway != null && $scope.params.gateway.filter(function (gateway) { + return arr.indexOf(gateway) >= 0 + }).length > 0 + }; + $scope.showTradeDetail = function (order) { + orderService.clientOrderDetail(order) + }; + $scope.showPRefundLog = function (orderId) { + partnerRefunder.prefunded(orderId); + }; + $scope.newPRefund = function (orderId) { + partnerRefunder.prefund(orderId).then(function () { + $scope.loadTradeLogs(); + }); + }; + $scope.releasePreAuth = function (orderId) { + commonDialog.confirm({ + title: 'Pre Authorization Completion', + content: 'This bill will be taken into settlement, or you will be able to make a refund order. Are you sure?' + }).then(function () { + $http.put('/client/partner_info/trade_logs/' + orderId + '/release_preauth').then(function (resp) { + $scope.loadTradeLogs(); + }, function (resp) { + commonDialog.alert({title: 'Error!', content: resp.data.message, type: 'error'}) + }) + }) + }; + $scope.alerts = []; + $scope.$on('pe_order_paid', function (evt, order) { + $scope.alerts.push(order); + $timeout(function () { + $scope.alerts.splice(0, 1); + }, 10000); + $scope.loadTradeLogs(); + }); + $scope.chooseClient = function (client) { + if (client == 'all') { + $scope.params.client_ids = angular.copy($scope.clientIds); + $scope.isAll = true; + $scope.chooseClientId = ''; + $scope.dev_params.client_ids = angular.copy($scope.clientIds); + $scope.showLevel3Clients = false; + $scope.listDevices(); + } else if (client.level3Clients) { + $scope.chooseClientId = client.client_id; + $scope.showLevel3Clients = true; + $scope.level3Clients = client.level3Clients; + $scope.isAll = false; + $scope.level3ClientIds = []; + $scope.level3ClientIds.push(client.client_id); + client.level3Clients.forEach(function (client) { + $scope.level3ClientIds.push(client.client_id); + }); + $scope.chooseLevel3Client("all"); + return; + } else { + $scope.chooseClientId = client.client_id; + $scope.params.client_ids = [client.client_id]; + $scope.isAll = false; + $scope.dev_params.client_ids = [client.client_id]; + $scope.showLevel3Clients = false; + $scope.listDevices(); + } + $scope.loadTradeLogs(); + }; + + $scope.chooseLevel3Client = function (client) { + if (client == 'all') { + $scope.params.client_ids = angular.copy($scope.level3ClientIds); + $scope.isLevel3All = true; + $scope.chooseLevel3ClientId = ''; + $scope.dev_params.client_ids = angular.copy($scope.level3ClientIds); + $scope.listDevices(); + } else { + $scope.chooseLevel3ClientId = client.client_id; + $scope.params.client_ids = [client.client_id]; + $scope.isLevel3All = false; + $scope.dev_params.client_ids = [client.client_id]; + $scope.listDevices(); + } + $scope.loadTradeLogs(); + }; + + $scope.listDevices = function () { + var params = angular.copy($scope.dev_params) + $http.get('/client/partner_info/devices', {params: params}).then(function (resp) { + $scope.devices = resp.data.data; + }) + }; + $scope.chooseDevices = function (dev_id) { + if(dev_id == 'all'){ + $scope.chooseDevice_id = ''; + $scope.params.dev_id = null; + $scope.device_isAll = true; + $scope.loadTradeLogs(1); + }else { + $scope.chooseDevice_id = dev_id; + $scope.params.dev_id = dev_id; + $scope.device_isAll = false; + $scope.loadTradeLogs(1); + } + }; + $scope.listDevices(); + + if ($scope.currentUser.client.has_children) { + $http.get('/client/partner_info/sub_partners').then(function (resp) { + var clientList = resp.data; + clientList.forEach(function (client) { + $scope.clients.push(client); + }); + $scope.clientIds = []; + $scope.clients.forEach(function (client) { + $scope.clientIds.push(client.client_id); + if (client.level3Clients) { + client.level3Clients.forEach(function (level3Client) { + $scope.clientIds.push(level3Client.client_id); + }); + } + }); + $scope.params.client_ids = angular.copy($scope.clientIds); + + $scope.loadTradeLogs(1); + //console.log($rootScope.currentUser.client.clientList); + }) + }else{ + $scope.loadTradeLogs(1); + } + + $scope.fullReleasePreAuth = function (){ + var params = angular.copy($scope.params); + if (params.datefrom) { + params.datefrom = $filter('date')(params.datefrom, 'yyyyMMdd'); + } + if (params.dateto) { + params.dateto = $filter('date')(params.dateto, 'yyyyMMdd'); + } + commonDialog.confirm({ + title: 'All Pre Authorization Completion', + content: 'These pre authorization orders will be taken into settlement, or you will be able to make a refund order. Are you sure?' + }).then(function(){ + $http.put('/client/partner_info/trade_logs/full_release_preauth',params).then(function (resp){ + $scope.loadTradeLogs(1); + alert("Success"); + },function (resp) { + commonDialog.alert({title: 'Error!', content: resp.data.message, type: 'error'}) + }) + }); + } + + }]); + return app; -}); \ No newline at end of file +}); diff --git a/src/main/ui/static/payment/tradelog/transflow.js b/src/main/ui/static/payment/tradelog/transflow.js index 540409d51..0d79ae790 100644 --- a/src/main/ui/static/payment/tradelog/transflow.js +++ b/src/main/ui/static/payment/tradelog/transflow.js @@ -12,7 +12,7 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { controller: 'balanceListCtrl' }) }]); - app.controller('balanceListCtrl', ['$scope', '$http', '$filter', '$timeout', 'refunder', 'orderService', function ($scope, $http, $filter, $timeout, refunder) { + app.controller('balanceListCtrl', ['$scope', '$http', '$filter', '$timeout', 'refunder', 'orderService','$sce', function ($scope, $http, $filter, $timeout, refunder,orderService,$sce) { $scope.params = {}; $scope.pagination = {}; $scope.params.clearing_status = -1; @@ -91,6 +91,7 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { params.page = page || $scope.pagination.page || 1; $http.get('/client/trans_flow', {params: params}).then(function (resp) { $scope.tradeLogs = resp.data.data; + $scope.htmlToolst(); $scope.pagination = resp.data.pagination; $scope.analysis = resp.data.analysis; $scope.analysis.refund_fee = angular.copy(Math.abs($scope.analysis.refund_fee)); @@ -214,7 +215,29 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { }else { $scope.chooseLast7Days(); } + + $scope.htmlToolst = function(){ + for(var i=0;i< $scope.tradeLogs.length;i++){ + var tax_amount = $scope.tradeLogs[i].tax_amount; + var total_surcharge= $scope.tradeLogs[i].total_surcharge; + var incremental_surcharge = $scope.tradeLogs[i].incremental_surcharge; + var channel_surcharge = $scope.tradeLogs[i].channel_surcharge; + var royal_surcharge = $scope.tradeLogs[i].royal_surcharge; + var system_surcharge = (total_surcharge-incremental_surcharge).toFixed(2); + var channel = $scope.tradeLogs[i].source; + var tip = '
    ' + + '
    手续费组成
    '+'
    '+ + '

    system:'+ system_surcharge +'

    ' + + '

    '+channel+':'+ incremental_surcharge +'

    '; + if(total_surcharge <= (royal_surcharge+incremental_surcharge+channel_surcharge+tax_amount)){ + tip = tip +'

    tax amount:'+ tax_amount +'

    '; + } + tip = tip + '
    '; + $scope.tradeLogs[i].htmlTooltip = $sce.trustAsHtml(tip); + } + }; + }]); return app; -}); \ No newline at end of file +});