diff --git a/pom.xml b/pom.xml index 9ad85877e..fcc8224a2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ au.com.royalpay.payment payment-parent - 0.2.0 + 0.2.0-dev 4.0.0 @@ -156,6 +156,7 @@ gson 2.2.4 + junit @@ -164,7 +165,11 @@ test - + + com.taobao.api + taobao-sdk-java-auto + 1502853394064-20180710 + diff --git a/src/db/modify.sql b/src/db/modify.sql index af8eaf18f..b5b1a885c 100644 --- a/src/db/modify.sql +++ b/src/db/modify.sql @@ -660,3 +660,13 @@ CREATE TABLE `act_charity` ( `active_time` date DEFAULT NULL, PRIMARY KEY (`client_moniker`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `risk_attention_merchants` ( + `client_id` int(11) NOT NULL, + `client_moniker` varchar(20) NOT NULL, + `is_valid` tinyint(1) NOT NULL DEFAULT 1, + `create_time` datetime NOT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`client_id`), + KEY `client_moniker` (`client_moniker`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/src/main/java/au/com/royalpay/payment/manage/PaymentManageApplication.java b/src/main/java/au/com/royalpay/payment/manage/PaymentManageApplication.java index 020502652..f6b97e01f 100644 --- a/src/main/java/au/com/royalpay/payment/manage/PaymentManageApplication.java +++ b/src/main/java/au/com/royalpay/payment/manage/PaymentManageApplication.java @@ -72,6 +72,6 @@ public class PaymentManageApplication { @Bean public MongoClientOptions mongoOptions() { - return MongoClientOptions.builder().maxConnectionIdleTime(6000).build(); + return MongoClientOptions.builder().maxConnectionIdleTime(6000).socketTimeout(3000).maxWaitTime(3000).serverSelectionTimeout(3000).build(); } } 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 c3cfc669f..c96ee2e82 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 @@ -149,4 +149,11 @@ public interface RetailAppService { void applyToCompliance(JSONObject device); JSONObject sendVerifyEmail(JSONObject device); + + JSONObject openimCheck(JSONObject device); + + void addUnreadMsg(JSONObject device,JSONObject param); + + JSONObject getRefunds(JSONObject device, AppQueryBean appQueryBean); + } 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 96315216e..90f12b218 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 @@ -30,6 +30,7 @@ import au.com.royalpay.payment.manage.merchants.entity.impls.SwitchPermissionMod import au.com.royalpay.payment.manage.notice.beans.NoticeInfo; import au.com.royalpay.payment.manage.notice.core.NoticeManage; import au.com.royalpay.payment.manage.notice.core.NoticePartner; +import au.com.royalpay.payment.manage.openim.core.CustomerServiceService; import au.com.royalpay.payment.manage.pushMessage.APNSMessageHelper; import au.com.royalpay.payment.manage.pushMessage.bean.AppManagerMessageBuilder; import au.com.royalpay.payment.manage.signin.beans.ChangePwdBean; @@ -37,6 +38,7 @@ import au.com.royalpay.payment.manage.signin.core.SignInAccountService; import au.com.royalpay.payment.manage.signin.core.impls.SignInAccountServiceImpl; import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery; import au.com.royalpay.payment.manage.tradelog.core.TradeLogService; +import au.com.royalpay.payment.manage.tradelog.refund.RefundService; import au.com.royalpay.payment.tools.cms.RoyalPayCMSSupport; import au.com.royalpay.payment.tools.device.DeviceSupport; import au.com.royalpay.payment.tools.device.message.AppMessage; @@ -163,9 +165,13 @@ public class RetailAppServiceImp implements RetailAppService { @Resource private ClientMapper clientMapper; @Resource + private RefundService refundService; + @Resource private ClientModifySupport clientModifySupport; @Resource private ClearingLogMapper clearingLogMapper; + @Resource + private CustomerServiceService customerServiceService; private Map senderMap = new HashMap<>(); private final String fileName[] = { "client_bank_file", "client_id_file", "client_company_file" }; @@ -329,11 +335,11 @@ public class RetailAppServiceImp implements RetailAppService { } tradeLogQuery.setClient_ids(appQueryBean.getApp_client_ids().split(",")); JSONObject client = clientManager.getClientInfo(Integer.parseInt(tradeLogQuery.getClient_ids()[0])); - if(client==null){ + if (client == null) { throw new NotFoundException("Client Not Exists"); } device.put("client_moniker", client.getString("client_moniker")); - device.put("client",client); + device.put("client", client); tradeLogService.exportTransFlow(tradeLogQuery, device, httpResponse); } @@ -410,6 +416,30 @@ public class RetailAppServiceImp implements RetailAppService { return result; } + @Override + public JSONObject openimCheck(JSONObject device) { + JSONObject account = clientAccountMapper.findById(device.getString("account_id")); + return customerServiceService.checkAndSavePartner(account); + } + + //暂不使用 + @Override + public void addUnreadMsg(JSONObject device, JSONObject param) { + customerServiceService.addUnreadMsg(param); + } + + @Override + public JSONObject getRefunds(JSONObject device, AppQueryBean appQueryBean) { + JSONObject appParam = appQueryBean.toParams(); + JSONObject param = new JSONObject(); + if(appParam.get("client_ids")==null) { + param.put("client_id", device.getIntValue("client_id")); + } + param.put("start_time",appParam.getDate("begin")); + param.put("end_time",appParam.getDate("end")); + return refundService.listUnionAllApply(param, new PageBounds(appQueryBean.getPage(), appQueryBean.getLimit())); + } + @Override public void updateClient(JSONObject device, AppClientBean appClientBean) { String clientType = device.getString("client_type"); @@ -554,11 +584,11 @@ public class RetailAppServiceImp implements RetailAppService { JSONObject result = PageListUtils.buildPageListResult(logs); if (appQueryBean.getPage() == 1) { if (!logs.isEmpty() && logs.size() > 0) { - JSONObject clearingLog = clearingLogMapper.findById(logs.get(0).getIntValue("clearing_id")); - if(clearingLog.getBoolean("editable")){ - result.put("padding", true); - logs.get(0).put("padding",true); - } + JSONObject clearingLog = clearingLogMapper.findById(logs.get(0).getIntValue("clearing_id")); + if (clearingLog.getBoolean("editable")) { + result.put("padding", true); + logs.get(0).put("padding", true); + } } } return result; @@ -1160,7 +1190,7 @@ public class RetailAppServiceImp implements RetailAppService { JSONObject unReadParams = new JSONObject(); unReadParams.put("client_id", client_id); unReadParams.put("status", 0); - unReadParams.put("is_to_app",1); + unReadParams.put("is_to_app", 1); int counts = noticePartnerMapper.countNoticePartner(unReadParams); notice.put("unReadCounts", counts); notice.put("type", "notice"); @@ -1205,7 +1235,7 @@ public class RetailAppServiceImp implements RetailAppService { String clientType = device.getString("client_type"); deviceSupport.findRegister(clientType); JSONObject bankInfo = clientManager.getBankAccountByClientId(device.getIntValue("client_id")); - bankInfo.put("account_no","***"+ StringUtils.substring(bankInfo.getString("account_no"), -4)); + bankInfo.put("account_no", "***" + StringUtils.substring(bankInfo.getString("account_no"), -4)); return bankInfo; } @@ -1300,7 +1330,7 @@ public class RetailAppServiceImp implements RetailAppService { public JSONObject listDailyTransactions(String dateStr, String timezone, boolean thisDevOnly, JSONObject device, String app_client_ids) { try { JSONObject client = clientManager.getClientInfo(device.getIntValue("client_id")); - if(client==null){ + if (client == null) { return null; } timezone = client.getString("timezone"); 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 9caa888d2..b31557c8e 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,34 +1,5 @@ package au.com.royalpay.payment.manage.appclient.web; -import static au.com.royalpay.payment.tools.CommonConsts.RETAIL_DEVICE; - -import java.math.BigDecimal; -import java.text.ParseException; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; - -import org.apache.commons.lang3.time.DateUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -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 org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.ModelAndView; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; - import au.com.royalpay.payment.core.exceptions.ParamInvalidException; import au.com.royalpay.payment.manage.activities.app_index.core.AppActService; import au.com.royalpay.payment.manage.activities.monsettledelay.core.ActMonDelaySettleService; @@ -55,6 +26,35 @@ import au.com.royalpay.payment.tools.http.HttpUtils; import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig; import au.com.royalpay.payment.tools.merchants.beans.UpdateSurchargeDTO; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import org.apache.commons.lang3.time.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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 org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +import static au.com.royalpay.payment.tools.CommonConsts.RETAIL_DEVICE; + /** * Created by yishuqian on 28/03/2017. */ @@ -109,6 +109,10 @@ public class RetailAppController { public JSONObject getTradeCommonData(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) { return retailAppService.getTradeCommonDate(device, appQueryBean); } + @RequestMapping(value = "/trade/refund", method = RequestMethod.GET) + public JSONObject getRefunds(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) { + return retailAppService.getRefunds(device, appQueryBean); + } @RequestMapping(value = "/trade_common_new", method = RequestMethod.GET) public JSONObject getTradeCommonDataNew(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) { @@ -540,4 +544,14 @@ public class RetailAppController { return attachmentClient.uploadFile(file,false); } + @RequestMapping(value = "/openim/check",method = RequestMethod.POST) + public JSONObject openimCheck(@ModelAttribute(RETAIL_DEVICE) JSONObject device) { + return retailAppService.openimCheck(device); + } + + @RequestMapping(value = "/openim/chat",method = RequestMethod.POST) + public void openimChat(@ModelAttribute(RETAIL_DEVICE) JSONObject device,@RequestBody JSONObject param) { + retailAppService.addUnreadMsg(device,param); + } + } diff --git a/src/main/java/au/com/royalpay/payment/manage/custom/core/CustomService.java b/src/main/java/au/com/royalpay/payment/manage/custom/core/CustomService.java new file mode 100644 index 000000000..7d7708b0a --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/custom/core/CustomService.java @@ -0,0 +1,8 @@ +package au.com.royalpay.payment.manage.custom.core; + +/** + * @author kira + * @date 2018/7/27 + */ +public interface CustomService { +} diff --git a/src/main/java/au/com/royalpay/payment/manage/custom/core/impl/CustomServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/custom/core/impl/CustomServiceImpl.java new file mode 100644 index 000000000..4ee4cc1c8 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/custom/core/impl/CustomServiceImpl.java @@ -0,0 +1,10 @@ +package au.com.royalpay.payment.manage.custom.core.impl; + +import au.com.royalpay.payment.manage.custom.core.CustomService; + +/** + * @author kira + * @date 2018/7/27 + */ +public class CustomServiceImpl implements CustomService { +} diff --git a/src/main/java/au/com/royalpay/payment/manage/custom/package-info.java b/src/main/java/au/com/royalpay/payment/manage/custom/package-info.java new file mode 100644 index 000000000..dfb3f0e26 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/custom/package-info.java @@ -0,0 +1,5 @@ +/** + * @author kira + * @date 2018/7/27 + */ +package au.com.royalpay.payment.manage.custom; \ No newline at end of file diff --git a/src/main/java/au/com/royalpay/payment/manage/customers/core/impls/EncourageUseProcessor.java b/src/main/java/au/com/royalpay/payment/manage/customers/core/impls/EncourageUseProcessor.java index a2fedb4cd..9576ad6b2 100644 --- a/src/main/java/au/com/royalpay/payment/manage/customers/core/impls/EncourageUseProcessor.java +++ b/src/main/java/au/com/royalpay/payment/manage/customers/core/impls/EncourageUseProcessor.java @@ -85,7 +85,7 @@ public class EncourageUseProcessor implements Ordered, EncourageService { @Override public JSONObject takeEncourageMoney(String orderId, String visitorOpenId) { - logger.info("=====takeEncourageMoney+" + orderId); + logger.info("=====takeEncourageMoney+"+orderId); JSONObject config = currentEncourageConfig(); if (config != null) { if (customerEncourageMoneyAccessLogMapper.findByOrderId(orderId) != null) { diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/AliforexcelServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/AliforexcelServiceImpl.java index 172311d44..845c76876 100644 --- a/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/AliforexcelServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/AliforexcelServiceImpl.java @@ -26,8 +26,8 @@ public class AliforexcelServiceImpl implements AliforexcelService { public JSONObject listClients(HttpServletResponse httpResponse,JSONObject manager, AliExcel query) { OutputStream ous = null; try{ - JSONObject params = query.toJsonParam(); - List partners = clientMapper.passPartners(params); + JSONObject params = query.toJsonParam(); + List partners = clientMapper.passPartners(params); httpResponse.setContentType("application/octet-stream;"); httpResponse.setCharacterEncoding("utf-8"); String fileName = "支付宝进件专用--"; diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/log/LogClientSubMerchantIdMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/log/LogClientSubMerchantIdMapper.java index 9bb01369e..d1d46b979 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/log/LogClientSubMerchantIdMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/log/LogClientSubMerchantIdMapper.java @@ -4,6 +4,7 @@ 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 com.github.miemiedev.mybatis.paginator.domain.PageBounds; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -15,5 +16,5 @@ public interface LogClientSubMerchantIdMapper { void save(JSONObject log); @AutoSql(type = SqlType.SELECT) - List listLogsByClientId(@Param("client_id") int client_id); + List listLogsByClientId(@Param("client_id") int client_id, PageBounds pageBounds); } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/RefundMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/RefundMapper.java index 72ba19086..64ff2ecd8 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/RefundMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/RefundMapper.java @@ -1,16 +1,19 @@ package au.com.royalpay.payment.manage.mappers.payment; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.alibaba.fastjson.JSONObject; +import com.github.miemiedev.mybatis.paginator.domain.PageBounds; +import com.github.miemiedev.mybatis.paginator.domain.PageList; + 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 com.github.miemiedev.mybatis.paginator.domain.PageBounds; -import org.apache.ibatis.annotations.Param; - -import java.math.BigDecimal; -import java.util.Date; -import java.util.List; /** * Created by yixian on 2016-06-25. @@ -55,4 +58,7 @@ public interface RefundMapper { List listRefundDate(@Param("begin") Date begin, @Param("end") Date end); List listClientRefund(JSONObject param); + + PageList listUnionAllApply(JSONObject params, PageBounds pagination); + } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskAttentionMerchantsAMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskAttentionMerchantsAMapper.java new file mode 100644 index 000000000..46f817c70 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskAttentionMerchantsAMapper.java @@ -0,0 +1,31 @@ +package au.com.royalpay.payment.manage.mappers.risk; + +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 com.github.miemiedev.mybatis.paginator.domain.PageBounds; +import com.github.miemiedev.mybatis.paginator.domain.PageList; +import org.apache.ibatis.annotations.Param; + +/** + * Create by yixian at 2017-12-21 11:45 + */ +@AutoMapper(tablename = "risk_attention_merchants", pkName = "client_id") +public interface RiskAttentionMerchantsAMapper { + @AutoSql(type = SqlType.UPDATE) + void update(JSONObject client); + + @AutoSql(type = SqlType.INSERT) + void save(JSONObject client); + + @AutoSql(type = SqlType.SELECT) + JSONObject findById(@Param("id") String id); + + @AutoSql(type = SqlType.SELECT) + JSONObject findByClientMoniker(@Param("client_moniker") String client_moniker); + + @AutoSql(type = SqlType.SELECT) + PageList query(JSONObject params, PageBounds pagination); + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.java index f3e3428d3..f8e8db188 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.java @@ -75,4 +75,5 @@ public interface ClientAccountMapper { @AdvanceSelect(addonWhereClause = "is_valid=1 and role=1 and wechat_openid is not null and wx_unionid is null", excludeColumns = {"salt", "password_hash"}) List listNullUnionIdAccounts(); + List query(JSONObject params); } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ManagerMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ManagerMapper.java index de604e416..712ac48ca 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ManagerMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ManagerMapper.java @@ -6,6 +6,7 @@ import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; import cn.yixblog.support.mybatis.autosql.annotations.SqlType; import com.alibaba.fastjson.JSONObject; import com.github.miemiedev.mybatis.paginator.domain.PageBounds; +import com.github.miemiedev.mybatis.paginator.domain.PageList; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -32,7 +33,7 @@ public interface ManagerMapper { @AutoSql(type = SqlType.UPDATE) void update(JSONObject account); - List listAvailable(JSONObject params, PageBounds pageBounds); + PageList listAvailable(JSONObject params, PageBounds pageBounds); @AutoSql(type = SqlType.INSERT) void save(JSONObject manager); @@ -59,4 +60,6 @@ public interface ManagerMapper { List findByIds(List ids); List listOpenIdByRole(@Param("mask") int mask); + + List listServants(@Param("mask") int mask); } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/SysCustomerServiceMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/SysCustomerServiceMapper.java new file mode 100644 index 000000000..dc31df478 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/SysCustomerServiceMapper.java @@ -0,0 +1,37 @@ +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 yixian on 2016-06-29. + */ +@AutoMapper(tablename = "sys_customer_service", pkName = "manager_id") +public interface SysCustomerServiceMapper { + List findOnline(); + + @AutoSql(type = SqlType.SELECT) + JSONObject findByManagerId(@Param("manager_id")String manager_id); + + @AutoSql(type = SqlType.INSERT) + void save(JSONObject record); + + @AutoSql(type = SqlType.UPDATE) + void update(JSONObject record); + + void onoff(@Param("managerId") String managerId, @Param("status") int status); + + @AutoSql(type = SqlType.SELECT) + List findAllWithDetail(); + + @AutoSql(type = SqlType.COUNT) + int countAll(); +} + 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 de4e4b37a..a5d36dfeb 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 @@ -333,7 +333,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid int role = manager != null ? manager.getIntValue("role") : 0; if (manager != null) { if (ManagerRole.OPERATOR.hasRole(role)) { - List log = logClientSubMerchantIdMapper.listLogsByClientId(client.getInteger("client_id")); + List log = logClientSubMerchantIdMapper.listLogsByClientId(client.getInteger("client_id"),new PageBounds(Order.formString("create_time.desc"))); client.put("sub_merchant_id_log", log.size() > 0 ? true : false); } if (ManagerRole.BD_USER.hasRole(role)) { @@ -3579,7 +3579,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid throw new InvalidShortIdException(); } checkOrgPermission(manager, client); - return logClientSubMerchantIdMapper.listLogsByClientId(client.getInteger("client_id")); + return logClientSubMerchantIdMapper.listLogsByClientId(client.getInteger("client_id"),new PageBounds(Order.formString("create_time.desc"))); } @Override diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/entity/ClientConfigModify.java b/src/main/java/au/com/royalpay/payment/manage/merchants/entity/ClientConfigModify.java index 207ce00b1..0320aa2c5 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/entity/ClientConfigModify.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/entity/ClientConfigModify.java @@ -35,7 +35,6 @@ public abstract class ClientConfigModify { protected abstract JSONObject getModifyResult(); - @Transactional public int doModify(MerchantInfoProvider merchantInfoProvider, ClientConfigMapper clientConfigMapper, ClientMapper clientMapper, MongoTemplate mongoTemplate) { JSONObject client = merchantInfoProvider.getClientInfoByMoniker(clientMoniker); JSONObject modifyResult = getModifyResult(); 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 2697b2c4c..00675ce7a 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 @@ -536,7 +536,7 @@ public class PartnerManageController { clientManager.removeSub(clientMoniker,manager); } - @ManagerMapping(value = "/{clientMoniker}/hf", method = RequestMethod.PUT, role = {ManagerRole.SERVANT, ManagerRole.DEVELOPER}) + @ManagerMapping(value = "/{clientMoniker}/hf", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR}) public void switchHfPermission(@PathVariable String clientMoniker, @RequestBody JSONObject pass, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { clientManager.switchHfLink(manager, clientMoniker, pass.getBooleanValue("allow")); } diff --git a/src/main/java/au/com/royalpay/payment/manage/openim/OpenimController.java b/src/main/java/au/com/royalpay/payment/manage/openim/OpenimController.java new file mode 100644 index 000000000..834775740 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/openim/OpenimController.java @@ -0,0 +1,73 @@ +package au.com.royalpay.payment.manage.openim; + +import au.com.royalpay.payment.manage.openim.core.CustomerServiceService; +import au.com.royalpay.payment.manage.permission.manager.ManagerMapping; +import au.com.royalpay.payment.manage.permission.manager.RequireManager; +import au.com.royalpay.payment.manage.signin.beans.LoginInfo; +import au.com.royalpay.payment.manage.signin.core.SignInStatusManager; +import au.com.royalpay.payment.tools.CommonConsts; +import au.com.royalpay.payment.tools.http.HttpUtils; +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.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 java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +/** + * @author kira + * @date 2018/7/11 + */ +@RestController +@RequestMapping("/sys/openim") +public class OpenimController { + @Resource + private SignInStatusManager signInStatusManager; + @Resource + private CustomerServiceService customerServiceService; + + @RequestMapping(value = "/check", method = RequestMethod.PUT) + @RequireManager + public JSONObject sendMsg(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + return customerServiceService.checkAndSaveManager(manager); + } + + @RequestMapping(value = "/signin", method = RequestMethod.POST) + public void partnerSignIn(@RequestBody @Valid LoginInfo loginInfo, Errors errors, HttpServletResponse response) throws Exception { + HttpUtils.handleValidErrors(errors); + HttpUtils.setCookie(response, CommonConsts.MANAGER_STATUS,signInStatusManager.managerSignIn(loginInfo)); + } + + @RequestMapping(value = "/list",method = RequestMethod.GET) + public List query(@RequestParam(required = false) String clientMoniker,@RequestParam(required = false) String userNames){ + JSONObject params = new JSONObject(); + params.put("clientMoniker",clientMoniker); + params.put("userNames",userNames); + return customerServiceService.query(clientMoniker,userNames); + } + + @ManagerMapping(value = "/servant/{manager_id}/onoff", method = RequestMethod.PUT,role = {ManagerRole.ADMIN}) + public void onoff(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject loginManager,@PathVariable String manager_id, @RequestBody JSONObject param) { + param.put("manager_id",manager_id); + customerServiceService.onoff(param); + } + + @ManagerMapping(value = "/servant/{manager_id}/nick", method = RequestMethod.PUT,role = {ManagerRole.ADMIN}) + public void changeNick(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject loginManager,@PathVariable String manager_id, @RequestBody JSONObject param) { + param.put("manager_id",manager_id); + customerServiceService.changeNick(param); + } + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/openim/beans/OpenimUser.java b/src/main/java/au/com/royalpay/payment/manage/openim/beans/OpenimUser.java new file mode 100644 index 000000000..52162d649 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/openim/beans/OpenimUser.java @@ -0,0 +1,170 @@ +package au.com.royalpay.payment.manage.openim.beans; + +/** + * @author kira + * @date 2018/7/11 + */ +public class OpenimUser { + private String nick; + private String icon_url; + private String email; + private String mobile; + private String taobaoid; + private String userid; + private String passowrd; + private String remark; + private String extra; + private String career; + private String vip; + private String address; + private String name; + private Integer age; + private String gender; + private String wechat; + private String qq; + private String weibo; + + public String getNick() { + return nick; + } + + public void setNick(String nick) { + this.nick = nick; + } + + public String getIcon_url() { + return icon_url; + } + + public void setIcon_url(String icon_url) { + this.icon_url = icon_url; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getTaobaoid() { + return taobaoid; + } + + public void setTaobaoid(String taobaoid) { + this.taobaoid = taobaoid; + } + + public String getUserid() { + return userid; + } + + public void setUserid(String userid) { + this.userid = userid; + } + + public String getPassowrd() { + return passowrd; + } + + public void setPassowrd(String passowrd) { + this.passowrd = passowrd; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getExtra() { + return extra; + } + + public void setExtra(String extra) { + this.extra = extra; + } + + public String getCareer() { + return career; + } + + public void setCareer(String career) { + this.career = career; + } + + public String getVip() { + return vip; + } + + public void setVip(String vip) { + this.vip = vip; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getWechat() { + return wechat; + } + + public void setWechat(String wechat) { + this.wechat = wechat; + } + + public String getQq() { + return qq; + } + + public void setQq(String qq) { + this.qq = qq; + } + + public String getWeibo() { + return weibo; + } + + public void setWeibo(String weibo) { + this.weibo = weibo; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/openim/beans/OpenimUserVO.java b/src/main/java/au/com/royalpay/payment/manage/openim/beans/OpenimUserVO.java new file mode 100644 index 000000000..a00e73df7 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/openim/beans/OpenimUserVO.java @@ -0,0 +1,26 @@ +package au.com.royalpay.payment.manage.openim.beans; + +/** + * @author kira + * @date 2018/7/17 + */ +public class OpenimUserVO { + private String nick; + private String userid; + + public String getNick() { + return nick; + } + + public void setNick(String nick) { + this.nick = nick; + } + + public String getUserid() { + return userid; + } + + public void setUserid(String userid) { + this.userid = userid; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/openim/beans/PushMsgBean.java b/src/main/java/au/com/royalpay/payment/manage/openim/beans/PushMsgBean.java new file mode 100644 index 000000000..314dd3ebd --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/openim/beans/PushMsgBean.java @@ -0,0 +1,48 @@ +package au.com.royalpay.payment.manage.openim.beans; + +import java.util.List; + +/** + * @author kira + * @date 2018/7/11 + */ +public class PushMsgBean { + + private String from_user; + private List to_users; + private String summary; + private String data; + + + public String getFrom_user() { + return from_user; + } + + public void setFrom_user(String from_user) { + this.from_user = from_user; + } + + public List getTo_users() { + return to_users; + } + + public void setTo_users(List to_users) { + this.to_users = to_users; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/openim/core/CustomerServiceService.java b/src/main/java/au/com/royalpay/payment/manage/openim/core/CustomerServiceService.java new file mode 100644 index 000000000..4b6c769e0 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/openim/core/CustomerServiceService.java @@ -0,0 +1,32 @@ +package au.com.royalpay.payment.manage.openim.core; + +import au.com.royalpay.payment.manage.openim.beans.OpenimUserVO; + +import com.alibaba.fastjson.JSONObject; + +import java.util.List; + +/** + * @author kira + * @date 2018/7/11 + */ +public interface CustomerServiceService { + + JSONObject checkAndSavePartner(JSONObject account); + + JSONObject checkAndSaveManager(JSONObject manager); + + OpenimUserVO findOne(int clientId,String userName); + + List query(String clientMoniker,String userNames); + + void onoff(JSONObject param); + + void changeNick(JSONObject param); + + void addUnreadMsg(JSONObject params); + + void sendUnreadWxMsg(); + + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/openim/core/OpenimApi.java b/src/main/java/au/com/royalpay/payment/manage/openim/core/OpenimApi.java new file mode 100644 index 000000000..92104d912 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/openim/core/OpenimApi.java @@ -0,0 +1,20 @@ +package au.com.royalpay.payment.manage.openim.core; + +import com.alibaba.fastjson.JSONObject; + +/** + * @author kira + * @date 2018/7/11 + */ +public interface OpenimApi { + + void addUser(JSONObject record); + + void updateUser(JSONObject record); + + void pushMsh(); + + JSONObject getUserInfo(String userId); + + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/openim/core/OpenimClient.java b/src/main/java/au/com/royalpay/payment/manage/openim/core/OpenimClient.java new file mode 100644 index 000000000..9e4c8359c --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/openim/core/OpenimClient.java @@ -0,0 +1,135 @@ +package au.com.royalpay.payment.manage.openim.core; + +import au.com.royalpay.payment.tools.exceptions.ServerErrorException; + +import com.alibaba.fastjson.JSONObject; +import com.taobao.api.ApiException; +import com.taobao.api.DefaultTaobaoClient; +import com.taobao.api.TaobaoClient; +import com.taobao.api.domain.Userinfos; +import com.taobao.api.request.OpenimCustmsgPushRequest; +import com.taobao.api.request.OpenimUsersAddRequest; +import com.taobao.api.request.OpenimUsersGetRequest; +import com.taobao.api.request.OpenimUsersUpdateRequest; +import com.taobao.api.response.OpenimCustmsgPushResponse; +import com.taobao.api.response.OpenimUsersAddResponse; +import com.taobao.api.response.OpenimUsersGetResponse; +import com.taobao.api.response.OpenimUsersUpdateResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author kira + * @date 2018/7/11 + */ +@Service +public class OpenimClient { + Logger logger = LoggerFactory.getLogger(getClass()); + @Value("${im.openim.appkey}") + private String appkey; + @Value("${im.openim.secret}") + private String secret; + private final String url = "https://eco.taobao.com/router/rest"; + + public JSONObject getUser(String userId) { + TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret); + OpenimUsersGetRequest req = new OpenimUsersGetRequest(); + // 批量为userid逗号分隔字符串 + req.setUserids(userId); + OpenimUsersGetResponse rsp = null; + try { + rsp = client.execute(req); + } catch (ApiException e) { + logger.info("openim get user fail", e); + } + JSONObject openInfo = JSONObject.parseObject(rsp.getBody()); + if (openInfo.getJSONObject("openim_users_get_response").getJSONObject("userinfos").size() < 1) { + return null; + } + return openInfo; + } + + public void addUser(List users) { + TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret); + OpenimUsersAddRequest req = new OpenimUsersAddRequest(); + req.setUserinfos(users); + OpenimUsersAddResponse rsp = null; + try { + rsp = client.execute(req); + } catch (ApiException e) { + logger.info("openim add user fail", e); + } + JSONObject result = JSONObject.parseObject(rsp.getBody()); + JSONObject failMsg = result.getJSONObject("openim_users_add_response").getJSONObject("fail_msg"); + if (failMsg.size() > 0) { + if ("data exist".equals(failMsg.getJSONArray("string").get(0))) { + return; + } + logger.info("openim add user fail reason:" + failMsg.getJSONArray("string").toJSONString()); + throw new ServerErrorException("System error"); + } + } + + public void updateUser(List users) { + TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret); + OpenimUsersUpdateRequest req = new OpenimUsersUpdateRequest(); + req.setUserinfos(users); + OpenimUsersUpdateResponse rsp = null; + try { + rsp = client.execute(req); + } catch (ApiException e) { + logger.info("openim update user fail", e); + } + JSONObject result = JSONObject.parseObject(rsp.getBody()); + if (result.getJSONObject("openim_users_update_response").getJSONObject("fail_msg").size() > 0) { + logger.info("openim update user fail reason:" + + result.getJSONObject("openim_users_update_response").getJSONObject("fail_msg").getJSONArray("string").toJSONString()); + throw new ServerErrorException("System error"); + } + } + + public void pushMsg(OpenimCustmsgPushRequest.CustMsg msg) { + TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret); + OpenimCustmsgPushRequest req = new OpenimCustmsgPushRequest(); + req.setCustmsg(msg); + OpenimCustmsgPushResponse rsp = null; + try { + rsp = client.execute(req); + } catch (ApiException e) { + logger.info("openim push msg fail", e); + } + JSONObject result = JSONObject.parseObject(rsp.getBody()); + if (result.getJSONObject("openim_custmsg_push_response").getJSONObject("fail_msg").size() > 0) { + logger.info("openim push message fail reason:" + + result.getJSONObject("openim_custmsg_push_response").getJSONObject("fail_msg").getJSONArray("string").toJSONString()); + throw new ServerErrorException("System error"); + } + } + + public static void main(String[] args) { + String appkey = "24980715"; + String secret = "60b1ba680a6f27ffc701f10b6d5be00e"; + String url = "https://eco.taobao.com/router/rest"; + + TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret); + OpenimUsersGetRequest req = new OpenimUsersGetRequest(); + // 批量为userid逗号分隔字符串 + req.setUserids("kiraservant"); + OpenimUsersGetResponse rsp = null; + try { + rsp = client.execute(req); + } catch (ApiException e) { + } + JSONObject openInfo = JSONObject.parseObject(rsp.getBody()); + System.out.println(openInfo.toJSONString()); + System.out.println(openInfo.toJSONString()); + System.out.println(openInfo.toJSONString()); + } + + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/openim/core/impl/CustomerServiceServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/openim/core/impl/CustomerServiceServiceImpl.java new file mode 100644 index 000000000..d7286a94f --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/openim/core/impl/CustomerServiceServiceImpl.java @@ -0,0 +1,240 @@ +package au.com.royalpay.payment.manage.openim.core.impl; + +import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper; +import au.com.royalpay.payment.manage.mappers.system.ManagerMapper; +import au.com.royalpay.payment.manage.mappers.system.SysCustomerServiceMapper; +import au.com.royalpay.payment.manage.merchants.core.ClientManager; +import au.com.royalpay.payment.manage.openim.beans.OpenimUserVO; +import au.com.royalpay.payment.manage.openim.core.CustomerServiceService; +import au.com.royalpay.payment.manage.openim.core.OpenimApi; +import au.com.royalpay.payment.tools.connections.mpsupport.MpWechatApi; +import au.com.royalpay.payment.tools.connections.mpsupport.MpWechatApiProvider; +import au.com.royalpay.payment.tools.connections.mpsupport.beans.TemplateMessage; +import au.com.royalpay.payment.tools.exceptions.BadRequestException; +import au.com.royalpay.payment.tools.exceptions.ForbiddenException; +import au.com.royalpay.payment.tools.exceptions.ServerErrorException; + +import com.alibaba.fastjson.JSONObject; + +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.BoundListOperations; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +/** + * @author kira + * @date 2018/7/11 + */ +@Service +public class CustomerServiceServiceImpl implements CustomerServiceService { + + @Resource + private OpenimApi openimApi; + @Resource + private ClientManager clientManager; + @Resource + private ClientAccountMapper clientAccountMapper; + @Resource + private ManagerMapper managerMapper; + @Resource + private SysCustomerServiceMapper sysCustomerServiceMapper; + @Resource + private MpWechatApiProvider mpWechatApiProvider; + @Resource + private StringRedisTemplate stringRedisTemplate; + private final String REDIS_UNREADMSG_PREFIX = "REDIS_UNREADMSG_PREFIX"; + + @Value("${im.openim.appkey}") + private String appkey; + + @Override + public JSONObject checkAndSavePartner(JSONObject account) { + JSONObject client = clientManager.getClientInfo(account.getIntValue("client_id")); + if (client == null) { + throw new BadRequestException("Merchant Not Found"); + } + JSONObject userInfo = clientAccountMapper.findById(account.getString("account_id")); + JSONObject checkRecord = new JSONObject(); + checkRecord.put("nick", userInfo.getString("username") + "_" + client.getString("client_moniker")); + checkRecord.put("user_id", userInfo.getString("username") + "_" + client.getString("client_moniker")); + checkRecord.put("password", DigestUtils.md5Hex("uid")); + checkRecord.put("icon_url",client.getString("logo_thumbnail")); + openimApi.addUser(checkRecord); + checkRecord.put("servants", sysCustomerServiceMapper.findOnline()); + checkRecord.put("appkey", appkey); + return checkRecord; + } + + @Override + public JSONObject checkAndSaveManager(JSONObject manager) { + if (StringUtils.isEmpty(manager.getString("manager_id"))) { + throw new ServerErrorException("manager id is null"); + } + JSONObject result = sysCustomerServiceMapper.findByManagerId(manager.getString("manager_id")); + if (result == null) { + JSONObject managerDetail = managerMapper.findDetail(manager.getString("manager_id")); + JSONObject checkRecord = new JSONObject(); + checkRecord.put("user_id", managerDetail.getString("username")); + int num = sysCustomerServiceMapper.countAll(); + checkRecord.put("nick", "客服" + num); + checkRecord.put("icon_url","https://file.royalpay.com.au/open/2017/10/17/1508233432777_7X9kTmbsHUDv0iFD1zmYrDzNkrsBBk.jpg"); + checkRecord.put("password", RandomStringUtils.random(12, true, true).toLowerCase()); + openimApi.addUser(checkRecord); + result = checkRecord; + } + result.put("appkey", appkey); + result.remove("manager_id"); + result.remove("onoff"); + return result; + } + + @Override + public OpenimUserVO findOne(int clientId, String userName) { + JSONObject client = clientManager.getClientInfo(clientId); + if (client == null) { + throw new BadRequestException("Merchant Not Found"); + } + JSONObject account = clientAccountMapper.findByUsername(userName); + if (account == null) { + throw new BadRequestException("Account Not Found"); + } + if (account.getIntValue("client_id") != clientId) { + throw new ForbiddenException("No Rights"); + } + OpenimUserVO result = new OpenimUserVO(); + result.setNick(account.getString("display_name")); + result.setUserid(account.getString("username") + "_" + client.getString("client_moniker")); + return result; + } + + @Override + public List query(String clientMoniker, String userNames) { + JSONObject queryParams = new JSONObject(); + if (StringUtils.isNotEmpty(clientMoniker)) { + JSONObject client = clientManager.getClientInfoByMoniker(clientMoniker); + if (client == null) { + return Collections.EMPTY_LIST; + } + queryParams.put("clientId", client.getIntValue("client_id")); + } + if (StringUtils.isNotEmpty(userNames)) { + List userNams = Arrays.asList(userNames.split(",")); + if (CollectionUtils.isEmpty(userNams)) { + return Collections.EMPTY_LIST; + } + queryParams.put("userNames", userNams); + } + if (queryParams.size() < 1) { + return Collections.emptyList(); + } + List accounts = clientAccountMapper.query(queryParams); + List result = new ArrayList<>(accounts.size()); + accounts.forEach(p -> { + JSONObject openimUser = new JSONObject(); + openimUser.put("userid", p.getString("username") + "_" + p.getString("client_moniker")); + openimUser.put("nick", p.getString("username") + "_" + p.getString("client_moniker")); + openimUser.put("headimg", p.getString("wechat_headimg")); + result.add(openimUser); + }); + return result; + } + + @Override + public void onoff(JSONObject manager) { + saveOrUpdate(manager,false); + } + + @Override + public void changeNick(JSONObject param) { + saveOrUpdate(param,true); + } + + @Override + public void addUnreadMsg(JSONObject params) { + String uid = params.getString("uid"); + String tuid = params.getString("tuid"); + if (StringUtils.isEmpty(uid) || StringUtils.isEmpty(tuid)) { + return; + } + BoundListOperations ops = stringRedisTemplate.boundListOps(REDIS_UNREADMSG_PREFIX + tuid); + for (int i = 0; i < ops.size(); i++) { + String jStr = ops.index(i); + if (jStr.contains(uid)) { + JSONObject record = JSONObject.parseObject(jStr); + record.put("unreadMsg", record.getIntValue("unreadMsg") + 1); + ops.set(i, record.toJSONString()); + return; + } + } + params.put("unreadMsg", 1); + ops.rightPush(params.toJSONString()); + } + + @Override + public void sendUnreadWxMsg() { + List servants = sysCustomerServiceMapper.findAllWithDetail(); + MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi(); + servants.parallelStream().forEach(p -> { + p.getString("user_id"); + BoundListOperations ops = stringRedisTemplate.boundListOps(REDIS_UNREADMSG_PREFIX + p.getString("user_id")); + if (ops.size() < 1) { + return; + } + int clients = 0; + int unreadMsg = 0; + for (int i = 0; i < ops.size(); i++) { + clients++; + unreadMsg += JSONObject.parseObject(ops.index(i)).getIntValue("unreadMsg"); + } + TemplateMessage msg = initUnreadMsg(unreadMsg, clients, p.getString("wx_openid"), paymentApi.getTemplateId("commission")); + paymentApi.sendTemplateMessage(msg); + stringRedisTemplate.delete(REDIS_UNREADMSG_PREFIX + p.getString("user_id")); + }); + + } + + private TemplateMessage initUnreadMsg(int unreadMsg, int clients, String openId, String templateId) { + TemplateMessage msg = new TemplateMessage(openId, templateId, null); + msg.put("first", "你好,你有" + unreadMsg + "个未读消息", "#000000"); + msg.put("keyword1", "商户", "#000000"); + msg.put("keyword2", "问题咨询", "#000000"); + msg.put("keyword3", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"), "#000000"); + msg.put("keyword4", "你有" + clients + "个商户咨询待处理", "#0000ff"); + msg.put("remark", "", "#000000"); + return msg; + } + + private void saveOrUpdate(JSONObject servant, boolean updateOpenim) { + if (StringUtils.isEmpty(servant.getString("manager_id"))) { + throw new ServerErrorException("manager id is null"); + } + JSONObject existCS = sysCustomerServiceMapper.findByManagerId(servant.getString("manager_id")); + if (existCS == null) { + JSONObject userInfo = checkAndSaveManager(servant); + servant.put("password", userInfo.getString("password")); + servant.put("nick", userInfo.getString("nick")); + servant.put("user_id", userInfo.getString("user_id")); + sysCustomerServiceMapper.save(servant); + } else { + sysCustomerServiceMapper.update(servant); + if (updateOpenim) { + servant.put("user_id", existCS.getString("user_id")); + openimApi.updateUser(servant); + + } + } + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/openim/core/impl/OpenimApiImpl.java b/src/main/java/au/com/royalpay/payment/manage/openim/core/impl/OpenimApiImpl.java new file mode 100644 index 000000000..44b7bd062 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/openim/core/impl/OpenimApiImpl.java @@ -0,0 +1,64 @@ +package au.com.royalpay.payment.manage.openim.core.impl; + +import au.com.royalpay.payment.manage.openim.core.OpenimApi; +import au.com.royalpay.payment.manage.openim.core.OpenimClient; + +import com.alibaba.fastjson.JSONObject; +import com.taobao.api.domain.Userinfos; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Resource; + +/** + * @author kira + * @date 2018/7/11 + */ +@Service +public class OpenimApiImpl implements OpenimApi { + + @Resource + private OpenimClient openimClient; + + @Override + public void addUser(JSONObject user) { + JSONObject opemInfo = openimClient.getUser(user.getString("user_id")); + if(opemInfo!=null){ + return; + } + List saveList = new ArrayList<>(); + Userinfos record = new Userinfos(); + record.setUserid(user.getString("user_id")); + record.setNick(user.getString("nick")); + record.setPassword(user.getString("password")); + if(StringUtils.isNotEmpty(user.getString("icon_url"))){ + record.setIconUrl(user.getString("icon_url")); + } + saveList.add(record); + openimClient.addUser(saveList); + } + + @Override + public void updateUser(JSONObject user) { + List updateList = new ArrayList<>(); + Userinfos record = new Userinfos(); + record.setUserid(user.getString("user_id")); + record.setNick(user.getString("nick")); + updateList.add(record); + openimClient.updateUser(updateList); + } + + @Override + public void pushMsh() { + + } + + @Override + public JSONObject getUserInfo(String userId) { + return openimClient.getUser(userId); + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryAttentionMerchants.java b/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryAttentionMerchants.java new file mode 100644 index 000000000..231803ee5 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryAttentionMerchants.java @@ -0,0 +1,49 @@ +package au.com.royalpay.payment.manage.risk.bean; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; + +/** + * Created by yuan on 2018/7/13. + */ +public class QueryAttentionMerchants { + private String client_moniker; + + private int page = 1; + private int limit = 10; + + + + public JSONObject toParams() { + JSONObject params = new JSONObject(); + if(StringUtils.isNotEmpty(client_moniker)){ + params.put("client_moniker", this.client_moniker); + } + params.put("is_valid", 1); + return params; + } + + public String getClient_moniker() { + return client_moniker; + } + + public void setClient_moniker(String client_moniker) { + this.client_moniker = client_moniker; + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public int getLimit() { + return limit; + } + + public void setLimit(int limit) { + this.limit = limit; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java b/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java index a8a2109af..895c501ec 100644 --- a/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java +++ b/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java @@ -1,10 +1,6 @@ package au.com.royalpay.payment.manage.risk.core; -import au.com.royalpay.payment.manage.risk.bean.AddRiskDetailLog; -import au.com.royalpay.payment.manage.risk.bean.DealRiskRecord; -import au.com.royalpay.payment.manage.risk.bean.QueryRiskDetail; -import au.com.royalpay.payment.manage.risk.bean.QueryRiskOrder; -import au.com.royalpay.payment.manage.risk.bean.QueryRiskRecord; +import au.com.royalpay.payment.manage.risk.bean.*; import com.alibaba.fastjson.JSONObject; @@ -32,6 +28,9 @@ public interface RiskMerchantService { JSONObject getRiskDetails(QueryRiskDetail queryRiskDetail); + JSONObject listAttentionMerchants(JSONObject account,QueryAttentionMerchants queryAttention); + void addAttentionMerchants(JSONObject account,String client_moniker); + void updateAttentionMerchants(JSONObject account,String client_moniker); } diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java index f8f8651a6..0d9b3fdec 100644 --- a/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java @@ -1,21 +1,15 @@ package au.com.royalpay.payment.manage.risk.core.impl; -import au.com.royalpay.payment.manage.mappers.risk.RiskMerchantDetailLogMapper; -import au.com.royalpay.payment.manage.mappers.risk.RiskMerchantRecordMapper; -import au.com.royalpay.payment.manage.mappers.risk.RiskTransactionLogMapper; -import au.com.royalpay.payment.manage.mappers.risk.RiskWhiteListMapper; +import au.com.royalpay.payment.manage.mappers.risk.*; import au.com.royalpay.payment.manage.merchants.core.ClientManager; -import au.com.royalpay.payment.manage.risk.bean.AddRiskDetailLog; -import au.com.royalpay.payment.manage.risk.bean.DealRiskRecord; -import au.com.royalpay.payment.manage.risk.bean.QueryRiskDetail; -import au.com.royalpay.payment.manage.risk.bean.QueryRiskOrder; -import au.com.royalpay.payment.manage.risk.bean.QueryRiskRecord; +import au.com.royalpay.payment.manage.risk.bean.*; import au.com.royalpay.payment.manage.risk.core.RiskMerchantService; import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.exceptions.NotFoundException; import au.com.royalpay.payment.tools.utils.PageListUtils; import com.alibaba.fastjson.JSONObject; +import com.github.miemiedev.mybatis.paginator.domain.Order; import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import org.apache.commons.lang3.StringUtils; @@ -39,6 +33,8 @@ public class RiskMerchantServiceImpl implements RiskMerchantService { private RiskWhiteListMapper riskWhiteListMapper; @Resource private ClientManager clientManager; + @Resource + private RiskAttentionMerchantsAMapper riskAttentionMerchantsAMapper; @Override @Transactional @@ -213,4 +209,55 @@ public class RiskMerchantServiceImpl implements RiskMerchantService { riskMerchantDetailLogMapper.query(queryRiskDetail.toParams(), new PageBounds(queryRiskDetail.getPage(), queryRiskDetail.getLimit()))); } + + @Override + public JSONObject listAttentionMerchants(JSONObject account, QueryAttentionMerchants queryAttention) { + if (account == null) { + throw new BadRequestException("account not exists"); + } + return PageListUtils.buildPageListResult( + riskAttentionMerchantsAMapper.query(queryAttention.toParams(), new PageBounds(queryAttention.getPage(), queryAttention.getLimit(), Order.formString("create_time.desc")))); + } + + @Override + public void addAttentionMerchants(JSONObject account, String client_moniker) { + if (account == null) { + throw new BadRequestException("account not exists"); + } + JSONObject attentionMerchant = riskAttentionMerchantsAMapper.findByClientMoniker(client_moniker); + if(attentionMerchant != null){ + if(attentionMerchant.getBoolean("is_valid")){ + throw new BadRequestException("The client has already existed"); + }else { + attentionMerchant.put("is_valid",1); + attentionMerchant.put("update_time",new Date()); + riskAttentionMerchantsAMapper.update(attentionMerchant); + return; + } + } + JSONObject client = clientManager.getClientInfoByMoniker(client_moniker); + if(client == null){ + throw new BadRequestException("The client does not exist"); + } + JSONObject attention = new JSONObject(); + attention.put("client_id",client.getIntValue("client_id")); + attention.put("client_moniker",client.getString("client_moniker")); + attention.put("is_valid",1); + attention.put("create_time",new Date()); + riskAttentionMerchantsAMapper.save(attention); + } + + @Override + public void updateAttentionMerchants(JSONObject account, String client_moniker) { + if (account == null) { + throw new BadRequestException("account not exists"); + } + JSONObject attentionMerchant = riskAttentionMerchantsAMapper.findByClientMoniker(client_moniker); + if(attentionMerchant == null){ + throw new BadRequestException("The client does not exist"); + } + attentionMerchant.put("is_valid",0); + attentionMerchant.put("update_time",new Date()); + riskAttentionMerchantsAMapper.update(attentionMerchant); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java b/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java index 45775e2a4..651345395 100644 --- a/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java +++ b/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java @@ -1,11 +1,7 @@ package au.com.royalpay.payment.manage.risk.web; import au.com.royalpay.payment.manage.permission.manager.ManagerMapping; -import au.com.royalpay.payment.manage.risk.bean.AddRiskDetailLog; -import au.com.royalpay.payment.manage.risk.bean.DealRiskRecord; -import au.com.royalpay.payment.manage.risk.bean.QueryRiskDetail; -import au.com.royalpay.payment.manage.risk.bean.QueryRiskOrder; -import au.com.royalpay.payment.manage.risk.bean.QueryRiskRecord; +import au.com.royalpay.payment.manage.risk.bean.*; import au.com.royalpay.payment.manage.risk.core.RiskMerchantService; import au.com.royalpay.payment.tools.CommonConsts; import au.com.royalpay.payment.tools.permission.enums.ManagerRole; @@ -94,4 +90,18 @@ public class RiskController { riskMerchantService.addDetailLog(addRiskDetailLog,manager); } + @RequestMapping(value = "/attention", method = RequestMethod.GET) + public JSONObject listMerchants(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager,QueryAttentionMerchants queryAttention ) { + return riskMerchantService.listAttentionMerchants(manager,queryAttention); + } + + @RequestMapping(value = "/attention/{client_moniker}", method = RequestMethod.POST) + public void addMerchants(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager,@PathVariable String client_moniker) { + riskMerchantService.addAttentionMerchants(manager,client_moniker); + } + + @RequestMapping(value = "/attention/{client_moniker}", method = RequestMethod.PUT) + public void updateMerchants(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager,@PathVariable String client_moniker) { + riskMerchantService.updateAttentionMerchants(manager,client_moniker); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/signin/beans/QueryManagerBean.java b/src/main/java/au/com/royalpay/payment/manage/signin/beans/QueryManagerBean.java new file mode 100644 index 000000000..da4529722 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/signin/beans/QueryManagerBean.java @@ -0,0 +1,127 @@ +package au.com.royalpay.payment.manage.signin.beans; + +import au.com.royalpay.payment.tools.permission.enums.ManagerRole; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; + +/** + * Created by yuan on 2018/7/13. + */ +public class QueryManagerBean { + private String org_id; + private String org_id2; + private String role; + private String username; + + private int page = 1; + private int limit = 10; + + public JSONObject toJson(){ + JSONObject params = new JSONObject(); + if (StringUtils.isNotEmpty(org_id)){ + params.put("org_id",org_id); + } + if (StringUtils.isNotEmpty(org_id2)){ + params.put("org_id2",org_id2); + } + if (StringUtils.isNotEmpty(role)){ + int mask = 0; + if(role.equals("1")){ + mask = ManagerRole.ADMIN.getMask(); + } + if(role.equals("10")){ + mask = ManagerRole.OPERATOR.getMask(); + } + if(role.equals("100")){ + mask = ManagerRole.BD_USER.getMask(); + } + if(role.equals("1000")){ + mask = ManagerRole.FINANCIAL_STAFF.getMask(); + } + if(role.equals("10000")){ + mask = ManagerRole.SERVANT.getMask(); + } + if(role.equals("100000")){ + mask = ManagerRole.ACCOUNT_MANAGER.getMask(); + } + if(role.equals("1000000")){ + mask = ManagerRole.DIRECTOR.getMask(); + } + if(role.equals("10000000")){ + mask = ManagerRole.SITE_MANAGER.getMask(); + } + if(role.equals("100000000")){ + mask = ManagerRole.DEVELOPER.getMask(); + } + if(role.equals("1000000000")){ + mask = ManagerRole.BD_LEADER.getMask(); + } + if(role.equals("10000000000")){ + mask = ManagerRole.RISK_MANAGER.getMask(); + } + if(role.equals("100000000000")){ + mask = ManagerRole.GUEST.getMask(); + } + if(role.equals("1000000000000")){ + mask = ManagerRole.ORG_MANAGER.getMask(); + } + if(mask != 0){ + params.put("mask",mask); + } + } + if (StringUtils.isNotEmpty(username)){ + params.put("username",username); + } + params.put("page",page); + params.put("limit",10); + return params; + } + + public String getOrg_id() { + return org_id; + } + + public void setOrg_id(String org_id) { + this.org_id = org_id; + } + + public String getOrg_id2() { + return org_id2; + } + + public void setOrg_id2(String org_id2) { + this.org_id2 = org_id2; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public int getLimit() { + return limit; + } + + public void setLimit(int limit) { + this.limit = limit; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/signin/core/ManagerAccountsService.java b/src/main/java/au/com/royalpay/payment/manage/signin/core/ManagerAccountsService.java index 99bb93a41..9cfe39363 100644 --- a/src/main/java/au/com/royalpay/payment/manage/signin/core/ManagerAccountsService.java +++ b/src/main/java/au/com/royalpay/payment/manage/signin/core/ManagerAccountsService.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.signin.core; import au.com.royalpay.payment.manage.signin.beans.ManagerInfo; import com.alibaba.fastjson.JSONObject; +import com.github.miemiedev.mybatis.paginator.domain.PageList; import java.util.List; @@ -9,7 +10,7 @@ import java.util.List; * Created by yixian on 2016-07-05. */ public interface ManagerAccountsService { - List listManagers(JSONObject loginManager,JSONObject params); + PageList listManagers(JSONObject loginManager, JSONObject params); void saveManager(ManagerInfo manager, JSONObject loginManager); @@ -24,4 +25,6 @@ public interface ManagerAccountsService { List listGroupBds(JSONObject loginManager); JSONObject getBDConfig(String bd_id); -} + + List listServants(JSONObject loginManager); +} \ No newline at end of file diff --git a/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/ManagerAccountServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/ManagerAccountServiceImpl.java index 8bdc155b6..0d58548cc 100644 --- a/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/ManagerAccountServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/ManagerAccountServiceImpl.java @@ -4,20 +4,24 @@ import au.com.royalpay.payment.manage.mappers.financial.FinancialBDConfigMapper; import au.com.royalpay.payment.manage.mappers.system.ManagerMapper; import au.com.royalpay.payment.manage.mappers.system.OrgMapper; import au.com.royalpay.payment.manage.organizations.core.OrgManager; -import au.com.royalpay.payment.tools.permission.enums.ManagerRole; import au.com.royalpay.payment.manage.signin.beans.ManagerInfo; import au.com.royalpay.payment.manage.signin.core.ManagerAccountsService; import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.exceptions.NotFoundException; +import au.com.royalpay.payment.tools.permission.enums.ManagerRole; + 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.springframework.stereotype.Service; -import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; +import javax.annotation.Resource; + /** * Created by yixian on 2016-07-06. */ @@ -35,12 +39,12 @@ public class ManagerAccountServiceImpl implements ManagerAccountsService { private OrgManager orgManager; @Override - public List listManagers(JSONObject loginManager,JSONObject params) { + public PageList listManagers(JSONObject loginManager,JSONObject params) { /* if (loginManager.getInteger("org_id") != null) { params.put("org_id", loginManager.getIntValue("org_id")); }*/ orgManager.checkOrgIds(loginManager,params); - List managers = managerMapper.listAvailable(params, new PageBounds(Order.formString("create_time.desc"))); + PageList managers = managerMapper.listAvailable(params, new PageBounds(params.getIntValue("page"),params.getIntValue("limit"),Order.formString("create_time.desc"))); for (JSONObject manager : managers) { int role = manager.getIntValue("role"); manager.put("admin", ManagerRole.ADMIN.hasRole(role)); @@ -133,6 +137,11 @@ public class ManagerAccountServiceImpl implements ManagerAccountsService { return financialBDConfigMapper.getBdConfig(bd_id); } + @Override + public List listServants(JSONObject loginManager) { + return managerMapper.listServants(ManagerRole.SERVANT.getMask()); + } + private void checkOrg(JSONObject loginManager,JSONObject manager){ if (loginManager.getInteger("org_id")!=null){ List orgs = orgMapper.listOrgAndChild(loginManager.getIntValue("org_id")); diff --git a/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/SignInAccountServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/SignInAccountServiceImpl.java index 18eba9c12..c6eabd65e 100644 --- a/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/SignInAccountServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/SignInAccountServiceImpl.java @@ -7,6 +7,7 @@ import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; 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.SysCustomerServiceMapper; import au.com.royalpay.payment.manage.merchants.core.ClientConfigService; import au.com.royalpay.payment.manage.merchants.core.ClientManager; import au.com.royalpay.payment.manage.notice.core.MailService; @@ -22,6 +23,7 @@ import au.com.royalpay.payment.tools.env.RequestEnvironment; import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.exceptions.ForbiddenException; import au.com.royalpay.payment.tools.locale.LocaleSupport; +import au.com.royalpay.payment.tools.permission.enums.ManagerRole; import au.com.royalpay.payment.tools.utils.PasswordUtils; import com.alibaba.fastjson.JSONObject; @@ -74,6 +76,8 @@ public class SignInAccountServiceImpl implements SignInAccountService, Applicati @Resource private ClientConfigService clientConfigService; @Resource + private SysCustomerServiceMapper sysCustomerServiceMapper; + @Resource private PermissionClientModulesService permissionClientModulesService; private ApplicationEventPublisher publisher; private static final List tags = new ArrayList<>(); @@ -114,6 +118,10 @@ public class SignInAccountServiceImpl implements SignInAccountService, Applicati manager.put("available_func_names", funcNames); manager.put("modules", modules.values()); manager.put("module_names", modules.keySet()); + if((manager.getIntValue("role")& ManagerRole.SERVANT.getMask())>0){ + JSONObject cs = sysCustomerServiceMapper.findByManagerId(accountId); + manager.put("onoff",cs.getBoolean("onoff")); + } return manager; } @@ -429,5 +437,4 @@ public class SignInAccountServiceImpl implements SignInAccountService, Applicati account.put("is_password_expired", 0); clientAccountMapper.update(account); } - } diff --git a/src/main/java/au/com/royalpay/payment/manage/signin/web/ManagerAccountsController.java b/src/main/java/au/com/royalpay/payment/manage/signin/web/ManagerAccountsController.java index e1f3652cd..cdb8cd904 100644 --- a/src/main/java/au/com/royalpay/payment/manage/signin/web/ManagerAccountsController.java +++ b/src/main/java/au/com/royalpay/payment/manage/signin/web/ManagerAccountsController.java @@ -2,23 +2,33 @@ package au.com.royalpay.payment.manage.signin.web; import au.com.royalpay.payment.manage.organizations.core.OrgManager; import au.com.royalpay.payment.manage.permission.manager.ManagerMapping; -import au.com.royalpay.payment.tools.permission.enums.ManagerRole; import au.com.royalpay.payment.manage.permission.manager.RequireManager; import au.com.royalpay.payment.manage.signin.beans.ManagerInfo; +import au.com.royalpay.payment.manage.signin.beans.QueryManagerBean; import au.com.royalpay.payment.manage.signin.core.ManagerAccountsService; import au.com.royalpay.payment.tools.CommonConsts; import au.com.royalpay.payment.tools.http.HttpUtils; +import au.com.royalpay.payment.tools.permission.enums.ManagerRole; +import au.com.royalpay.payment.tools.utils.PageListUtils; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import org.apache.commons.lang3.StringUtils; + 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.validation.Valid; import java.util.List; import java.util.Map; +import javax.annotation.Resource; +import javax.validation.Valid; + /** * Created by yixian on 2016-07-05. */ @@ -38,15 +48,9 @@ public class ManagerAccountsController { @RequestMapping(method = RequestMethod.GET) @RequireManager(role = {ManagerRole.ADMIN, ManagerRole.ACCOUNT_MANAGER}) - public List listManagerss(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject loginManager, @RequestParam(required = false) String org_id,@RequestParam(required = false) String org_id2) { - JSONObject params = new JSONObject(); - if(org_id != null){ - params.put("org_id",org_id); - } - if (StringUtils.isNotEmpty(org_id2)) { - params.put("org_id2", org_id2); - } - return managerAccountsService.listManagers(loginManager,params); + public JSONObject listManagerss(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject loginManager, QueryManagerBean queryManagerBean) { + + return PageListUtils.buildPageListResult(managerAccountsService.listManagers(loginManager,queryManagerBean.toJson())); } @RequestMapping(method = RequestMethod.POST) @@ -83,10 +87,15 @@ public class ManagerAccountsController { return managerAccountsService.listBDLeaders(loginManager); } - @ManagerMapping(value = "/group/group_bds", method = RequestMethod.GET) public List listGroupBds(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject loginManager) { return managerAccountsService.listGroupBds(loginManager); } + @ManagerMapping(value = "/roles/servant", method = RequestMethod.GET,role = {ManagerRole.ADMIN}) + public List listServants(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject loginManager) { + return managerAccountsService.listServants(loginManager); + } + + } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/SendUnreadMsgWechatTask.java b/src/main/java/au/com/royalpay/payment/manage/task/SendUnreadMsgWechatTask.java new file mode 100644 index 000000000..38df5d256 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/task/SendUnreadMsgWechatTask.java @@ -0,0 +1,25 @@ +package au.com.royalpay.payment.manage.task; + +import au.com.royalpay.payment.manage.openim.core.CustomerServiceService; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * Created by wangning on 2018/1/2. + * 发送客服未读消息提醒 + */ +@Component +@ConditionalOnProperty(value = "app.run-tasks", havingValue = "true") +public class SendUnreadMsgWechatTask { + @Resource + private CustomerServiceService customerServiceService; + +// @Scheduled(cron = "0 0/10 * * * ?") +// public void ofeiOrderCheck() { +// customerServiceService.sendUnreadWxMsg(); +// } + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/refund/RefundService.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/refund/RefundService.java index 4ebe34c71..34c68c90a 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/refund/RefundService.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/refund/RefundService.java @@ -1,7 +1,10 @@ package au.com.royalpay.payment.manage.tradelog.refund; import au.com.royalpay.payment.manage.analysis.beans.RefundReviewBean; + import com.alibaba.fastjson.JSONObject; +import com.github.miemiedev.mybatis.paginator.domain.PageBounds; + import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; @@ -44,4 +47,6 @@ public interface RefundService { JSONObject findReviewOrder(String reviewId); JSONObject checkRefundAuditFlag(); + + JSONObject listUnionAllApply(JSONObject params,PageBounds pagination); } diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/refund/impls/RefundServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/refund/impls/RefundServiceImpl.java index f37f39041..13d61c09e 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/refund/impls/RefundServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/refund/impls/RefundServiceImpl.java @@ -87,7 +87,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish throw new RefundExistException(); } if (apply.isEmpty()) { - order.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount")).subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue()); + order.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount")) + .subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue()); return order; } else { if (account != null) { @@ -118,7 +119,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish if (undoRefundOrder != null) { throw new BadRequestException("该笔订单有退款正在处理,请稍后再试!"); } - order.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount")).subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue()); + order.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount")) + .subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue()); return order; } @@ -143,12 +145,13 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish int clientId = order.getIntValue("client_id"); String currency = order.getString("currency"); - //增加角色审核 + // 增加角色审核 JSONObject client = clientManager.getClientInfo(clientId); Assert.notNull(client, "client not exists"); JSONObject clientConfig = clientConfigService.find(clientId); OperatorType type = account != null ? OperatorType.PARTNER : OperatorType.MANAGER; - boolean requireAudit = type == OperatorType.PARTNER && PartnerRole.getRole(account.getIntValue("role")) == PartnerRole.CASHIER && clientConfig.getBooleanValue("enable_refund_auth"); + boolean requireAudit = type == OperatorType.PARTNER && PartnerRole.getRole(account.getIntValue("role")) == PartnerRole.CASHIER + && clientConfig.getBooleanValue("enable_refund_auth"); logger.debug("applyer type=" + type + "; require audit=" + requireAudit); paymentApi.clientRefundBalanceCheck(clientId, orderId, currency, feeAmount); @@ -189,9 +192,9 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish BigDecimal realAmount = original ? fee : CurrencyAmountUtils.toAmount(fee, order.getString("currency")); JSONObject refundConfig = checkRefundAuditFlag(); - if (partnerAccount!=null && refundConfig != null && refundConfig.size() > 0 && refundConfig.getBoolean("refundAudit")) { + if (partnerAccount != null && refundConfig != null && refundConfig.size() > 0 && refundConfig.getBoolean("refundAudit")) { if (realAmount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) > 0) { - //订单需要审核 + // 订单需要审核 boolean casherRefund = reviewNewRefundOrder(orderId, realAmount, remark, partnerAccount, manager); if (casherRefund) { return executeRefund(orderId, realAmount, remark, partnerAccount, manager, order, client); @@ -204,7 +207,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish } - private JSONObject executeRefund(String orderId, BigDecimal amount, String remark, JSONObject partnerAccount, JSONObject manager, JSONObject order, JSONObject client) { + private JSONObject executeRefund(String orderId, BigDecimal amount, String remark, JSONObject partnerAccount, JSONObject manager, JSONObject order, + JSONObject client) { checkOrderUseCustomerCoupon(order, amount); JSONObject clientConfig = clientConfigService.find(client.getIntValue("client_id")); OperatorType type = partnerAccount != null ? OperatorType.PARTNER : OperatorType.MANAGER; @@ -220,12 +224,13 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish operator.put("operator_id", manager.getIntValue("manager_id")); operator.put("operator", manager.getString("display_name")); } - boolean requireAudit = type == OperatorType.PARTNER && PartnerRole.getRole(partnerAccount.getIntValue("role")) == PartnerRole.CASHIER && clientConfig.getBooleanValue("enable_refund_auth"); + boolean requireAudit = type == OperatorType.PARTNER && PartnerRole.getRole(partnerAccount.getIntValue("role")) == PartnerRole.CASHIER + && clientConfig.getBooleanValue("enable_refund_auth"); logger.debug("applyer type=" + type + "; require audit=" + requireAudit); return paymentApi.refundOrder(orderId, null, amount, remark, operator, type, requireAudit); } - //订单使用积分商城优惠券,仅支持全额退款 + // 订单使用积分商城优惠券,仅支持全额退款 private void checkOrderUseCustomerCoupon(JSONObject order, BigDecimal feeAmount) { JSONObject couponLogs = couponAccuessLogMapper.findUsedCouponByOrderId(order.getString("order_id")); if (couponLogs != null) { @@ -237,7 +242,7 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish } @Override -// @Transactional + // @Transactional public JSONObject newReviewRefundOrder(String orderId, BigDecimal fee, boolean original, String remark, JSONObject manager) { JSONObject reviewOrder = refundReviewMapper.findUnResolveByOrderId(orderId); reviewOrder.put("status", 1); @@ -338,7 +343,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish private void submitRefund(JSONObject account, JSONObject audition) { JSONObject refundLog = refundMapper.find(audition.getString("refund_id")); - boolean platformAuditFlag = auditRefundAndCommitToPlatform(refundLog.getBigDecimal("amount"), audition.getString("remark"), refundLog.getString("order_id"), account); + boolean platformAuditFlag = auditRefundAndCommitToPlatform(refundLog.getBigDecimal("amount"), audition.getString("remark"), + refundLog.getString("order_id"), account); if (!platformAuditFlag) { paymentApi.submitRefund(audition.getString("refund_id")); } @@ -347,13 +353,12 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish private boolean auditRefundAndCommitToPlatform(BigDecimal amount, String remark, String orderId, JSONObject account) { if (amount.compareTo(BigDecimal.ZERO) > 0) { JSONObject refundConfig = checkRefundAuditFlag(); - if (refundConfig != null && refundConfig.getBoolean("refundAudit") && - amount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) >= 0) { - //订单需要审核 + if (refundConfig != null && refundConfig.getBoolean("refundAudit") && amount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) >= 0) { + // 订单需要审核 reviewNewRefundOrder(orderId, amount, remark, account, null); return true; } - //退款 + // 退款 return false; } else { throw new BadRequestException("Refund amount can not be 0"); @@ -411,7 +416,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish } review.put("bd_name", bdNameStr.deleteCharAt(bdNameStr.length() - 1).toString()); JSONObject order = orderMapper.find(review.getString("order_id")); - review.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount")).subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue()); + review.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount")) + .subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue()); review.put("create_time", order.getDate("create_time")); review.put("channel", order.getString("channel")); return review; @@ -427,6 +433,15 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish return refundConfig; } + @Override + public JSONObject listUnionAllApply(JSONObject params, PageBounds pagination) { + if(params.get("client_id")==null && params.get("client_ids")==null){ + return null; + } + return PageListUtils.buildPageListResult(refundMapper.listUnionAllApply(params, pagination)); + + } + @Override public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { this.publisher = applicationEventPublisher; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a5ac9569e..4ad7dabda 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -112,6 +112,9 @@ mail.mailgun.default.merchantlist=merchants@mail.royalpay.com.au royalpay.sms.appid=1400094878 royalpay.sms.appkey=43390d81e20c5191c278fbf4cd275be2 +im.openim.appkey=24986533 +im.openim.secret=96e28e7be21a874177211c31834b5174 + #清算银行配置 settle.abafile.default-bank=CBA diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/RefundMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/RefundMapper.xml index 1d4502713..3de8630c7 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/RefundMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/RefundMapper.xml @@ -69,4 +69,64 @@ and DATE_FORMAT(create_time,'%Y-%m-%d') = DATE_FORMAT(#{today},'%Y-%m-%d'); + \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.xml new file mode 100644 index 000000000..5e5ccbac1 --- /dev/null +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.xml @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ManagerMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ManagerMapper.xml index 7f94617cf..07fec675e 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ManagerMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ManagerMapper.xml @@ -27,8 +27,15 @@ ) o ON m.wx_openid = o.wechat_openid - m.org_id=#{org_id} - m.org_id in + + + and m.username like #{username_pattern} + + + and 0 ]]> + + AND m.org_id=#{org_id} + AND m.org_id in #{org_id} and m.is_valid=1 @@ -87,4 +94,14 @@ WHERE role & #{mask} >0 AND wx_openid IS NOT NULL AND is_valid = 1 ]]> + + + + \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/SysCustomerServiceMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/SysCustomerServiceMapper.xml new file mode 100644 index 000000000..ff15768e0 --- /dev/null +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/SysCustomerServiceMapper.xml @@ -0,0 +1,19 @@ + + + + + + + udpate sys_customer_servie + set status = #{status} + where manager_id = #{managerId} + + + \ No newline at end of file diff --git a/src/main/resources/templates/customer_service.html b/src/main/resources/templates/customer_service.html new file mode 100644 index 000000000..6a28a917e --- /dev/null +++ b/src/main/resources/templates/customer_service.html @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/src/main/ui/manage.html b/src/main/ui/manage.html index 0119b7692..a130e2479 100644 --- a/src/main/ui/manage.html +++ b/src/main/ui/manage.html @@ -120,6 +120,12 @@ margin-bottom: 10%;"/>