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%;"/>