diff --git a/src/db/modify.sql b/src/db/modify.sql
index f5605ad5d..af8eaf18f 100644
--- a/src/db/modify.sql
+++ b/src/db/modify.sql
@@ -611,4 +611,52 @@ CREATE TABLE `pre_apply_handle_log` (
ALTER TABLE `sys_client_pre_apply`
ADD COLUMN `status` tinyint(2) NULL DEFAULT 0 COMMENT '0:未处理,1:处理中,2:处理完成';
-alter table sys_clients add column hfindustry varchar(10) DEFAULT NULL COMMENT 'HF行业';
\ No newline at end of file
+alter table sys_clients add column hfindustry varchar(10) DEFAULT NULL COMMENT 'HF行业';
+
+alter table financial_bd_prize_rate_config add column `kpi_range` smallint(6) NOT NULL;
+alter table financial_bd_config add column `kpi_amount` decimal(15,2) DEFAULT NULL;
+alter table financial_bd_prize_log add column `kpi_amount` decimal(15,2) DEFAULT NULL;
+
+CREATE TABLE sys_permission_partner_modules (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ module_name varchar(50) NOT NULL COMMENT '模块名称',
+ js_module varchar(50) DEFAULT NULL COMMENT 'js module name',
+ js_path varchar(255) DEFAULT NULL COMMENT 'js module path',
+ remark varchar(50) DEFAULT NULL,
+ PRIMARY KEY (id)
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE sys_permission_partner_modules_clients (
+ id bigint(20) NOT NULL,
+ client_id int(11) NOT NULL COMMENT '客户编号',
+ client_moniker varchar(20) NOT NULL COMMENT '客户简写识别码',
+ module_id int(11) NOT NULL COMMENT '模块id',
+ is_valid tinyint(1) DEFAULT '1' COMMENT '1:启用,0:不启用',
+ PRIMARY KEY (id),
+ UNIQUE KEY unique_client_id_module_id (client_id,module_id),
+ KEY index_client_id (client_id),
+ KEY index_client_moniker (client_moniker)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE sys_permission_partner_functions (
+ func_id varchar(80) NOT NULL,
+ module_id int(11) DEFAULT NULL COMMENT '模块id',
+ role int(11) NOT NULL DEFAULT '0' COMMENT '有权限角色(mask)',
+ class_name varchar(30) NOT NULL COMMENT '类名',
+ method_name varchar(50) NOT NULL COMMENT '方法名',
+ uri varchar(200) NOT NULL COMMENT '请求地址',
+ req_methods varchar(50) NOT NULL,
+ module varchar(30) DEFAULT NULL COMMENT '所属模块',
+ name varchar(50) DEFAULT NULL COMMENT '别名(用于前端按钮指定权限)',
+ remark varchar(50) DEFAULT NULL COMMENT '备注',
+ is_valid tinyint(1) DEFAULT '1' COMMENT '是否有效',
+ PRIMARY KEY (func_id),
+ UNIQUE KEY uk_func_name (name)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE `act_charity` (
+ `client_id` int(11) DEFAULT NULL,
+ `client_moniker` varchar(20) NOT NULL COMMENT '客户简写识别码',
+ `active_time` date DEFAULT NULL,
+ PRIMARY KEY (`client_moniker`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
diff --git a/src/document/cn/apis.js b/src/document/cn/apis.js
index 19c7ec665..bec207b8a 100644
--- a/src/document/cn/apis.js
+++ b/src/document/cn/apis.js
@@ -687,7 +687,7 @@
* @apiDescription
* 接入微信小程序需完成海外主体认证,并且认证主体需要与在RoyalPay开通的商户主体一致。具体如何认证请查看微信公众平台相关文档。
* 用于小程序中发起支付,创建订单后返回小程序支付所需参数,该接口现仅支持微信小程序。
- * 接入参考文档
+ * 接入参考文档
*
*
* @apiVersion 1.0.0
diff --git a/src/main/java/au/com/royalpay/payment/manage/actchairty/beans/ActChairtyBean.java b/src/main/java/au/com/royalpay/payment/manage/actchairty/beans/ActChairtyBean.java
new file mode 100644
index 000000000..aac44aefa
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/actchairty/beans/ActChairtyBean.java
@@ -0,0 +1,33 @@
+package au.com.royalpay.payment.manage.actchairty.beans;
+
+import au.com.royalpay.payment.tools.exceptions.BadRequestException;
+import com.alibaba.fastjson.annotation.JSONField;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.Date;
+
+/**
+ * Created by yangluo on 2018/7/9.
+ */
+public class ActChairtyBean {
+ @JSONField(name = "date")
+ private String date;
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public java.util.Date toDate() {
+ try {
+ return DateUtils.parseDate(date, new String[]{"yyyy-MM-dd"});
+ } catch (ParseException e) {
+ throw new BadRequestException("Invalid To Date");
+ }
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/actchairty/beans/ActChairtyQuery.java b/src/main/java/au/com/royalpay/payment/manage/actchairty/beans/ActChairtyQuery.java
new file mode 100644
index 000000000..ee3f9340b
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/actchairty/beans/ActChairtyQuery.java
@@ -0,0 +1,75 @@
+package au.com.royalpay.payment.manage.actchairty.beans;
+
+import au.com.royalpay.payment.core.exceptions.ParamInvalidException;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.text.ParseException;
+import java.util.Date;
+
+/**
+ * redpack query
+ * Created by davep on 2016-08-03.
+ */
+public class ActChairtyQuery {
+ private static final String[] DATE_PATTERNS = {"yyyyMMdd", "yyyy-MM-dd"};
+ private String begin;
+ private String end;
+ private int page = 1;
+ private int limit = 20;
+
+ public JSONObject params() {
+ JSONObject param = new JSONObject();
+ if (begin != null) {
+ try {
+ Date fromDate = DateUtils.parseDate(begin, DATE_PATTERNS);
+ param.put("begin", fromDate);
+ } catch (ParseException e) {
+ throw new ParamInvalidException("begin", "error.payment.valid.invalid_date_format");
+ }
+ }
+ if (end != null) {
+ try {
+ Date fromDate = DateUtils.addDays(DateUtils.parseDate(end, DATE_PATTERNS), 1);
+ param.put("end", fromDate);
+ } catch (ParseException e) {
+ throw new ParamInvalidException("end", "error.payment.valid.invalid_date_format");
+ }
+ }
+ param.put("page",page);
+ param.put("limit",limit);
+ return param;
+ }
+
+ public String getBegin() {
+ return begin;
+ }
+
+ public void setBegin(String begin) {
+ this.begin = begin;
+ }
+
+ public String getEnd() {
+ return end;
+ }
+
+ public void setEnd(String end) {
+ this.end = end;
+ }
+
+ 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/actchairty/core/ActChairtyService.java b/src/main/java/au/com/royalpay/payment/manage/actchairty/core/ActChairtyService.java
new file mode 100644
index 000000000..e94e09f40
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/actchairty/core/ActChairtyService.java
@@ -0,0 +1,29 @@
+package au.com.royalpay.payment.manage.actchairty.core;
+
+
+import au.com.royalpay.payment.manage.actchairty.beans.ActChairtyBean;
+import com.alibaba.fastjson.JSONObject;
+import com.github.miemiedev.mybatis.paginator.domain.PageList;
+
+import java.util.List;
+
+/**
+ * Created by yangluo on 2018/7/9.
+ */
+
+public interface ActChairtyService {
+
+ void configClient(String clientMoniker, ActChairtyBean config, JSONObject manager);
+
+ JSONObject listChairClients(int page, int limit);
+
+ List getWeekendAnalysis(JSONObject params);
+
+ PageList getClientRank(JSONObject params);
+
+ JSONObject gettotal();
+
+
+
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/actchairty/core/impls/ActChairtyServiceImp.java b/src/main/java/au/com/royalpay/payment/manage/actchairty/core/impls/ActChairtyServiceImp.java
new file mode 100644
index 000000000..494d041c8
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/actchairty/core/impls/ActChairtyServiceImp.java
@@ -0,0 +1,145 @@
+package au.com.royalpay.payment.manage.actchairty.core.impls;
+
+import au.com.royalpay.payment.core.exceptions.InvalidShortIdException;
+import au.com.royalpay.payment.manage.actchairty.beans.ActChairtyBean;
+import au.com.royalpay.payment.manage.actchairty.core.ActChairtyService;
+import au.com.royalpay.payment.manage.mappers.act.ActChairtyMapper;
+import au.com.royalpay.payment.manage.merchants.core.ClientManager;
+import au.com.royalpay.payment.tools.utils.PageListUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
+import com.github.miemiedev.mybatis.paginator.domain.PageList;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.apache.commons.lang3.time.DateUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by yangluo on 2018/7/9.
+ */
+@Service
+public class ActChairtyServiceImp implements ActChairtyService {
+ Logger logger = LoggerFactory.getLogger(getClass());
+ @Resource
+ private ClientManager clientManager;
+ @Resource
+ private ActChairtyMapper actChairtyMapper;
+ @Override
+ public void configClient(String clientMoniker, ActChairtyBean config, JSONObject manager) {
+ JSONObject client = clientManager.getClientInfoByMoniker(clientMoniker);
+ if (client == null) {
+ throw new InvalidShortIdException();
+ }
+ JSONObject findChairty = actChairtyMapper.findChairtyClient(clientMoniker);
+ if (findChairty == null) {
+ JSONObject chairtyClient = new JSONObject();
+ chairtyClient.put("client_id", client.get("client_id"));
+ chairtyClient.put("client_moniker", clientMoniker);
+ chairtyClient.put("active_time", config.toDate());
+ actChairtyMapper.save(chairtyClient);
+ }
+ }
+
+ @Override
+ public JSONObject listChairClients(int page, int limit) {
+ PageList clients = actChairtyMapper.chairtyClientNum(new PageBounds(page, limit));
+ for (JSONObject client : clients){
+ client.put("client_moniker", client.getString("client_moniker"));
+ client.put("active_time", DateFormatUtils.format(client.getDate("active_time"), "yyyy/MM/dd"));
+ BigDecimal bg = new BigDecimal(client.getIntValue("count_ordernum") * 0.01);
+ double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ client.put("chairty_num", f1);
+ }
+ return PageListUtils.buildPageListResult(clients);
+ }
+
+ @Override
+ public List getWeekendAnalysis(JSONObject params) {
+ List result = new ArrayList<>();
+ List getAnalysis = actChairtyMapper.getChairtyWeekAnalysis(params.getDate("begin"), params.getDate("end"));
+ DateFormatUtils df = new DateFormatUtils();
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(params.getDate("begin"));
+ cal.add(cal.DAY_OF_MONTH, -1);
+ long beginTime = params.getDate("begin").getTime();
+ long endTime = params.getDate("end").getTime();
+ long betweenDays = (long)((endTime - beginTime) / (1000 * 60 * 60 *24));
+ List weekStart = new ArrayList<>();
+ for(int i=0;i<=betweenDays;i++){
+ cal.add(cal.DAY_OF_MONTH, 1);//DATE=日
+ if ((cal.get(Calendar.DAY_OF_WEEK)) == 2) {
+ weekStart.add(df.format(cal.getTime(),"yyyy-MM-dd"));
+ }
+ }
+ for(int i=0;i= dateStar.getTime() && orderDate < dateEnd.getTime()) {
+ count_ordernum = count_ordernum.add(getAnalysis.get(b).getBigDecimal("count_ordernum"));
+ sum_ordernum = sum_ordernum.add(getAnalysis.get(b).getBigDecimal("sum_ordernum"));
+ }
+ }
+ BigDecimal chairty = new BigDecimal(0.01);
+ BigDecimal chairty_amount = count_ordernum.multiply(chairty);
+ BigDecimal f1 = sum_ordernum.setScale(2, BigDecimal.ROUND_HALF_UP);
+ BigDecimal f2 = chairty_amount.setScale(2, BigDecimal.ROUND_HALF_UP);
+ weekDay.put("weekstart", weekStart.get(i));
+ weekDay.put("count_ordernum", count_ordernum);
+ weekDay.put("sum_ordernum", f1);
+ weekDay.put("chairty_amount",f2 );
+ result.add(weekDay);
+ } catch (Exception e) {
+ logger.info("Act_Chairty Error:",e);
+
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ public PageList getClientRank(JSONObject params) {
+ PageList getChairtyWeekRaking = actChairtyMapper.getChairtyWeekRaking(params.getDate("begin"), params.getDate("end"),new PageBounds(params.getIntValue("page"), params.getIntValue("limit")));
+ return getChairtyWeekRaking;
+ }
+
+ @Override
+ public JSONObject gettotal() {
+ List gettotalnum = actChairtyMapper.chairtyClientNum();
+ BigDecimal amount= new BigDecimal(0) ;
+ double chairty=0.00;
+ for (JSONObject gettotals : gettotalnum) {
+ amount = amount.add(gettotals.getBigDecimal("sum_ordernum"));
+ chairty += gettotals.getIntValue("count_ordernum") * 0.01;
+ }
+ BigDecimal bg = new BigDecimal(chairty);
+ double f1 = amount.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ double f2 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ JSONObject gettotal = new JSONObject();
+ gettotal.put("amount", f1);
+ gettotal.put("chairty", f2);
+ return gettotal;
+ }
+
+
+
+}
+
+
diff --git a/src/main/java/au/com/royalpay/payment/manage/actchairty/web/ActChairtyController.java b/src/main/java/au/com/royalpay/payment/manage/actchairty/web/ActChairtyController.java
new file mode 100644
index 000000000..5535f93e6
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/actchairty/web/ActChairtyController.java
@@ -0,0 +1,62 @@
+package au.com.royalpay.payment.manage.actchairty.web;
+
+import au.com.royalpay.payment.manage.actchairty.beans.ActChairtyBean;
+import au.com.royalpay.payment.manage.actchairty.beans.ActChairtyQuery;
+import au.com.royalpay.payment.manage.actchairty.core.ActChairtyService;
+import au.com.royalpay.payment.manage.cashback.core.CashbackService;
+import au.com.royalpay.payment.manage.management.clearing.core.SettleDelayConfigurer;
+import au.com.royalpay.payment.manage.permission.manager.ManagerMapping;
+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.JSONObject;
+import com.github.miemiedev.mybatis.paginator.domain.PageList;
+import org.springframework.validation.Errors;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * Created by yangluo on 2018/7/9.
+ */
+
+@RequestMapping(value = "/actchairty")
+@RestController
+public class ActChairtyController {
+ @Resource
+ private ActChairtyService actChairtyService;
+
+ @ManagerMapping(value = "/clients", method = RequestMethod.GET, role = { ManagerRole.ADMIN,ManagerRole.OPERATOR,ManagerRole.SITE_MANAGER })
+ public JSONObject listAttendingClients(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int limit) {
+ // todo params
+ return actChairtyService.listChairClients(page, limit);
+ }
+
+ @ManagerMapping(value = "/clients/{clientMoniker}", method = RequestMethod.PUT, role = { ManagerRole.ADMIN,ManagerRole.OPERATOR,ManagerRole.SITE_MANAGER })
+ public void configClient(@PathVariable String clientMoniker, @RequestBody @Valid ActChairtyBean config, Errors errors,
+ @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
+ HttpUtils.handleValidErrors(errors);
+ actChairtyService.configClient(clientMoniker, config, manager);
+ }
+
+ @ManagerMapping(value = "/traAnalysis", method = RequestMethod.GET, role = { ManagerRole.ADMIN,ManagerRole.OPERATOR,ManagerRole.SITE_MANAGER })
+ public List traAnalysis(ActChairtyQuery params) {
+ return actChairtyService.getWeekendAnalysis(params.params());
+ }
+ @ManagerMapping(value = "/ranking", method = RequestMethod.GET, role = { ManagerRole.ADMIN,ManagerRole.OPERATOR,ManagerRole.SITE_MANAGER })
+ public JSONObject getRanking(ActChairtyQuery params) {
+ PageList clientRank = actChairtyService.getClientRank(params.params());
+ if(clientRank==null){
+ return null;
+ }
+ return PageListUtils.buildPageListResult(clientRank);
+ }
+
+ @ManagerMapping(value = "/total", method = RequestMethod.GET, role = { ManagerRole.ADMIN,ManagerRole.OPERATOR,ManagerRole.SITE_MANAGER })
+ public JSONObject getTotal() {
+ return actChairtyService.gettotal();
+ }
+}
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 57dadf95b..96315216e 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
@@ -1160,6 +1160,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);
int counts = noticePartnerMapper.countNoticePartner(unReadParams);
notice.put("unReadCounts", counts);
notice.put("type", "notice");
@@ -1268,6 +1269,10 @@ public class RetailAppServiceImp implements RetailAppService {
if (AlipayOnline.containsKey("channel")) {
channels.add(AlipayOnline);
}
+ JSONObject Hf = getChannel(clientId,now,"hf");
+ if (Hf.containsKey("channel")){
+ channels.add(Hf);
+ }
res.put("channels", channels);
return res;
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/bdprize/core/BDPrizeService.java b/src/main/java/au/com/royalpay/payment/manage/bdprize/core/BDPrizeService.java
index 3277fd49e..ad7970323 100644
--- a/src/main/java/au/com/royalpay/payment/manage/bdprize/core/BDPrizeService.java
+++ b/src/main/java/au/com/royalpay/payment/manage/bdprize/core/BDPrizeService.java
@@ -12,7 +12,7 @@ import com.alibaba.fastjson.JSONObject;
* Created by yixian on 2017-02-07.
*/
public interface BDPrizeService {
- void generateRecord();
+ void generateRecord(String month);
@Transactional
void recordGenerateProcess(Calendar now);
@@ -38,4 +38,6 @@ public interface BDPrizeService {
void insertOrUpdateCommissionConfig(String month, List config, JSONObject manager) throws ParseException;
void deleteCommConfig(String config_id);
+
+ void updateBdKpiConfig(List configs, JSONObject manager)throws ParseException;
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/bdprize/core/impls/BDPrizeServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/bdprize/core/impls/BDPrizeServiceImpl.java
index 7d3d47954..c52dac881 100644
--- a/src/main/java/au/com/royalpay/payment/manage/bdprize/core/impls/BDPrizeServiceImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/bdprize/core/impls/BDPrizeServiceImpl.java
@@ -78,10 +78,10 @@ public class BDPrizeServiceImpl implements BDPrizeService {
private static BigDecimal percent = new BigDecimal(100);
- private static String[] channels = new String[]{"Wechat", "Alipay", "Bestpay", "jd", "AlipayOnline"};
+ private static String[] channels = new String[]{"Wechat", "Alipay", "Bestpay", "jd", "AlipayOnline","hf"};
@Override
- public void generateRecord() {
+ public void generateRecord(String month) {
if (backupSystem) {
throw new ServerErrorException("Updating System,wait for a moment");
}
@@ -89,9 +89,15 @@ public class BDPrizeServiceImpl implements BDPrizeService {
throw new ServerErrorException("Processing task, wait for a moment");
}
try {
- final Calendar now = Calendar.getInstance();
- DateUtils.truncate(now, Calendar.MONTH);
- now.add(Calendar.MONTH, -1);
+ SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM");
+ Date date = null;
+ try {
+ date = sdf.parse(month);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ Calendar now = Calendar.getInstance();
+ now.setTime(date);
recordGenerateProcess(now);
} finally {
@@ -133,10 +139,14 @@ public class BDPrizeServiceImpl implements BDPrizeService {
}
}
//BD Leader Prize
+ //bd_type:1 销售总监 2 大客户经理 3悉尼分公司经理 4 COO 5 NGDepartment
+ //todo 10月开始悉尼分公司经理不享受悉尼销售组提成
List bdLeaders = managerMapper.listByRole(1, ManagerRole.BD_LEADER.getMask());
for (JSONObject leader : bdLeaders) {
BigDecimal groupAmount = transactionMapper.TotalAmountForBDLeaderPrize(now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1,leader.getString("manager_id"));
- JSONObject rateJson = financialBDCommissionConfigMapper.findCurrentCommissionRate(month, groupAmount.toString(), 1);
+ JSONObject bdConfig = financialBDConfigMapper.getBdConfig(leader.getString("manager_id"));
+ int bd_type = bdConfig ==null?2:("Sydney").equals(bdConfig.getString("city"))?2:1;//sydney leader 即悉尼大客户经理
+ JSONObject rateJson = financialBDCommissionConfigMapper.findCurrentCommissionRate(month, groupAmount.toString(), bd_type);
BigDecimal groupPrize = new BigDecimal(0);
if (rateJson != null) {
groupPrize = groupAmount.multiply(new BigDecimal(rateJson.getString("commission_rate")).divide(percent)).setScale(2, BigDecimal.ROUND_DOWN);
@@ -212,28 +222,44 @@ public class BDPrizeServiceImpl implements BDPrizeService {
DateTime monthDate = new DateTime(month);
//bd manager commission
- JSONObject cityPrizeLog = new JSONObject();
- cityPrizeLog.put("total_amount", cplTotalprize);
- JSONObject cplRate = financialBDCommissionConfigMapper.findCurrentCommissionRate(month, cplTotalprize.toString(), 2);
- if (cplRate == null) {
- cityPrizeLog.put("total_prize", 0.00);
+// JSONObject cityPrizeLog = new JSONObject();
+// cityPrizeLog.put("total_amount", cplTotalprize);
+// JSONObject cplRate = financialBDCommissionConfigMapper.findCurrentCommissionRate(month, cplTotalprize.toString(), 2);
+// if (cplRate == null) {
+// cityPrizeLog.put("total_prize", 0.00);
+// } else {
+// BigDecimal _commission_rate = new BigDecimal(cplRate.getString("commission_rate"));
+// BigDecimal _total_amount = new BigDecimal(cityPrizeLog.getString("total_amount"));
+// BigDecimal total_prize = _total_amount.multiply(_commission_rate.divide(percent)).setScale(2, BigDecimal.ROUND_DOWN);
+// cityPrizeLog.put("total_prize", total_prize);
+// }
+// report.put("cityPrizeLogs", cityPrizeLog);
+
+ //bd_type=3 悉尼分公司经理 悉尼销售组和大客户组流水提成
+
+ JSONObject sydneyPrizeLog = new JSONObject();
+ BigDecimal sydneyAmount = transactionMapper.TotalAmountForSydneyGMPrize(monthDate.getYear(), monthDate.getMonthOfYear());
+ sydneyPrizeLog.put("total_amount",sydneyAmount);
+ JSONObject sydneyGMRate = financialBDCommissionConfigMapper.findCurrentCommissionRate(month, sydneyAmount.toString(), 3);
+ if (sydneyGMRate == null) {
+ sydneyPrizeLog.put("total_prize", 0.00);
} else {
- BigDecimal _commission_rate = new BigDecimal(cplRate.getString("commission_rate"));
- BigDecimal _total_amount = new BigDecimal(cityPrizeLog.getString("total_amount"));
- BigDecimal total_prize = _total_amount.multiply(_commission_rate.divide(percent)).setScale(2, BigDecimal.ROUND_DOWN);
- cityPrizeLog.put("total_prize", total_prize);
+ BigDecimal sydney_commission_rate = new BigDecimal(sydneyGMRate.getString("commission_rate"));
+ BigDecimal total_prize = sydneyAmount.multiply(sydney_commission_rate.divide(percent)).setScale(2, BigDecimal.ROUND_DOWN);
+ sydneyPrizeLog.put("total_prize", total_prize);
}
- report.put("cityPrizeLogs", cityPrizeLog);
+ report.put("sydneyPrizeLog", sydneyPrizeLog);
- //Director commission
- JSONObject directPrizeLogs = new JSONObject();
+ //COO & NJ commission
JSONObject params = new JSONObject();
params.put("begin", TimeZoneUtils.beginDate(TimeZoneUtils.getFirstDay(monthDate.toString())));
params.put("end", TimeZoneUtils.getPerFirstDayOfMonth(TimeZoneUtils.getLastDay(monthDate.toString())));
BigDecimal totalprize = transactionAnalysisMapper.analysisTotalAmount(params);
+
+ JSONObject directPrizeLogs = new JSONObject();
directPrizeLogs.put("total_amount", totalprize);
- JSONObject rate = financialBDCommissionConfigMapper.findCurrentCommissionRate(month, totalprize.toString(), 3);
+ JSONObject rate = financialBDCommissionConfigMapper.findCurrentCommissionRate(month, totalprize.toString(), 4);
if (rate == null) {
directPrizeLogs.put("total_prize", 0.00);
} else {
@@ -243,6 +269,18 @@ public class BDPrizeServiceImpl implements BDPrizeService {
directPrizeLogs.put("total_prize", total_prize);
}
report.put("directPrizeLogs", directPrizeLogs);
+
+ JSONObject ngDepartmentPrizeLog = new JSONObject();
+ ngDepartmentPrizeLog.put("total_amount", totalprize);
+ JSONObject ngRate = financialBDCommissionConfigMapper.findCurrentCommissionRate(month, totalprize.toString(), 5);
+ if (ngRate == null) {
+ ngDepartmentPrizeLog.put("total_prize", 0.00);
+ } else {
+ BigDecimal ng_commission_rate = new BigDecimal(ngRate.getString("commission_rate"));
+ BigDecimal ng_total_prize = totalprize.multiply(ng_commission_rate.divide(percent)).setScale(2, BigDecimal.ROUND_DOWN);
+ ngDepartmentPrizeLog.put("total_prize", ng_total_prize);
+ }
+ report.put("ngDepartmentPrizeLog", ngDepartmentPrizeLog);
return report;
}
@@ -418,5 +456,12 @@ public class BDPrizeServiceImpl implements BDPrizeService {
return firLasDay;
}
-
+ @Override
+ public void updateBdKpiConfig(List configs, JSONObject manager) throws ParseException {
+ for (JSONObject config : configs){
+ config.put("LAST_UPDATE_DATE", new Date());
+ config.put("LAST_UPDATE_BY", manager.getString("display_name"));
+ financialBDConfigMapper.updateBDConfig(config);
+ }
+ }
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/bdprize/support/impls/BDPrizeCalculatorDefaultImpl.java b/src/main/java/au/com/royalpay/payment/manage/bdprize/support/impls/BDPrizeCalculatorDefaultImpl.java
index 6980fa099..7107827b1 100644
--- a/src/main/java/au/com/royalpay/payment/manage/bdprize/support/impls/BDPrizeCalculatorDefaultImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/bdprize/support/impls/BDPrizeCalculatorDefaultImpl.java
@@ -46,16 +46,16 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator {
public BDPrizeCalculatorDefaultImpl rateConfig(List rateConfig) {
for (JSONObject rateCfgItem : rateConfig) {
int level = rateCfgItem.getIntValue("bd_level");
- int monthLevel = rateCfgItem.getIntValue("time_range");
+ int kpiRange = rateCfgItem.getIntValue("kpi_range");
Map> rates = rateConfigMap.get(level);
if (rates == null) {
rates = new HashMap<>();
rateConfigMap.put(level, rates);
}
- List rate = rates.get(monthLevel);
+ List rate = rates.get(kpiRange);
if (rate == null) {
rate = new ArrayList<>();
- rates.put(monthLevel, rate);
+ rates.put(kpiRange, rate);
}
rate.add(rateCfgItem);
}
@@ -81,18 +81,28 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator {
JSONObject bd = bdMap.get(resultItem.getKey());
int bdLevel = bd.getIntValue("bd_level");
log.put("bd_level", bdLevel);
+ log.put("kpi_amount", bd.getBigDecimal("kpi_amount"));
log.put("bd_name", bd.getString("bd_name"));
log.put("total_amount", 0);
log.put("total_prize", 0);
log.put("total_donation", 0);
+ BigDecimal totalAmount = log.getBigDecimal("total_amount");
List details = new ArrayList<>();
+ for (Map.Entry detail : resultItem.getValue().entrySet()) {
+ JSONObject detailItem = detail.getValue();
+ BigDecimal totalTransaction = detailItem.getBigDecimal("total_transaction");
+ BigDecimal coefficient = detailItem.getBigDecimal("coefficient");
+ BigDecimal realTransaction = totalTransaction.multiply(coefficient).setScale(2,BigDecimal.ROUND_DOWN);
+ totalAmount = totalAmount.add(realTransaction);
+ }
for (Map.Entry detail : resultItem.getValue().entrySet()) {
JSONObject detailItem = detail.getValue();
int clientId = detailItem.getIntValue("client_id");
- int months = detailItem.getIntValue("client_create_months");
- BigDecimal bdRate = getRate(bdLevel, months, detailItem.getIntValue("client_source"), detailItem.getBigDecimal("rate_value"));
+// int months = detailItem.getIntValue("client_create_months");
BigDecimal totalTransaction = detailItem.getBigDecimal("total_transaction");
BigDecimal coefficient = detailItem.getBigDecimal("coefficient");
+ int prizeLevel = getKpiPrizeLevel(totalAmount,log.getBigDecimal("kpi_amount"));
+ BigDecimal bdRate = getNewRate(bdLevel, prizeLevel, detailItem.getIntValue("client_source"), detailItem.getBigDecimal("rate_value"));
BigDecimal prizeValue = totalTransaction.multiply(coefficient).multiply(bdRate).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN);
BigDecimal donation = BigDecimal.ZERO;
if (clientsWithBDAwayDeterminor.clientWithBDAway(clientId, month)) {
@@ -208,4 +218,42 @@ public class BDPrizeCalculatorDefaultImpl implements BDPrizeCalculator {
}
throw new ServerErrorException("Prize Rate Config has no equalize:bdLevel=" + bdLevel + ",months=" + months + ",clientRate=" + clientRate.doubleValue());
}
+
+
+ private BigDecimal getNewRate(int bdLevel, int kpiRange, int clientSource, BigDecimal clientRate) {
+ BigDecimal prizeRate = BigDecimal.ZERO;
+ Map> rates = rateConfigMap.get(bdLevel);
+ List rate = rates.get(kpiRange);
+ for (JSONObject rateCfg : rate) {
+ if (rateCfg.getBigDecimal("rate_from").compareTo(clientRate) <= 0 && rateCfg.getBigDecimal("rate_to").compareTo(clientRate) >= 0) {
+ prizeRate= rateCfg.getBigDecimal("prize_rate");
+ continue;
+ }
+ }
+ if (clientSource == 1) {
+ return prizeRate;
+ } else {
+ return prizeRate.divide(BigDecimal.valueOf(2),3,BigDecimal.ROUND_HALF_DOWN);
+ }
+ }
+
+ private int getKpiPrizeLevel(BigDecimal transactionAmount,BigDecimal kpiAmount){
+ if (kpiAmount.compareTo(BigDecimal.ZERO)==0){//未设置kpi金额的按照最小完成度来计算
+ return 1;
+ }
+ BigDecimal rate = transactionAmount.divide(kpiAmount,2,BigDecimal.ROUND_HALF_DOWN);
+ if (rate.compareTo(BigDecimal.valueOf(0.5))<0){
+ return 1;
+ }
+ if (rate.compareTo(BigDecimal.valueOf(0.8))<0){
+ return 2;
+ }
+ if (rate.compareTo(BigDecimal.valueOf(1))<0){
+ return 3;
+ }
+ if (rate.compareTo(BigDecimal.valueOf(1.2))<0){
+ return 4;
+ }
+ return 5;
+ }
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/bdprize/web/BDPrizeController.java b/src/main/java/au/com/royalpay/payment/manage/bdprize/web/BDPrizeController.java
index bc5485c30..e3e75e552 100644
--- a/src/main/java/au/com/royalpay/payment/manage/bdprize/web/BDPrizeController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/bdprize/web/BDPrizeController.java
@@ -29,9 +29,9 @@ public class BDPrizeController {
@Resource
private BDPrizeService bdPrizeService;
- @ManagerMapping(value = "/generate_record", method = RequestMethod.POST, role = {ManagerRole.FINANCIAL_STAFF, ManagerRole.ADMIN})
- public void generateRecord() {
- bdPrizeService.generateRecord();
+ @ManagerMapping(value = "/generate_record/{month}", method = RequestMethod.POST, role = {ManagerRole.FINANCIAL_STAFF, ManagerRole.ADMIN})
+ public void generateRecord(@PathVariable String month) {
+ bdPrizeService.generateRecord(month);
}
@ManagerMapping(value = "/records", method = RequestMethod.GET, role = {ManagerRole.FINANCIAL_STAFF, ManagerRole.BD_USER})
@@ -92,4 +92,9 @@ public class BDPrizeController {
public List newCommissionConfig(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) throws ParseException {
return bdPrizeService.listNeedConfigCommission();
}
+
+ @ManagerMapping(value = "/commission/kpi/update/{month}",method = RequestMethod.POST, role = {ManagerRole.FINANCIAL_STAFF, ManagerRole.ADMIN})
+ public void updatKpiConfig(@PathVariable String month , @RequestBody List info , @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) throws ParseException {
+ bdPrizeService.updateBdKpiConfig(info,manager);
+ }
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/cashiers/web/CashierManageController.java b/src/main/java/au/com/royalpay/payment/manage/cashiers/web/CashierManageController.java
index ba425a6f4..161d3e465 100644
--- a/src/main/java/au/com/royalpay/payment/manage/cashiers/web/CashierManageController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/cashiers/web/CashierManageController.java
@@ -76,7 +76,7 @@ public class CashierManageController {
@PartnerMapping(value = "/orders/{cashier_id}", method = RequestMethod.GET)
@ResponseBody
- public JSONObject getPartnerCashierOrders(@PathVariable String cashier_id, @ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner,
+ public JSONObject getPartnerCashierOrdersById(@PathVariable String cashier_id, @ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner,
CashierQueryBean query) {
return cashierOrderService.listCashierOrders(cashier_id, partner, query);
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/customers/core/EncourageService.java b/src/main/java/au/com/royalpay/payment/manage/customers/core/EncourageService.java
index 5408473bf..a0aa8f94f 100644
--- a/src/main/java/au/com/royalpay/payment/manage/customers/core/EncourageService.java
+++ b/src/main/java/au/com/royalpay/payment/manage/customers/core/EncourageService.java
@@ -30,4 +30,6 @@ public interface EncourageService {
JSONObject listReceiveLogs(String eventId, ReceiveLogQueryBean query);
JSONObject listUseLogs(String eventId, int page, int limit);
+
+ void prepareUserInfo(JSONObject user, String user_id);
}
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 c6aa8a30b..d4bead124 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
@@ -1,27 +1,7 @@
package au.com.royalpay.payment.manage.customers.core.impls;
-import java.math.BigDecimal;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.RandomUtils;
-import org.apache.commons.lang3.time.DateFormatUtils;
-import org.apache.commons.lang3.time.DateUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.core.Ordered;
-import org.springframework.stereotype.Service;
-
-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 au.com.royalpay.payment.channels.wechat.config.WeChatPayConfig;
+import au.com.royalpay.payment.channels.wechat.config.WechatPayEnvironment;
import au.com.royalpay.payment.core.TransactionService;
import au.com.royalpay.payment.manage.customers.beans.EncourageEventParameters;
import au.com.royalpay.payment.manage.customers.beans.ReceiveLogQueryBean;
@@ -32,13 +12,38 @@ import au.com.royalpay.payment.manage.mappers.customers.CustomerEncourageMoneyUs
import au.com.royalpay.payment.manage.mappers.customers.CustomerMembershipMapper;
import au.com.royalpay.payment.manage.mappers.payment.OrderMapper;
import au.com.royalpay.payment.manage.mappers.system.CustomerMapper;
+import au.com.royalpay.payment.manage.mappers.system.ManagerCustomerRelationAlipayMapper;
import au.com.royalpay.payment.manage.mappers.system.ManagerMapper;
import au.com.royalpay.payment.tools.CommonConsts;
+import au.com.royalpay.payment.tools.connections.mpsupport.MpWechatApi;
+import au.com.royalpay.payment.tools.connections.mpsupport.MpWechatApiProvider;
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 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 com.github.miemiedev.mybatis.paginator.domain.PageList;
+
+import org.apache.commons.lang3.RandomUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.apache.commons.lang3.time.DateUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.core.Ordered;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
/**
* 鼓励金 Created by yixian on 2017-04-24.
*/
@@ -57,11 +62,15 @@ public class EncourageUseProcessor implements Ordered, EncourageService {
@Resource
private TransactionService transactionService;
@Resource
+ private MpWechatApiProvider mpWechatApiProvider;
+ @Resource
private CustomerMapper customerMapper;
@Resource
private ManagerMapper managerMapper;
@Resource
private OrderMapper orderMapper;
+ @Resource
+ private ManagerCustomerRelationAlipayMapper managerCustomerRelationAlipayMapper;
@Override
public int getOrder() {
@@ -76,6 +85,7 @@ public class EncourageUseProcessor implements Ordered, EncourageService {
@Override
public JSONObject takeEncourageMoney(String orderId, String visitorOpenId) {
+ logger.info("=====takeEncourageMoney+" + orderId);
JSONObject config = currentEncourageConfig();
if (config != null) {
if (customerEncourageMoneyAccessLogMapper.findByOrderId(orderId) != null) {
@@ -94,29 +104,64 @@ public class EncourageUseProcessor implements Ordered, EncourageService {
logger.debug("不在有效期");
return new JSONObject();
}
- if (!StringUtils.equals(openId, visitorOpenId)) {
- logger.debug("不是同一人");
- return new JSONObject();
+ String channel = order.getString("channel");
+ if ("Wechat".equals(channel)) {
+ JSONObject relation = customerMapper.findCustomerByOpenId(visitorOpenId);
+ if (relation == null) {
+ logger.debug("用户关系不存在");
+ return new JSONObject();
+ }
+ JSONObject wxUser = customerMapper.findCustomerByOpenId(visitorOpenId);
+ String merchantId = order.getString("merchant_id");
+ WeChatPayConfig.Merchant mch = WechatPayEnvironment.getEnv().getMerchantConfig(merchantId);
+ MpWechatApi api = mpWechatApiProvider.getApi(mch.getMpId());
+ if (!StringUtils.equals(wxUser.getString(api.getOpenIdKey()), openId)) {
+ logger.debug("不是同一人");
+ return new JSONObject();
+ }
+ }
+ if ("Alipay".equals(channel)) {
+ if (!StringUtils.equals(visitorOpenId, openId)) {
+ logger.debug("不是同一人");
+ return new JSONObject();
+ }
}
- if (config.getBooleanValue("debug_mode") && !checkIsDeveloper(openId)) {
+ if (config.getBooleanValue("debug_mode") && !checkIsDeveloper(visitorOpenId)) {
logger.debug("测试模式,不是管理员");
return new JSONObject();
}
- JSONObject member = customerMembershipMapper.findByPaymentOpenId(openId);
+ JSONObject member = customerMembershipMapper.findByPaymentOpenId(visitorOpenId);
if (member == null) {
member = new JSONObject();
- JSONObject relation = customerMapper.findCustomerByOpenId(openId);
- if (relation == null) {
- logger.debug("用户关系不存在");
- return new JSONObject();
+ if ("Wechat".equals(channel)) {
+ JSONObject relation = customerMapper.findCustomerByOpenId(visitorOpenId);
+ if (relation == null) {
+ logger.debug("用户关系不存在");
+ return new JSONObject();
+ }
+ member.put("payment_openid", visitorOpenId);
+ member.put("kanga_openid", relation.getString("kanga_openid"));
+ member.put("redpack_openid", relation.getString("redpack_openid"));
+ member.put("attend_time", new Date());
+ member.put("member_point", -1);
+ member.put("encourage_balance", 0);
+ customerMembershipMapper.saveMember(member);
}
- member.put("payment_openid", openId);
- member.put("kanga_openid", relation.getString("kanga_openid"));
- member.put("redpack_openid", relation.getString("redpack_openid"));
- member.put("attend_time", new Date());
- member.put("member_point", -1);
- member.put("encourage_balance", 0);
- customerMembershipMapper.saveMember(member);
+ if ("Alipay".equals(channel)) {
+ JSONObject relation = managerCustomerRelationAlipayMapper.findCustomerByUserId(openId);
+ if (relation == null) {
+ logger.debug("用户关系不存在");
+ return new JSONObject();
+ }
+ member.put("payment_openid", openId);
+ member.put("kanga_openid", openId.concat("-kanga_openid"));
+ member.put("redpack_openid", openId.concat("-redpack_openid"));
+ member.put("attend_time", new Date());
+ member.put("member_point", -1);
+ member.put("encourage_balance", 0);
+ customerMembershipMapper.saveMember(member);
+ }
+
}
String memberId = member.getString("member_id");
int usedOrders = customerEncourageMoneyAccessLogMapper.countOrders(memberId, new Date());
@@ -124,8 +169,8 @@ public class EncourageUseProcessor implements Ordered, EncourageService {
logger.debug("超出领取次数");
return new JSONObject();
}
- int rand = RandomUtils
- .nextInt(0,config.getBigDecimal("max_amount").subtract(config.getBigDecimal("min_amount")).multiply(CommonConsts.HUNDRED).intValue());
+ int rand = RandomUtils.nextInt(0,
+ config.getBigDecimal("max_amount").subtract(config.getBigDecimal("min_amount")).multiply(CommonConsts.HUNDRED).intValue());
BigDecimal amount = config.getBigDecimal("min_amount").add(BigDecimal.valueOf(rand).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_DOWN));
customerMembershipMapper.addEncourage(memberId, amount);
JSONObject customer = customerMembershipMapper.findByMemberId(memberId);
@@ -165,8 +210,8 @@ public class EncourageUseProcessor implements Ordered, EncourageService {
}
if (log.getBigDecimal("factor").compareTo(BigDecimal.ONE) == 0) {
int critRate = config.getIntValue("crit_rate");
- if (RandomUtils.nextInt(0,100) < critRate) {
- int factorInt = RandomUtils.nextInt(0,config.getBigDecimal("max_crit").multiply(CommonConsts.HUNDRED).intValue() - 100);
+ if (RandomUtils.nextInt(0, 100) < critRate) {
+ int factorInt = RandomUtils.nextInt(0, config.getBigDecimal("max_crit").multiply(CommonConsts.HUNDRED).intValue() - 100);
BigDecimal factor = BigDecimal.valueOf(factorInt + 100).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_DOWN);
BigDecimal actural = log.getBigDecimal("access_amount").multiply(factor).setScale(2, BigDecimal.ROUND_DOWN);
BigDecimal sub = actural.subtract(log.getBigDecimal("actural_amount"));
@@ -195,16 +240,22 @@ public class EncourageUseProcessor implements Ordered, EncourageService {
Date toDate = config.getDate("to_date");
status.put("to", DateFormatUtils.format(toDate, "MM-dd"));
JSONObject member = customerMembershipMapper.findByPaymentOpenId(openid);
+ JSONObject use = customerEncourageMoneyAccessLogMapper.sumMoney(member.getString("memeber_id"),config.getString("event_id"));
+ BigDecimal balance = BigDecimal.ZERO;
+ if(use!=null){
+ balance = use.getBigDecimal("use_amount");
+ }
+ member.put("used_amount",balance.setScale(2, BigDecimal.ROUND_DOWN).toPlainString());
if (member != null) {
status.put("member_info", member);
List balanceLogs = customerMembershipMapper.listEncourageBalanceHistory(fromDate, toDate, member.getString("member_id"));
status.put("logs", balanceLogs);
- BigDecimal usedAmount = customerEncourageMoneyUseLogMapper.sumUsed(member.getString("member_id"), fromDate, toDate);
- member.put("used_amount", usedAmount);
+// BigDecimal usedAmount = customerEncourageMoneyUseLogMapper.sumUsed(member.getString("member_id"), fromDate, toDate);
+// member.put("used_amount", usedAmount);
} else {
member = new JSONObject();
member.put("encourage_balance", 0);
- member.put("used_amount", 0);
+// member.put("used_amount", 0);
}
status.put("member", member);
return status;
@@ -285,4 +336,14 @@ public class EncourageUseProcessor implements Ordered, EncourageService {
PageList receiveLogs = customerEncourageMoneyUseLogMapper.list(params, new PageBounds(page, limit, Order.formString("use_time.desc")));
return PageListUtils.buildPageListResult(receiveLogs);
}
+
+ @Override
+ public void prepareUserInfo(JSONObject user, String user_id) {
+ if ("wechat".equals(user.getString("channel"))) {
+ user.put("headimg", customerMapper.findCustomerByOpenId(user_id).getString("headimg"));
+ }
+ if ("alipay".equals(user.getString("channel"))) {
+ user.put("headimg", managerCustomerRelationAlipayMapper.findCustomerByUserId(user_id).getString("headimg"));
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/au/com/royalpay/payment/manage/customers/web/CouponValidateController.java b/src/main/java/au/com/royalpay/payment/manage/customers/web/CouponValidateController.java
index bce2f514e..d4eeece61 100644
--- a/src/main/java/au/com/royalpay/payment/manage/customers/web/CouponValidateController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/customers/web/CouponValidateController.java
@@ -23,7 +23,7 @@ public class CouponValidateController {
@PartnerMapping(value = "/get_used_coupon",method = RequestMethod.GET,roles = {PartnerRole.ADMIN,PartnerRole.MANAGER})
@ResponseBody
- public JSONObject getCoupon(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner, @RequestParam("page") int page){
+ public JSONObject getUsedCoupon(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner, @RequestParam("page") int page){
return couponVerificationService.getCoupon(partner,page,10);
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/customers/web/EncourageMoneyController.java b/src/main/java/au/com/royalpay/payment/manage/customers/web/EncourageMoneyController.java
index 6aa15d077..8a753f4e4 100644
--- a/src/main/java/au/com/royalpay/payment/manage/customers/web/EncourageMoneyController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/customers/web/EncourageMoneyController.java
@@ -2,10 +2,17 @@ package au.com.royalpay.payment.manage.customers.web;
import au.com.royalpay.payment.manage.customers.core.EncourageService;
import au.com.royalpay.payment.tools.CommonConsts;
-import au.com.royalpay.payment.tools.connections.mpsupport.beans.WxOauthType;
-import au.com.royalpay.payment.tools.permission.wechat.WechatMapping;
+
import com.alibaba.fastjson.JSONObject;
-import org.springframework.web.bind.annotation.*;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
@@ -16,15 +23,25 @@ import javax.annotation.Resource;
@RestController
@RequestMapping("/act/encourage_money")
public class EncourageMoneyController {
+ Logger logger = LoggerFactory.getLogger(getClass());
@Resource
private EncourageService encourageService;
- @RequestMapping(value = "/orders/{orderId}", method = RequestMethod.PUT)
- public JSONObject takeEncourageMoney(@PathVariable String orderId, @ModelAttribute(CommonConsts.WECHATINFO) JSONObject wxUser) {
+
+ @RequestMapping(value = "/orders/{orderId}", method = RequestMethod.GET)
+ public JSONObject takeEncourageMoney(@PathVariable String orderId, @ModelAttribute(CommonConsts.WECHATINFO) JSONObject wxUser,
+ @ModelAttribute(CommonConsts.ALIUSER) JSONObject aliuser) {
+ String user_id = "";
if (wxUser == null) {
+ user_id = aliuser.getString("user_id");
+ } else {
+ logger.info("====wxUser==" + wxUser.toJSONString());
+ user_id = wxUser.getString("openid");
+ }
+ if (StringUtils.isEmpty(user_id)) {
return new JSONObject();
}
- return encourageService.takeEncourageMoney(orderId, wxUser.getString("openid"));
+ return encourageService.takeEncourageMoney(orderId, user_id);
}
@RequestMapping(value = "/orders/{orderId}/crit", method = RequestMethod.PUT)
@@ -32,22 +49,36 @@ public class EncourageMoneyController {
return encourageService.doubleEncourageMoney(orderId);
}
- @WechatMapping(value = "/my", method = RequestMethod.GET, oauthType = WxOauthType.USERINFO)
- public ModelAndView encourageLogs(@ModelAttribute(CommonConsts.WECHATINFO) JSONObject wxUser) {
+ @RequestMapping(value = "/my", method = RequestMethod.GET)
+ public ModelAndView encourageLogs(@ModelAttribute(CommonConsts.WECHATINFO) JSONObject wxUser, @ModelAttribute(CommonConsts.ALIUSER) JSONObject aliuser) {
ModelAndView mav = new ModelAndView("activity/encourage_money/my");
- mav.addObject("wxUser", wxUser);
- JSONObject balanceStatus = encourageService.getBalanceStatus(wxUser.getString("openid"));
+ JSONObject user = new JSONObject();
+ String user_id = "";
+ if (wxUser == null) {
+ user.put("headimg", aliuser.getString("avatar"));
+ user.put("channel","alipay");
+ user_id = aliuser.getString("user_id");
+ } else {
+ user.put("headimg", wxUser.getString("headimgurl"));
+ user.put("channel","wechat");
+ user_id = wxUser.getString("openid");
+ }
+ if(StringUtils.isEmpty(user.getString("headimg"))) {
+ encourageService.prepareUserInfo(user, user_id);
+ }
+ JSONObject balanceStatus = encourageService.getBalanceStatus(user_id);
+ mav.addObject("user", user);
mav.addObject("balance_status", balanceStatus);
return mav;
}
- @WechatMapping(value = "/desc",method = RequestMethod.GET)
- public ModelAndView descPage(){
+ @RequestMapping(value = "/desc", method = RequestMethod.GET)
+ public ModelAndView descPage() {
return new ModelAndView("activity/encourage_money/desc");
}
- @WechatMapping(value = "/merchants",method = RequestMethod.GET)
- public ModelAndView merchantsPage(){
+ @RequestMapping(value = "/merchants", method = RequestMethod.GET)
+ public ModelAndView merchantsPage() {
return new ModelAndView("activity/encourage_money/merchants");
}
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/bean/AliExcel.java b/src/main/java/au/com/royalpay/payment/manage/dev/bean/AliExcel.java
new file mode 100644
index 000000000..60f93cf12
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/dev/bean/AliExcel.java
@@ -0,0 +1,476 @@
+package au.com.royalpay.payment.manage.dev.bean;
+
+import au.com.royalpay.payment.core.exceptions.ParamInvalidException;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+
+/**
+ * Created by yixian on 2016-07-01.
+ */
+public class AliExcel {
+ private final DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ private String textType;
+ private String searchText;
+ private String client_moniker;
+ private String state;
+ private String suburb;
+ private String short_name;
+ private String sub_merchant_id;
+ private String org_id;
+ private String org_ids;
+ private String bd;
+ private String business_structure;
+ private String industry;
+ private Integer clean_day;
+ private String bd_city;
+ private String surcharge_start_rate;
+ private String surcharge_end_rate;
+ private String create_start_time;
+ private String datefrom;
+ private String create_end_time;
+ private String dateto;
+ private String transaction_start_time;
+ private String transaction_end_time;
+ private boolean approving = false;
+ private int page = 1;
+ private int limit = 10;
+ private boolean onlyMe = false;
+ private boolean tempMchId = false;
+ private boolean quickPass = false;
+ private boolean greenChannel = false;
+ private boolean greenChannelBdTodo = false;
+ private boolean pass = false;
+ private boolean completed_contract = false;
+ private boolean apply_to_back = false;
+ private boolean bd_upload_material = false;
+ private boolean is_valid = false;
+ private String merchant_id;
+
+ public String getClient_moniker() {
+ return StringUtils.isEmpty(client_moniker) ? null : client_moniker;
+ }
+
+ public void setClient_moniker(String client_moniker) {
+ this.client_moniker = client_moniker;
+ }
+
+ public String getShort_name() {
+ return short_name;
+ }
+
+ public void setShort_name(String short_name) {
+ this.short_name = short_name;
+ }
+
+ public String getSub_merchant_id() {
+ return sub_merchant_id;
+ }
+
+ public void setSub_merchant_id(String sub_merchant_id) {
+ this.sub_merchant_id = sub_merchant_id;
+ }
+
+ 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;
+ }
+
+ public JSONObject toJsonParam() {
+ JSONObject param = new JSONObject();
+ if (StringUtils.isNotBlank(client_moniker)) {
+ param.put("client_moniker", getClient_moniker());
+ }
+ if (StringUtils.isNotBlank(short_name)) {
+ param.put("short_name", short_name);
+ }
+ if (StringUtils.isNotBlank(sub_merchant_id)) {
+ param.put("sub_merchant_id", sub_merchant_id);
+ }
+ if (StringUtils.isNotBlank(state)) {
+ param.put("state", state);
+ }
+ if (StringUtils.isNotBlank(suburb)) {
+ param.put("suburb", suburb);
+ }
+ if (StringUtils.isNotBlank(searchText)) {
+ param.put("search_text", searchText);
+ if (StringUtils.isNotBlank(textType)) {
+ param.put("text_type", textType);
+ } else {
+ param.put("text_type", "all");
+ }
+ }
+ if (approving) {
+ param.put("approving", true);
+ }
+ if (org_id != null) {
+ param.put("org_id", org_id);
+ }
+ if (org_ids != null) {
+ param.put("org_ids", org_ids);
+ }
+ if (StringUtils.isNotBlank(bd)) {
+ param.put("bd_user", bd);
+ }
+ if (quickPass){
+ param.put("quickPass",true);
+ }
+ if (greenChannel){
+ param.put("greenChannel",true);
+ }
+ if (business_structure!=null && !business_structure.equals("")){
+ param.put("business_structure",business_structure);
+ }
+ if (industry!=null && !industry.equals("")){
+ param.put("industry",industry);
+ }
+ if (bd_city!=null && !bd_city.equals("")){
+ param.put("bd_city",bd_city);
+ }
+ if (clean_day!=null){
+ param.put("clean_day",clean_day);
+ }
+ if (surcharge_start_rate!=null) {
+ param.put("surcharge_start_rate",surcharge_start_rate);
+ }
+ if (surcharge_end_rate!=null){
+ param.put("surcharge_end_rate",surcharge_end_rate);
+ }
+ if (transaction_start_time != null) {
+ try {
+ param.put("transaction_start_time", format.parse(transaction_start_time));
+ } catch (ParseException e) {
+ throw new ParamInvalidException("transaction_start_time", "error.payment.valid.invalid_date_format");
+ }
+ }
+ if (transaction_end_time != null) {
+ try {
+ param.put("transaction_end_time", DateUtils.addDays(format.parse(transaction_end_time), 1));
+ } catch (ParseException e) {
+ throw new ParamInvalidException("transaction_end_time", "error.payment.valid.invalid_date_format");
+ }
+ }
+ if (create_start_time != null) {
+ try {
+ param.put("create_start_time", format.parse(create_start_time));
+ } catch (ParseException e) {
+ throw new ParamInvalidException("create_start_time", "error.payment.valid.invalid_date_format");
+ }
+ }
+ if (create_end_time != null) {
+ try {
+ param.put("create_end_time", DateUtils.addDays(format.parse(create_end_time), 1));
+ } catch (ParseException e) {
+ throw new ParamInvalidException("create_end_time", "error.payment.valid.invalid_date_format");
+ }
+ }
+ if (datefrom != null) {
+ try {
+ param.put("datefrom", format.parse(datefrom));
+ } catch (ParseException e) {
+ throw new ParamInvalidException("approve_start_time", "error.payment.valid.invalid_date_format");
+ }
+ }
+ if (dateto != null) {
+ try {
+ param.put("dateto", DateUtils.addDays(format.parse(dateto), 1));
+ } catch (ParseException e) {
+ throw new ParamInvalidException("approve_end_time", "error.payment.valid.invalid_date_format");
+ }
+ }
+ if (greenChannelBdTodo){
+ param.put("greenChannelBdTodo",true);
+ }
+ if (is_valid){
+ param.put("is_valid",true);
+ }
+ if (pass){
+ param.put("pass",true);
+ }
+ if (completed_contract){
+ param.put("completed_contract",true);
+ }
+ if (apply_to_back){
+ param.put("apply_to_back",true);
+ }
+ if (bd_upload_material){
+ param.put("bd_upload_material",true);
+ }
+ if (merchant_id != null){
+ param.put("merchant_id",merchant_id);
+ }
+ return param;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public String getTextType() {
+ return textType;
+ }
+
+ public void setTextType(String textType) {
+ this.textType = textType;
+ }
+
+ public String getSearchText() {
+ return searchText;
+ }
+
+ public void setSearchText(String searchText) {
+ this.searchText = searchText;
+ }
+
+ public String getOrg_id() {
+ return org_id;
+ }
+
+ public void setOrg_id(String org_id) {
+ this.org_id = org_id;
+ }
+
+ public void setOnlyMe(boolean onlyMe) {
+ this.onlyMe = onlyMe;
+ }
+
+ public boolean getOnlyMe() {
+ return onlyMe;
+ }
+
+ public boolean isTempMchId() {
+ return tempMchId;
+ }
+
+ public void setTempMchId(boolean tempMchId) {
+ this.tempMchId = tempMchId;
+ }
+
+ public String getBusiness_structure() {
+ return business_structure;
+ }
+
+ public void setBusiness_structure(String business_structure) {
+ this.business_structure = business_structure;
+ }
+
+ public String getIndustry() {
+ return industry;
+ }
+
+ public void setIndustry(String industry) {
+ this.industry = industry;
+ }
+
+ public Integer getClean_day() {
+ return clean_day;
+ }
+
+ public void setClean_day(Integer clean_day) {
+ this.clean_day = clean_day;
+ }
+
+ public String getBd_city() {
+ return bd_city;
+ }
+
+ public void setBd_city(String bd_city) {
+ this.bd_city = bd_city;
+ }
+
+ public String getCreate_start_time() {
+ return create_start_time;
+ }
+
+ public void setCreate_start_time(String create_start_time) {
+ this.create_start_time = create_start_time;
+ }
+
+ public String getDatefrom() {
+ return datefrom;
+ }
+
+ public void setDatefrom(String datefrom) {
+ this.datefrom = datefrom;
+ }
+
+ public String getCreate_end_time() {
+ return create_end_time;
+ }
+
+ public void setCreate_end_time(String create_end_time) {
+ this.create_end_time = create_end_time;
+ }
+
+ public String getDateto() {
+ return dateto;
+ }
+
+ public void setDateto(String dateto) {
+ this.dateto = dateto;
+ }
+
+ public String getSurcharge_start_rate() {
+ return surcharge_start_rate;
+ }
+
+ public void setSurcharge_start_rate(String surcharge_start_rate) {
+ this.surcharge_start_rate = surcharge_start_rate;
+ }
+
+ public String getTransaction_start_time() {
+ return transaction_start_time;
+ }
+
+ public void setTransaction_start_time(String transaction_start_time) {
+ this.transaction_start_time = transaction_start_time;
+ }
+
+ public String getTransaction_end_time() {
+ return transaction_end_time;
+ }
+
+ public void setTransaction_end_time(String transaction_end_time) {
+ this.transaction_end_time = transaction_end_time;
+ }
+
+ public String getSurcharge_end_rate() {
+ return surcharge_end_rate;
+ }
+
+ public void setSurcharge_end_rate(String surcharge_end_rate) {
+ this.surcharge_end_rate = surcharge_end_rate;
+ }
+
+ public boolean isOnlyMe() {
+ return onlyMe;
+ }
+
+ public boolean isApproving() {
+ return approving;
+ }
+
+ public void setApproving(boolean approving) {
+ this.approving = approving;
+ }
+
+ public boolean isQuickPass() {
+ return quickPass;
+ }
+
+ public void setQuickPass(boolean quickPass) {
+ this.quickPass = quickPass;
+ }
+
+ public boolean isGreenChannel() {
+ return greenChannel;
+ }
+
+ public void setGreenChannel(boolean greenChannel) {
+ this.greenChannel = greenChannel;
+ }
+ public void setGreenChannelAndBDtodo(boolean bDTodo){
+ this.greenChannelBdTodo = bDTodo;
+ }
+ public void setIs_valid(boolean is_valid){
+ this.is_valid=is_valid;
+ }
+
+ public DateFormat getFormat() {
+ return format;
+ }
+
+ public boolean isGreenChannelBdTodo() {
+ return greenChannelBdTodo;
+ }
+
+ public void setGreenChannelBdTodo(boolean greenChannelBdTodo) {
+ this.greenChannelBdTodo = greenChannelBdTodo;
+ }
+
+ public boolean isPass() {
+ return pass;
+ }
+
+ public void setPass(boolean pass) {
+ this.pass = pass;
+ }
+
+ public boolean isCompleted_contract() {
+ return completed_contract;
+ }
+
+ public void setCompleted_contract(boolean completed_contract) {
+ this.completed_contract = completed_contract;
+ }
+
+ public boolean isApply_to_back() {
+ return apply_to_back;
+ }
+
+ public void setApply_to_back(boolean apply_to_back) {
+ this.apply_to_back = apply_to_back;
+ }
+
+ public boolean isBd_upload_material() {
+ return bd_upload_material;
+ }
+
+ public void setBd_upload_material(boolean bd_upload_material) {
+ this.bd_upload_material = bd_upload_material;
+ }
+
+ public boolean isIs_valid() {
+ return is_valid;
+ }
+
+ public String getOrg_ids() {
+ return org_ids;
+ }
+
+ public void setOrg_ids(String org_ids) {
+ this.org_ids = org_ids;
+ }
+
+ public void setBd(String bd) {
+ this.bd = bd;
+ }
+
+ public String getMerchant_id() {
+ return merchant_id;
+ }
+
+ public void setMerchant_id(String merchant_id) {
+ this.merchant_id = merchant_id;
+ }
+
+ public String getSuburb() {
+ return suburb;
+ }
+
+ public void setSuburb(String suburb) {
+ this.suburb = suburb;
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/bean/ClientTestRegisterInfo.java b/src/main/java/au/com/royalpay/payment/manage/dev/bean/ClientTestRegisterInfo.java
new file mode 100644
index 000000000..eeabc9de8
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/dev/bean/ClientTestRegisterInfo.java
@@ -0,0 +1,355 @@
+package au.com.royalpay.payment.manage.dev.bean;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import javax.validation.constraints.Pattern;
+/**
+ * Created by yangluo on 2018/06/28.
+ */
+public class ClientTestRegisterInfo {
+ @JSONField(name = "client_moniker")
+ @NotEmpty(message = "error.payment.valid.param_missing")
+ @Pattern(regexp = "^[a-zA-Z0-9]{4}$", message = "Parameter error(partner code):Only letters or numbers are allowed")
+ private String clientMoniker;
+ private String companyName;
+ private String shortName;
+ private String businessName;
+ private String businessStructure;
+ // @NotEmpty(message = "error.payment.valid.param_missing")
+ private String abn;
+ private String acn;
+ // @NotEmpty(message = "error.payment.valid.param_missing")
+ private String industry;
+ /* @NotEmpty(message = "error.payment.valid.param_missing")*/
+ private String alipayIndustry;
+ private String companyPhoto;
+ private String storePhoto;
+ private String companyWebsite;
+ private String companyPhone;
+ private String description;
+ private String remark;
+ private String sector;
+ @JSONField(name = "logo_id")
+ private String logoId;
+ @JSONField(name = "contact_person")
+ private String contactPerson;
+ @JSONField(name = "contact_phone")
+ private String contactPhone;
+ @JSONField(name = "contact_email")
+ private String contactEmail;
+ private String address;
+ private String suburb;
+ private String postcode;
+ private String state;
+ private String country;
+ private String timezone;
+ private String jdindustry;
+ private String royalpayindustry;
+
+ private String referrer_id;
+ private String referrer_name;
+
+ private String client_apply_id;
+
+ private String business_hours;
+ private String merchant_introduction;
+ private String merchant_tag;
+ private String merchant_video_url;
+
+ public JSONObject insertObject() {
+ JSONObject res = (JSONObject) JSON.toJSON(this);
+ if (client_apply_id==null){
+ res.remove("client_apply_id");
+ }
+ return res;
+ }
+
+ public JSONObject updateObject() {
+ JSONObject obj = insertObject();
+ obj.remove("client_moniker");
+ return obj;
+ }
+
+ public String getClientMoniker() {
+ return clientMoniker.toUpperCase();
+ }
+
+ public void setClientMoniker(String clientMoniker) {
+ this.clientMoniker = clientMoniker;
+ }
+
+ public String getCompanyName() {
+ return companyName;
+ }
+
+ public void setCompanyName(String companyName) {
+ this.companyName = companyName;
+ }
+
+ public String getShortName() {
+ return shortName;
+ }
+
+ public void setShortName(String shortName) {
+ this.shortName = shortName;
+ }
+
+ public String getBusinessName() {
+ return businessName;
+ }
+
+ public void setBusinessName(String businessName) {
+ this.businessName = businessName;
+ }
+
+ public String getAbn() {
+ return abn;
+ }
+
+ public void setAbn(String abn) {
+ this.abn = abn;
+ }
+
+ public String getAcn() {
+ return acn;
+ }
+
+ public void setAcn(String acn) {
+ this.acn = acn;
+ }
+
+ public String getIndustry() {
+ return industry;
+ }
+
+ public void setIndustry(String industry) {
+ this.industry = industry;
+ }
+
+ public String getCompanyPhoto() {
+ return companyPhoto;
+ }
+
+ public void setCompanyPhoto(String companyPhoto) {
+ this.companyPhoto = companyPhoto;
+ }
+
+ public String getStorePhoto() {
+ return storePhoto;
+ }
+
+ public void setStorePhoto(String storePhoto) {
+ this.storePhoto = storePhoto;
+ }
+
+ public String getCompanyWebsite() {
+ return companyWebsite;
+ }
+
+ public void setCompanyWebsite(String companyWebsite) {
+ this.companyWebsite = companyWebsite;
+ }
+
+ public String getCompanyPhone() {
+ return companyPhone;
+ }
+
+ public void setCompanyPhone(String companyPhone) {
+ this.companyPhone = companyPhone;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getSector() {
+ return sector;
+ }
+
+ public void setSector(String sector) {
+ this.sector = sector;
+ }
+
+ public String getLogoId() {
+ return logoId;
+ }
+
+ public void setLogoId(String logoId) {
+ this.logoId = logoId;
+ }
+
+ public String getContactPerson() {
+ return contactPerson;
+ }
+
+ public void setContactPerson(String contactPerson) {
+ this.contactPerson = contactPerson;
+ }
+
+ public String getContactPhone() {
+ return contactPhone;
+ }
+
+ public void setContactPhone(String contactPhone) {
+ this.contactPhone = contactPhone;
+ }
+
+ public String getContactEmail() {
+ return contactEmail;
+ }
+
+ public void setContactEmail(String contactEmail) {
+ this.contactEmail = contactEmail;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public String getSuburb() {
+ return suburb;
+ }
+
+ public void setSuburb(String suburb) {
+ this.suburb = suburb;
+ }
+
+ public String getPostcode() {
+ return postcode;
+ }
+
+ public void setPostcode(String postcode) {
+ this.postcode = postcode;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getTimezone() {
+ return timezone;
+ }
+
+ public void setTimezone(String timezone) {
+ this.timezone = timezone;
+ }
+
+ public String getClient_apply_id() {
+ return client_apply_id;
+ }
+
+ public void setClient_apply_id(String client_apply_id) {
+ this.client_apply_id = client_apply_id;
+ }
+
+ public String getBusinessStructure() {
+ return businessStructure;
+ }
+
+ public void setBusinessStructure(String businessStructure) {
+ this.businessStructure = businessStructure;
+ }
+
+ public String getReferrer_id() {
+ return referrer_id;
+ }
+
+ public void setReferrer_id(String referrer_id) {
+ this.referrer_id = referrer_id;
+ }
+
+ public String getReferrer_name() {
+ return referrer_name;
+ }
+
+ public void setReferrer_name(String referrer_name) {
+ this.referrer_name = referrer_name;
+ }
+
+ public String getAlipayIndustry() {
+ return alipayIndustry;
+ }
+
+ public void setAlipayIndustry(String alipayIndustry) {
+ this.alipayIndustry = alipayIndustry;
+ }
+
+ public String getJdindustry() {
+ return jdindustry;
+ }
+
+ public void setJdindustry(String jdindustry) {
+ this.jdindustry = jdindustry;
+ }
+
+ public String getRoyalpayindustry() {
+ return royalpayindustry;
+ }
+
+ public void setRoyalpayindustry(String royalpayindustry) {
+ this.royalpayindustry = royalpayindustry;
+ }
+
+ public String getBusiness_hours() {
+ return business_hours;
+ }
+
+ public void setBusiness_hours(String business_hours) {
+ this.business_hours = business_hours;
+ }
+
+ public String getMerchant_introduction() {
+ return merchant_introduction;
+ }
+
+ public void setMerchant_introduction(String merchant_introduction) {
+ this.merchant_introduction = merchant_introduction;
+ }
+
+ public String getMerchant_tag() {
+ return merchant_tag;
+ }
+
+ public void setMerchant_tag(String merchant_tag) {
+ this.merchant_tag = merchant_tag;
+ }
+
+ public String getMerchant_video_url() {
+ return merchant_video_url;
+ }
+
+ public void setMerchant_video_url(String merchant_video_url) {
+ this.merchant_video_url = merchant_video_url;
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/core/AliforexcelService.java b/src/main/java/au/com/royalpay/payment/manage/dev/core/AliforexcelService.java
new file mode 100644
index 000000000..8f5a10262
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/dev/core/AliforexcelService.java
@@ -0,0 +1,15 @@
+package au.com.royalpay.payment.manage.dev.core;
+
+import au.com.royalpay.payment.manage.analysis.beans.AnalysisBean;
+import au.com.royalpay.payment.manage.dev.bean.AliExcel;
+import au.com.royalpay.payment.manage.merchants.beans.PartnerQuery;
+import com.alibaba.fastjson.JSONObject;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public interface AliforexcelService {
+ JSONObject listClients(HttpServletResponse httpResponse,JSONObject manager, AliExcel query);
+
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/core/NewpartnerService.java b/src/main/java/au/com/royalpay/payment/manage/dev/core/NewpartnerService.java
new file mode 100644
index 000000000..9938ce304
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/dev/core/NewpartnerService.java
@@ -0,0 +1,18 @@
+package au.com.royalpay.payment.manage.dev.core;
+
+import au.com.royalpay.payment.manage.dev.bean.ClientTestRegisterInfo;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.transaction.annotation.Transactional;
+
+
+/**
+ * Created by yangluo on 2018-6-28.
+ */
+public interface NewpartnerService {
+ @Transactional
+ JSONObject registerClient(String clientMoniker, ClientTestRegisterInfo registery, JSONObject manager);
+
+
+
+}
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
new file mode 100644
index 000000000..172311d44
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/AliforexcelServiceImpl.java
@@ -0,0 +1,72 @@
+package au.com.royalpay.payment.manage.dev.core.impl;
+
+import au.com.royalpay.payment.manage.dev.bean.AliExcel;
+import au.com.royalpay.payment.manage.dev.core.AliforexcelService;
+import au.com.royalpay.payment.manage.mappers.system.ClientMapper;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+
+@Service
+public class AliforexcelServiceImpl implements AliforexcelService {
+ @Resource
+ private ClientMapper clientMapper;
+
+ @Override
+ public JSONObject listClients(HttpServletResponse httpResponse,JSONObject manager, AliExcel query) {
+ OutputStream ous = null;
+ try{
+ JSONObject params = query.toJsonParam();
+ List partners = clientMapper.passPartners(params);
+ httpResponse.setContentType("application/octet-stream;");
+ httpResponse.setCharacterEncoding("utf-8");
+ String fileName = "支付宝进件专用--";
+ String codedFileName = java.net.URLEncoder.encode(fileName, "UTF-8");
+ httpResponse.addHeader("Content-Disposition", "attachment; filename=" + codedFileName +query.getDatefrom() + "~" +query.getDateto() + ".xls");
+ ous = httpResponse.getOutputStream();
+ HSSFWorkbook wb = new HSSFWorkbook();
+ Sheet sheet = wb.createSheet("支付宝进件专用" );
+ sheet.createFreezePane(1, 2);
+ sheet.setDefaultColumnWidth((short) 25);
+ int rowNum = 0;
+ Row row = sheet.createRow(rowNum);
+ String[] title = {"Company name", "Store name", "Partner Code","Industry","Store address","Business hours","Contact information","Video link (optional)","Store description","Tags"};
+ for (int i = 0; i < title.length; i++) {
+ row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]);
+ }
+ for(JSONObject partner : partners){
+ row = sheet.createRow(++rowNum);
+ row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("company_name"));
+ row.createCell(1, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("short_name"));
+ row.createCell(2, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("client_moniker"));
+ row.createCell(3, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("alipayindustry"));
+ row.createCell(4, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("address")+","+partner.getString("suburb") + "," + partner.getString("state") + "," + partner.getString("postcode"));
+ row.createCell(5, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("business_hours"));
+ row.createCell(6, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("company_phone"));
+ row.createCell(7, Cell.CELL_TYPE_STRING).setCellValue(partner.getString(""));
+ row.createCell(8, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("merchant_introduction"));
+ row.createCell(9, Cell.CELL_TYPE_STRING).setCellValue(partner.getString(""));
+ }
+ wb.write(ous);
+ ous.flush();
+
+
+ }catch (IOException e){
+ } finally {
+ IOUtils.closeQuietly(ous);
+ }
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/NewpartnerServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/NewpartnerServiceImpl.java
new file mode 100644
index 000000000..e9d7dddce
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/dev/core/impl/NewpartnerServiceImpl.java
@@ -0,0 +1,110 @@
+package au.com.royalpay.payment.manage.dev.core.impl;
+
+import au.com.royalpay.payment.core.exceptions.InvalidShortIdException;
+import au.com.royalpay.payment.manage.dev.bean.ClientTestRegisterInfo;
+import au.com.royalpay.payment.manage.dev.core.NewpartnerService;
+import au.com.royalpay.payment.manage.mappers.system.ClientMapper;
+
+import au.com.royalpay.payment.manage.merchants.core.ClientConfigService;
+import au.com.royalpay.payment.tools.connections.attachment.core.AttachmentClient;
+import au.com.royalpay.payment.tools.exceptions.BadRequestException;
+import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
+import com.alibaba.fastjson.JSONObject;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+import static au.com.royalpay.payment.manage.permission.utils.OrgCheckUtils.checkOrgPermission;
+
+/**
+ * Created by yangluo on 2018-6-28.
+ */
+@Service
+public class NewpartnerServiceImpl implements NewpartnerService {
+ @Resource
+ private ClientMapper clientMapper;
+ @Resource
+ private ClientConfigService clientConfigService;
+ @Resource
+ private AttachmentClient attachmentClient;
+
+
+
+ @Cacheable(value = ":app_client_info_moniker:", key = "#clientMoniker")
+ public JSONObject getClientInfoByMoniker(String clientMoniker) {
+ return clientMapper.findClientByMoniker(clientMoniker);
+ }
+ @Override
+ @Transactional
+ public JSONObject registerClient(String clientMoniker, ClientTestRegisterInfo registery, JSONObject manager) {
+ JSONObject partner = registery.insertObject();
+ if (clientMoniker != null && !clientMoniker.equals("")) {
+ JSONObject superClient = getClientInfoByMoniker(clientMoniker);
+ if (superClient == null) {
+ throw new InvalidShortIdException();
+ } else {
+ checkOrgPermission(manager, superClient);
+ partner.put("parent_client_id", superClient.getIntValue("client_id"));
+ }
+ }
+ partner.put("create_time", new Date());
+ partner.put("ali_sub_merchant_id", registery.getClientMoniker());
+ partner.put("credential_code", RandomStringUtils.random(32, true, true));
+ partner.put("creator", manager.getString("manager_id"));
+ partner.put("contact_phone", "+611111111111111");
+ partner.put("industry", "327");
+ partner.put("contact_email", "a@qq.com");
+ partner.put("contact_person", "aa");
+ partner.put("company_name", "AA");
+ partner.put("short_name", "a");
+ partner.put("company_phone", "+611111111111111");
+
+ // if (manager.getIntValue("org_id") == 0) {
+ // throw new ForbiddenException("You were not belong to any organizations so that you cannot create new
+ // client");
+ // }
+ partner.put("org_id", 1);
+ partner.put("approve_result", 1);
+ partner.put("approve_time", new Date());
+ partner.put("open_status", 5);
+
+ if (StringUtils.isNotEmpty(registery.getLogoId())) {
+ partner.put("logo_url", attachmentClient.getFileUrl(registery.getLogoId()));
+ partner.put("logo_thumbnail", attachmentClient.getThumbnail(registery.getLogoId(), 600).getString("url"));
+ }
+ if (ManagerRole.OPERATOR.hasRole(manager.getIntValue("role"))) {
+ partner.put("approve_result", 1);
+ partner.put("approver", manager.getString("manager_id"));
+ partner.put("approve_time", new Date());
+ }
+ if (ManagerRole.BD_USER.hasRole(manager.getIntValue("role"))) {
+ partner.put("bd_user", manager.getString("manager_id"));
+ partner.put("bd_user_name", manager.getString("display_name"));
+ }
+ if (clientMapper.findClientByMoniker(registery.getClientMoniker()) != null) {
+ throw new BadRequestException("error.partner.valid.dumplicate_client_moniker");
+ }
+ try {
+ clientMapper.save(partner);
+ JSONObject clientConfig = new JSONObject();
+ clientConfig.put("client_id", partner.getIntValue("client_id"));
+ clientConfig.put("client_moniker", partner.getString("client_moniker"));
+ clientConfigService.save(clientConfig);
+ } catch (Exception e) {
+ throw new BadRequestException("error.partner.valid.dumplicate_client_moniker");
+ }
+
+
+
+
+
+ return partner;
+ }
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java b/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java
index 26b0aa88c..b47bdbfa4 100644
--- a/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java
@@ -10,8 +10,11 @@ import au.com.royalpay.payment.core.exceptions.InvalidShortIdException;
import au.com.royalpay.payment.core.exceptions.OrderNotExistsException;
import au.com.royalpay.payment.manage.analysis.core.PlatformClearService;
import au.com.royalpay.payment.manage.appclient.core.RetailAppService;
+import au.com.royalpay.payment.manage.dev.bean.AliExcel;
import au.com.royalpay.payment.manage.dev.bean.Message;
import au.com.royalpay.payment.manage.dev.bean.SendWechatMessage;
+import au.com.royalpay.payment.manage.dev.core.AliforexcelService;
+import au.com.royalpay.payment.manage.dev.core.NewpartnerService;
import au.com.royalpay.payment.manage.dev.core.WechatMessageService;
import au.com.royalpay.payment.manage.mappers.customers.CustomerEncourageMoneyUseLogMapper;
import au.com.royalpay.payment.manage.mappers.log.NotifyErrorLogMapper;
@@ -30,11 +33,9 @@ import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import au.com.royalpay.payment.tools.utils.PdfUtils;
import au.com.royalpay.payment.tools.utils.TimeZoneUtils;
import au.com.royalpay.payment.tools.utils.XmlFormatUtils;
-
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
-
import org.apache.commons.lang3.time.DateFormatUtils;
import org.dom4j.Element;
import org.slf4j.Logger;
@@ -44,14 +45,12 @@ import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.util.Assert;
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 org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
@@ -60,11 +59,6 @@ import java.net.URISyntaxException;
import java.util.Date;
import java.util.List;
-import javax.annotation.Resource;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-
/**
* Created by yixian on 2016-07-06.
*/
@@ -109,6 +103,10 @@ public class TestController implements ApplicationEventPublisherAware {
private ApplicationEventPublisher publisher;
@Resource
private WechatMessageService wechatMessageService;
+ @Resource
+ private NewpartnerService newpartnerService;
+ @Resource
+ private AliforexcelService aliforexcelService;
@ManagerMapping(value = "/{clientMoniker}/export/agreepdf", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.DIRECTOR, ManagerRole.OPERATOR})
public void exportAgreeFile(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, HttpServletResponse httpResponse) throws Exception {
@@ -380,4 +378,15 @@ public class TestController implements ApplicationEventPublisherAware {
wechatMessageService.sendMessageByOpenId(sendWechatMessage);
}
+/* @ManagerMapping(value = "/orgusertest", method = RequestMethod.POST, role = {ManagerRole.ADMIN,ManagerRole.DEVELOPER})
+ public JSONObject orgusertest(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @RequestBody @Valid ClientTestRegisterInfo registery,
+ Errors errors) {
+ HttpUtils.handleValidErrors(errors);
+ return newpartnerService.registerClient(null, registery, manager);
+ }*/
+
+ @ManagerMapping(value = "/aliforexcel", method = RequestMethod.GET, role = ManagerRole.DEVELOPER)
+ public void aliforexcel(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, HttpServletResponse httpResponse, AliExcel query) throws Exception {
+ aliforexcelService.listClients(httpResponse,manager,query);
+ }
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/beans/PartnerModuleInfo.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/beans/PartnerModuleInfo.java
new file mode 100644
index 000000000..ff0433fe4
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/beans/PartnerModuleInfo.java
@@ -0,0 +1,58 @@
+package au.com.royalpay.payment.manage.management.sysconfig.beans;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+import org.hibernate.validator.constraints.NotEmpty;
+
+/**
+ * Created by yangluo on 2018/07/05.
+ */
+public class PartnerModuleInfo {
+
+ @JSONField(name = "js_module")
+ private String jsModule;
+ @JSONField(name = "js_path")
+ private String jsPath;
+ private String remark;
+ @JSONField(name = "initialize")
+ private Boolean initialize;
+
+ public String getJsModule() {
+ return jsModule;
+ }
+
+ public void setJsModule(String jsModule) {
+ this.jsModule = jsModule;
+ }
+
+ public String getJsPath() {
+ return jsPath;
+ }
+
+ public void setJsPath(String jsPath) {
+ this.jsPath = jsPath;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public Boolean getInitialize() {
+ return initialize;
+ }
+
+ public void setInitialize(Boolean initialize) {
+ this.initialize = initialize;
+ }
+
+ public void initObject(JSONObject mod) {
+ mod.put("id", mod.getLong("id"));
+ mod.put("js_module", getJsModule());
+ mod.put("js_path", getJsPath());
+ mod.put("remark", getRemark());
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/beans/PermissionClientVO.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/beans/PermissionClientVO.java
new file mode 100644
index 000000000..fb2f0df69
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/beans/PermissionClientVO.java
@@ -0,0 +1,44 @@
+package au.com.royalpay.payment.manage.management.sysconfig.beans;
+
+/**
+ * @author kira
+ * @date 2018/7/4
+ */
+public class PermissionClientVO {
+ private Long id;
+ private String clientMoniker;
+ private int clientId;
+ private boolean isValid;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getClientMoniker() {
+ return clientMoniker;
+ }
+
+ public void setClientMoniker(String clientMoniker) {
+ this.clientMoniker = clientMoniker;
+ }
+
+ public int getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(int clientId) {
+ this.clientId = clientId;
+ }
+
+ public boolean getIsValid() {
+ return isValid;
+ }
+
+ public void setValid(boolean valid) {
+ isValid = valid;
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/PermissionManager.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/PermissionManager.java
index adb37fed3..c0841ea52 100644
--- a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/PermissionManager.java
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/PermissionManager.java
@@ -30,4 +30,5 @@ public interface PermissionManager {
void authorizeRole(ManagerRole role, List functions);
List listUserFunctions(int role);
+
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/PermissionPartnerManager.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/PermissionPartnerManager.java
new file mode 100644
index 000000000..2400f4759
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/PermissionPartnerManager.java
@@ -0,0 +1,37 @@
+package au.com.royalpay.payment.manage.management.sysconfig.core;
+
+import au.com.royalpay.payment.manage.management.sysconfig.beans.FuncInfo;
+import au.com.royalpay.payment.manage.management.sysconfig.beans.PartnerModuleInfo;
+import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.List;
+
+/**
+ * Created by yangluo on 2018/07/05.
+ */
+public interface PermissionPartnerManager {
+ void synchronizeFunctions();
+
+ JSONObject listFunctions();
+
+ List listModules();
+
+ void saveOrUpdateModule(String moduleName, PartnerModuleInfo module);
+
+ void checkAndDeleteModule(String moduleName);
+
+ void updateFuncInfo(String funcId, FuncInfo funcInfo);
+
+ void setFunctionModule(String funcId, String moduleName);
+
+ List listRoleFunctions(ManagerRole role);
+
+ void authorizeRole(ManagerRole role, List functions);
+
+ List listUserFunctions(int role);
+
+ JSONObject getPartnerFuncById(String funcId);
+
+ void permissionClientModuleSave(int clientId,String clientMoniker);
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/impls/PermissionManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/impls/PermissionManagerImpl.java
index 3dd4486a4..2b2710c5d 100644
--- a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/impls/PermissionManagerImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/impls/PermissionManagerImpl.java
@@ -5,17 +5,24 @@ import au.com.royalpay.payment.manage.management.sysconfig.beans.ModuleInfo;
import au.com.royalpay.payment.manage.management.sysconfig.core.PermissionManager;
import au.com.royalpay.payment.manage.mappers.system.PermissionFunctionMapper;
import au.com.royalpay.payment.manage.mappers.system.PermissionModuleMapper;
-import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import au.com.royalpay.payment.manage.permission.manager.scanner.PermissionNode;
import au.com.royalpay.payment.manage.permission.manager.scanner.PermissionReader;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
+import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
+
import com.alibaba.fastjson.JSONObject;
+
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
import javax.annotation.Resource;
-import java.util.*;
/**
* Created by yixian on 2017-02-28.
@@ -28,7 +35,6 @@ public class PermissionManagerImpl implements PermissionManager {
private PermissionModuleMapper permissionModuleMapper;
@Resource
private PermissionReader permissionReader;
-
@Override
public void synchronizeFunctions() {
List functions = permissionFunctionMapper.listAll();
@@ -166,4 +172,6 @@ public class PermissionManagerImpl implements PermissionManager {
return permissionFunctionMapper.listByRoleMask(role);
}
+
+
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/impls/PermissionPartnerManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/impls/PermissionPartnerManagerImpl.java
new file mode 100644
index 000000000..42c34d40b
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/core/impls/PermissionPartnerManagerImpl.java
@@ -0,0 +1,223 @@
+package au.com.royalpay.payment.manage.management.sysconfig.core.impls;
+
+import au.com.royalpay.payment.manage.management.sysconfig.beans.FuncInfo;
+import au.com.royalpay.payment.manage.management.sysconfig.beans.PartnerModuleInfo;
+import au.com.royalpay.payment.manage.management.sysconfig.core.PermissionPartnerManager;
+import au.com.royalpay.payment.manage.mappers.system.ClientMapper;
+import au.com.royalpay.payment.manage.mappers.system.PermissionClientModuleMapper;
+import au.com.royalpay.payment.manage.mappers.system.PermissionPartnerFunctionMapper;
+import au.com.royalpay.payment.manage.mappers.system.PermissionPartnerModuleMapper;
+import au.com.royalpay.payment.manage.permission.manager.scanner.PermissionNode;
+import au.com.royalpay.payment.manage.permission.manager.scanner.PermissionPartnerReader;
+import au.com.royalpay.payment.manage.system.core.PermissionClientModulesService;
+import au.com.royalpay.payment.tools.exceptions.BadRequestException;
+import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
+import au.com.royalpay.payment.tools.utils.id.IdUtil;
+
+import com.alibaba.fastjson.JSONObject;
+
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.annotation.Resource;
+
+/**
+ * Created by yangluo on 2018/07/05.
+ */
+@Service
+public class PermissionPartnerManagerImpl implements PermissionPartnerManager {
+ @Resource
+ private PermissionPartnerFunctionMapper permissionPartnerFunctionMapper;
+ @Resource
+ private PermissionPartnerModuleMapper permissionPartnerModuleMapper;
+ @Resource
+ private PermissionPartnerReader permissionPartnerReader;
+ @Resource
+ private PermissionClientModuleMapper permissionClientModuleMapper;
+ @Resource
+ private PermissionClientModulesService permissionClientModulesService;
+ @Resource
+ private ClientMapper clientMapper;
+
+ @Override
+ public void synchronizeFunctions() {
+ List functions = permissionPartnerFunctionMapper.listAll();
+ Map funcMapFromDB = new HashMap<>();
+ for (JSONObject func : functions) {
+ funcMapFromDB.put(func.getString("func_id"), func);
+ }
+
+ List nodes = permissionPartnerReader.listFunctions();
+ for (PermissionNode node : nodes) {
+ String funcId = node.getFuncId();
+ if (funcMapFromDB.containsKey(funcId)) {
+ funcMapFromDB.remove(funcId);
+ JSONObject func = node.initFuncObject();
+ func.remove("role");
+ permissionPartnerFunctionMapper.update(func);
+ } else {
+ JSONObject func = node.initFuncObject();
+ permissionPartnerFunctionMapper.save(func);
+ }
+ }
+
+ for (String funcId : funcMapFromDB.keySet()) {
+ permissionPartnerFunctionMapper.delete(funcId);
+ }
+ }
+
+ @Override
+ public JSONObject listFunctions() {
+ List funcs = permissionPartnerFunctionMapper.listAll();
+ Map> moduleMap = new TreeMap<>();
+ List noModule = new ArrayList<>();
+ for (JSONObject func : funcs) {
+ String module = func.getString("module");
+ if (module == null) {
+ noModule.add(func);
+ continue;
+ }
+ List funcsInModule = moduleMap.get(module);
+ if (funcsInModule == null) {
+ funcsInModule = new ArrayList<>();
+ moduleMap.put(module, funcsInModule);
+ }
+ funcsInModule.add(func);
+ }
+ JSONObject report = new JSONObject();
+ report.put("no_module", noModule);
+ List modules = new ArrayList<>();
+ for (String module : moduleMap.keySet()) {
+ JSONObject mod = new JSONObject();
+ mod.put("module_name", module);
+ List funcList = moduleMap.get(module);
+ mod.put("remark", funcList.get(0).getString("mod_remark"));
+ mod.put("module_id", funcList.get(0).getString("module_id"));
+ mod.put("js_module", funcList.get(0).getString("js_module"));
+ mod.put("js_path", funcList.get(0).getString("js_path"));
+ mod.put("funcs", funcList);
+ modules.add(mod);
+ }
+
+ report.put("modules", modules);
+ return report;
+ }
+
+ @Override
+ public void permissionClientModuleSave(int clientId, String clientMoniker) {
+ List moduleId = permissionPartnerModuleMapper.list();
+ for (JSONObject moduleClientAdd : moduleId) {
+ moduleClientAdd.put("client_id", clientId);
+ moduleClientAdd.put("client_moniker", clientMoniker);
+ moduleClientAdd.put("module_id", moduleClientAdd.getString("id"));
+ moduleClientAdd.put("is_valid", 1);
+ permissionClientModulesService.save(moduleClientAdd);
+ }
+
+ }
+
+ @Override
+ public List listModules() {
+ return permissionPartnerModuleMapper.list();
+ }
+
+ @Override
+ public void saveOrUpdateModule(String moduleName, PartnerModuleInfo module) {
+ JSONObject mod = permissionPartnerModuleMapper.find(moduleName);
+ if (mod == null) {
+ mod = new JSONObject();
+ mod.put("module_name", moduleName);
+ module.initObject(mod);
+ permissionPartnerModuleMapper.save(mod);
+ List IdandMoniker = clientMapper.listClientsIdAndMoniker();
+ JSONObject nModuleId = permissionPartnerModuleMapper.listModuleId(moduleName);
+ for (JSONObject clientMod : IdandMoniker) {
+ clientMod.put("client_id", clientMod.getString("client_id"));
+ clientMod.put("client_moniker", clientMod.getString("client_moniker"));
+ clientMod.put("module_id", nModuleId.getString("id"));
+ clientMod.put("is_valid", module.getInitialize());
+ clientMod.put("id", IdUtil.getId());
+ permissionClientModulesService.save(clientMod);
+ }
+ }
+
+ module.initObject(mod);
+ permissionPartnerModuleMapper.update(mod);
+
+ }
+
+ @Override
+ public void checkAndDeleteModule(String moduleName) {
+ List funcs = permissionPartnerFunctionMapper.listByModule(moduleName);
+ if (funcs.isEmpty()) {
+ permissionClientModuleMapper.delete(moduleName);
+ permissionPartnerModuleMapper.delete(moduleName);
+
+ } else {
+ throw new BadRequestException("Module have functions. Move them first.");
+ }
+ }
+
+ @Override
+ public void updateFuncInfo(String funcId, FuncInfo funcInfo) {
+ JSONObject update = new JSONObject();
+ update.put("func_id", funcId);
+ update.put("name", funcInfo.getName());
+ update.put("remark", funcInfo.getRemark());
+ permissionPartnerFunctionMapper.update(update);
+ }
+
+ @Override
+ @CacheEvict(value = ":login:managers:", allEntries = true)
+ public void setFunctionModule(String funcId, String moduleName) {
+ if (moduleName == null) {
+ throw new BadRequestException("module name not provided");
+ }
+ JSONObject mod = permissionPartnerModuleMapper.find(moduleName);
+ if (mod == null) {
+ throw new BadRequestException("Module:" + moduleName + " not exists!");
+ }
+ JSONObject nModuleId = permissionPartnerModuleMapper.listModuleId(moduleName);
+ JSONObject update = new JSONObject();
+ update.put("func_id", funcId);
+ update.put("module", moduleName);
+ update.put("module_id", nModuleId.getString("id"));
+ permissionPartnerFunctionMapper.update(update);
+ }
+
+ @Override
+ public List listRoleFunctions(ManagerRole role) {
+ List funcs = permissionPartnerFunctionMapper.listByRoleMask(role.getMask());
+ List funcIds = new ArrayList<>();
+ for (JSONObject func : funcs) {
+ funcIds.add(func.getString("func_id"));
+ }
+ return funcIds;
+ }
+
+ @Override
+ @Transactional
+ @CacheEvict(value = ":login:managers:", allEntries = true)
+ public void authorizeRole(ManagerRole role, List functions) {
+ permissionPartnerFunctionMapper.clearRolePermission(role.getInverseMask());
+ permissionPartnerFunctionMapper.authorizeRole(role.getMask(), functions);
+ }
+
+ @Override
+ public List listUserFunctions(int role) {
+ return permissionPartnerFunctionMapper.listByRoleMask(role);
+ }
+
+ @Override
+ public JSONObject getPartnerFuncById(String funcId) {
+ return permissionPartnerFunctionMapper.find(funcId);
+ }
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionClientController.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionClientController.java
new file mode 100644
index 000000000..dd311283e
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionClientController.java
@@ -0,0 +1,41 @@
+package au.com.royalpay.payment.manage.management.sysconfig.web;
+
+import au.com.royalpay.payment.manage.management.sysconfig.beans.PermissionClientVO;
+import au.com.royalpay.payment.manage.system.core.PermissionClientModulesService;
+import au.com.royalpay.payment.tools.CommonConsts;
+
+import com.alibaba.fastjson.JSONObject;
+
+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;
+
+/**
+ * Created by yixian on 2017-02-28.
+ */
+@RestController
+@RequestMapping( value = "/sys/permission")
+public class SysPermissionClientController {
+ @Resource
+ private PermissionClientModulesService permissionClientModulesService;
+
+
+ @RequestMapping(value = "/list", method = RequestMethod.GET)
+ public List list(@RequestParam String client_moniker) {
+ return permissionClientModulesService.listByClientMoniker(client_moniker);
+ }
+
+ @RequestMapping(value = "/{id}", method = RequestMethod.POST)
+ public void modify(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject loginManager, @PathVariable Long id, @RequestBody PermissionClientVO permissionClientVO) {
+ permissionClientModulesService.switchValid(id,permissionClientVO.getIsValid(),loginManager);
+ }
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionConfigController.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionConfigController.java
index 3bd1815b3..f1ada6533 100644
--- a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionConfigController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionConfigController.java
@@ -4,14 +4,21 @@ import au.com.royalpay.payment.manage.management.sysconfig.beans.FuncInfo;
import au.com.royalpay.payment.manage.management.sysconfig.beans.ModuleInfo;
import au.com.royalpay.payment.manage.management.sysconfig.core.PermissionManager;
import au.com.royalpay.payment.manage.permission.manager.ManagerMapping;
-import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
+import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
+
import com.alibaba.fastjson.JSONObject;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
+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.RestController;
+
import java.util.List;
+import javax.annotation.Resource;
+
/**
* Created by yixian on 2017-02-28.
*/
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionPartnerConfigController.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionPartnerConfigController.java
new file mode 100644
index 000000000..d24d76633
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysPermissionPartnerConfigController.java
@@ -0,0 +1,96 @@
+package au.com.royalpay.payment.manage.management.sysconfig.web;
+
+import au.com.royalpay.payment.manage.management.sysconfig.beans.FuncInfo;
+import au.com.royalpay.payment.manage.management.sysconfig.beans.PartnerModuleInfo;
+import au.com.royalpay.payment.manage.management.sysconfig.core.PermissionPartnerManager;
+import au.com.royalpay.payment.tools.exceptions.BadRequestException;
+import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
+
+import com.alibaba.fastjson.JSONObject;
+
+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.RestController;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+/**
+ * Created by yangluo on 2018/07/05.
+ */
+@RestController
+@RequestMapping( value = "/sys/permissionPartner")
+public class SysPermissionPartnerConfigController {
+ @Resource
+ private PermissionPartnerManager permissionPartnerManager;
+
+ @RequestMapping(value = "/synchronize", method = RequestMethod.POST)
+ public void synchronizeFunctions() {
+ permissionPartnerManager.synchronizeFunctions();
+ }
+
+ @RequestMapping(value = "/functions", method = RequestMethod.GET)
+ public JSONObject listFunctions() {
+ return permissionPartnerManager.listFunctions();
+ }
+
+ @RequestMapping(value = "/functions/{funcId}.end", method = RequestMethod.PUT)
+ public void updateFunctionInfo(@PathVariable String funcId, @RequestBody FuncInfo funcInfo) {
+ permissionPartnerManager.updateFuncInfo(funcId, funcInfo);
+ }
+
+ @RequestMapping(value = "/functions/{funcId}/modules", method = RequestMethod.PUT)
+ public void setFuncModule(@PathVariable String funcId, @RequestBody JSONObject module) {
+ permissionPartnerManager.setFunctionModule(funcId, module.getString("module_name"));
+ }
+
+ @RequestMapping(value = "/modules", method = RequestMethod.GET)
+ public List listModuless() {
+ return permissionPartnerManager.listModules();
+ }
+
+ @RequestMapping(value = "/modules/{moduleName}.end", method = RequestMethod.PUT)
+ public void updateModulee(@PathVariable String moduleName, @RequestBody PartnerModuleInfo module) {
+ permissionPartnerManager.saveOrUpdateModule(moduleName, module);
+ }
+
+ @RequestMapping(value = "/modules/{moduleName}.end", method = RequestMethod.DELETE)
+ public void deleteModulee(@PathVariable String moduleName) {
+ permissionPartnerManager.checkAndDeleteModule(moduleName);
+ }
+
+ @RequestMapping(value = "/roles/{roleMask}/functions", method = RequestMethod.GET)
+ public List listRoleAuthorizedFunctions(@PathVariable String roleMask) {
+ try {
+ int mask = Integer.parseInt(roleMask, 2);
+ for (ManagerRole role : ManagerRole.values()) {
+ if (mask == role.getMask()) {
+ return permissionPartnerManager.listRoleFunctions(role);
+ }
+ }
+
+ } catch (NumberFormatException ignored) {
+ }
+ throw new BadRequestException("Invalid role mask:" + roleMask);
+ }
+
+ @RequestMapping(value = "/roles/{roleMask}/functions",method = RequestMethod.PUT)
+ public void authorizeRole(@PathVariable String roleMask, @RequestBody List functions){
+ try {
+ int mask = Integer.parseInt(roleMask, 2);
+ for (ManagerRole role : ManagerRole.values()) {
+ if (mask == role.getMask()) {
+ permissionPartnerManager.authorizeRole(role,functions);
+ return;
+ }
+ }
+
+ } catch (NumberFormatException ignored) {
+ }
+ throw new BadRequestException("Invalid role mask:" + roleMask);
+ }
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/act/ActChairtyMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/act/ActChairtyMapper.java
new file mode 100644
index 000000000..de5793c77
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/act/ActChairtyMapper.java
@@ -0,0 +1,35 @@
+package au.com.royalpay.payment.manage.mappers.act;
+
+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;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by yangluo on 2018/7/9.
+ */
+@AutoMapper(tablename = "act_charity", pkName = "client_moniker")
+public interface ActChairtyMapper {
+
+ @AutoSql(type = SqlType.SELECT)
+ JSONObject findChairtyClient(@Param("client_moniker") String clientMoniker);
+
+ @AutoSql(type = SqlType.INSERT)
+ void save(JSONObject chairtyClient);
+
+ PageList chairtyClientNum(PageBounds pageBounds);
+
+ List getChairtyWeekAnalysis(@Param("begin") Date begin, @Param("end") Date end);
+
+ PageList getChairtyWeekRaking(@Param("begin") Date begin, @Param("end") Date end,PageBounds pageBounds);
+
+ List chairtyClientNum();
+
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyAccessLogMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyAccessLogMapper.java
index 04ab8b807..469a62172 100644
--- a/src/main/java/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyAccessLogMapper.java
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyAccessLogMapper.java
@@ -31,4 +31,7 @@ public interface CustomerEncourageMoneyAccessLogMapper {
PageList list(JSONObject params, PageBounds pageBounds);
List analysisByDate(@Param("event_id") String eventId);
+
+ JSONObject sumMoney(@Param("memberId") String memberId,@Param("eventId")String eventId);
+
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyUseLogMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyUseLogMapper.java
index f9ca6116e..a82dc96c7 100644
--- a/src/main/java/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyUseLogMapper.java
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyUseLogMapper.java
@@ -34,4 +34,7 @@ public interface CustomerEncourageMoneyUseLogMapper {
List analysisByDate(@Param("event_id") String eventId);
List listUnsettled();
+
+ JSONObject sumMoney(@Param("memberId") String memberId,@Param("eventId")String eventId);
+
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialBDPrizeLogMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialBDPrizeLogMapper.java
index adb0bc5a1..cbd0e1005 100644
--- a/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialBDPrizeLogMapper.java
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialBDPrizeLogMapper.java
@@ -19,7 +19,7 @@ public interface FinancialBDPrizeLogMapper {
@AutoSql(type = SqlType.INSERT)
void save(JSONObject log);
- @Select("SELECT fbpl.prize_log_id,fbpl.record_id,fbpl.manager_id,fbpl.bd_name,fbpl.bd_level,SUM(fbpl.total_amount) total_amount, " +
+ @Select("SELECT fbpl.prize_log_id,fbpl.record_id,fbpl.manager_id,fbpl.bd_name,fbpl.kpi_amount,fbpl.bd_level,SUM(fbpl.total_amount) total_amount, " +
"SUM(fbpl.total_prize) total_prize,SUM(fbpl.total_donation) total_donation, SUM(fbpl.send_prize) send_prize, " +
"SUM(fbpl.hold_prize) hold_prize,fbpl.last_punish,fbpl.prize_type,sysm.is_valid FROM financial_bd_prize_log fbpl, " +
"sys_managers sysm " +
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java
index 5e153fda9..be48b0efc 100644
--- a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java
@@ -94,6 +94,8 @@ public interface TransactionMapper {
List listTransactionsForBDPrize(@Param("year") int year, @Param("month") int month, @Param("channel") String channel);
BigDecimal TotalAmountForBDLeaderPrize(@Param("year") int year, @Param("month") int month, @Param("bd_group") String bd_group);
+ BigDecimal TotalAmountForSydneyGMPrize(@Param("year") int year, @Param("month") int month);
+
List listTransactionsForCityPartnerCommission(@Param("year") int year, @Param("month") int month);
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java
index 3e7772d95..0633dc328 100644
--- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java
@@ -34,6 +34,11 @@ public interface ClientMapper {
PageList listPartners(JSONObject params, PageBounds pagination);
+ List listClientsIdAndMoniker();
+
+
+ List passPartners(JSONObject params);
+
List listClients();
List listPartnerSelection(JSONObject params, PageBounds pagination);
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/PermissionClientModuleMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/PermissionClientModuleMapper.java
new file mode 100644
index 000000000..8f1973e7a
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/PermissionClientModuleMapper.java
@@ -0,0 +1,26 @@
+package au.com.royalpay.payment.manage.mappers.system;
+
+import cn.yixblog.support.mybatis.autosql.annotations.AdvanceSelect;
+import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
+import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
+import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonAnyFormatVisitor;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+ * Created by yixian on 2017-02-28.
+ */
+@AutoMapper(tablename = "sys_permission_partner_modules_clients", pkName = "id")
+public interface PermissionClientModuleMapper {
+ @AutoSql(type = SqlType.INSERT)
+ void save(JSONObject clientmodules);
+
+ void delete(@Param("module_name") String moduleName);
+
+
+}
+
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/PermissionPartnerFunctionMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/PermissionPartnerFunctionMapper.java
new file mode 100644
index 000000000..962f462fa
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/PermissionPartnerFunctionMapper.java
@@ -0,0 +1,41 @@
+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 2017-02-28.
+ */
+@AutoMapper(tablename = "sys_permission_partner_functions", pkName = "func_id")
+public interface PermissionPartnerFunctionMapper {
+
+ @AutoSql(type = SqlType.INSERT)
+ void save(JSONObject func);
+
+ @AutoSql(type = SqlType.UPDATE)
+ void update(JSONObject func);
+
+ List listByRoleMask(@Param("mask") int mask);
+
+ List listAll();
+
+ @AutoSql(type = SqlType.SELECT)
+ List listByModule(@Param("module") String moduleName);
+
+ @AutoSql(type = SqlType.DELETE)
+ void delete(@Param("func_id") String funcId);
+
+ void clearRolePermission(@Param("mask") int mask);
+
+ void authorizeRole(@Param("mask") int mask, @Param("func_ids") List functions);
+
+ @AutoSql(type = SqlType.SELECT)
+ JSONObject find(@Param("func_id") String funcId);
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/PermissionPartnerModuleMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/PermissionPartnerModuleMapper.java
new file mode 100644
index 000000000..c3080f90c
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/PermissionPartnerModuleMapper.java
@@ -0,0 +1,36 @@
+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 2017-02-28.
+ */
+@AutoMapper(tablename = "sys_permission_partner_modules", pkName = "id",pkAutoIncrement = true)
+public interface PermissionPartnerModuleMapper {
+ @AutoSql(type = SqlType.INSERT)
+ void save(JSONObject module);
+
+ @AutoSql(type = SqlType.UPDATE)
+ void update(JSONObject module);
+
+ @AutoSql(type = SqlType.DELETE)
+ void delete(@Param("module_name") String moduleName);
+
+ @AutoSql(type = SqlType.SELECT)
+ List list();
+
+ @AutoSql(type = SqlType.SELECT)
+ JSONObject find(@Param("module_name") String moduleName);
+
+ @AutoSql(type = SqlType.SELECT)
+ JSONObject listModuleId(@Param("module_name") String moduleName);
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/SysPermissionClientModulesMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/SysPermissionClientModulesMapper.java
new file mode 100644
index 000000000..c21fef66c
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/SysPermissionClientModulesMapper.java
@@ -0,0 +1,42 @@
+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.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;
+
+/**
+ * Created by yixian on 2017-02-28.
+ */
+@AutoMapper(tablename = "sys_permission_partner_modules_clients", pkName = "id")
+public interface SysPermissionClientModulesMapper {
+ @AutoSql(type = SqlType.INSERT)
+ void save(JSONObject module);
+
+ @AutoSql(type = SqlType.UPDATE)
+ void update(JSONObject module);
+
+ @AutoSql(type = SqlType.DELETE)
+ void delete(@Param("id") Long id);
+
+ @AutoSql(type = SqlType.SELECT)
+ List listByClientId(@Param("client_id") int client_id);
+
+ @AutoSql(type = SqlType.SELECT)
+ JSONObject find(@Param("id") Long id);
+
+ @AutoSql(type = SqlType.SELECT)
+ List listByClientMoniker(@Param("client_moniker")String client_moniker);
+
+ @AutoSql(type = SqlType.SELECT)
+ @AdvanceSelect(addonWhereClause = "is_valid = 1")
+ List listValidByClientId(@Param("client_id") int client_id);
+}
+
+
diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientApplyImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientApplyImpl.java
index 94a7e4227..e67086828 100644
--- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientApplyImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientApplyImpl.java
@@ -1,6 +1,7 @@
package au.com.royalpay.payment.manage.merchants.core.impls;
+import au.com.royalpay.payment.manage.management.sysconfig.core.impls.PermissionPartnerManagerImpl;
import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientApplyMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientBDMapper;
@@ -65,6 +66,8 @@ public class ClientApplyImpl implements ClientApply, ApplicationEventPublisherAw
private ApplicationEventPublisher publisher;
@Resource
private ClientConfigService clientConfigService;
+ @Resource
+ private PermissionPartnerManagerImpl permissionPartnerManagerImpl;
@Override
@Transactional
@@ -220,6 +223,8 @@ public class ClientApplyImpl implements ClientApply, ApplicationEventPublisherAw
clientConfig.put("client_id",partner.getIntValue("client_id"));
clientConfig.put("client_moniker",info.getClientMoniker());
clientConfigService.save(clientConfig);
+ permissionPartnerManagerImpl.permissionClientModuleSave(partner.getIntValue("client_id"),info.getClientMoniker());
+
JSONObject client_bd = new JSONObject();
client_bd.put("client_id", partner.getIntValue("client_id"));
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 9a812f118..de4e4b37a 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
@@ -13,6 +13,7 @@ import au.com.royalpay.payment.manage.analysis.mappers.TransactionAnalysisMapper
import au.com.royalpay.payment.manage.appclient.beans.AppClientBean;
import au.com.royalpay.payment.manage.application.core.SimpleClientApplyService;
import au.com.royalpay.payment.manage.device.core.DeviceManager;
+import au.com.royalpay.payment.manage.management.sysconfig.core.impls.PermissionPartnerManagerImpl;
import au.com.royalpay.payment.manage.mappers.financial.FinancialBDConfigMapper;
import au.com.royalpay.payment.manage.mappers.log.*;
import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper;
@@ -264,6 +265,12 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
private ClearingLogMapper clearingLogMapper;
@Resource
private ClientConfigMapper clientConfigMapper;
+ @Resource
+ private PermissionPartnerModuleMapper permissionPartnerModuleMapper;
+ @Resource
+ private PermissionClientModuleMapper permissionClientModuleMapper;
+ @Resource
+ private PermissionPartnerManagerImpl permissionPartnerManagerImpl;
@@ -557,11 +564,13 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
throw new BadRequestException("error.partner.valid.dumplicate_client_moniker");
}
try {
+
clientMapper.save(partner);
JSONObject clientConfig = new JSONObject();
clientConfig.put("client_id", partner.getIntValue("client_id"));
clientConfig.put("client_moniker", partner.getString("client_moniker"));
clientConfigService.save(clientConfig);
+ permissionPartnerManagerImpl.permissionClientModuleSave(partner.getIntValue("client_id"),partner.getString("client_moniker"));
} catch (Exception e) {
throw new BadRequestException("error.partner.valid.dumplicate_client_moniker");
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java
index f8f005c37..20504fb83 100644
--- a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java
@@ -260,7 +260,7 @@ public class PartnerViewController {
@PartnerMapping(value = "/trade_logs/{orderId}", method = RequestMethod.PUT)
@ResponseBody
- public void getOrderDetail(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account, @PathVariable String orderId, @RequestBody JSONObject order) throws Exception {
+ public void updateOrderDetail(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account, @PathVariable String orderId, @RequestBody JSONObject order) throws Exception {
order.put("order_id", orderId);
tradeLogService.updateOrderDetail(account.getIntValue("client_id"), order);
}
@@ -366,7 +366,7 @@ public class PartnerViewController {
@PartnerMapping(value = "/sign_events/{signId}", method = RequestMethod.PUT, roles = {PartnerRole.ADMIN, PartnerRole.MANAGER})
@ResponseBody
- public void listUnhandledSignEvents(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account, @PathVariable String signId) {
+ public void listUnhandledSignEventsBySignId(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account, @PathVariable String signId) {
clientSignEventSupport.sign(account, signId);
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticePartnerImpl.java b/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticePartnerImpl.java
index 27c13e86e..af0773143 100644
--- a/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticePartnerImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticePartnerImpl.java
@@ -1,21 +1,21 @@
package au.com.royalpay.payment.manage.notice.core.impls;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-
-import org.springframework.stereotype.Service;
+import au.com.royalpay.payment.manage.mappers.notice.NoticePartnerMapper;
+import au.com.royalpay.payment.manage.notice.core.NoticePartner;
+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 com.github.miemiedev.mybatis.paginator.domain.PageList;
-import au.com.royalpay.payment.manage.mappers.notice.NoticePartnerMapper;
-import au.com.royalpay.payment.manage.notice.core.NoticePartner;
-import au.com.royalpay.payment.tools.utils.PageListUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
/**
* Created by yishuqian on 29/09/2016.
@@ -36,6 +36,7 @@ public class NoticePartnerImpl implements NoticePartner {
JSONObject unReadParams = new JSONObject();
unReadParams.put("client_id",partner.getIntValue("client_id"));
unReadParams.put("status",0);
+ unReadParams.put("is_to_app",1);
int counts = noticePartnerMapper.countNoticePartner(unReadParams);
PageList partnerNotices =noticePartnerMapper.listNoticesByClientId(params,
new PageBounds(params.getIntValue("page"), params.getIntValue("limit"), Order.formString("status.asc,send_time.desc")));
diff --git a/src/main/java/au/com/royalpay/payment/manage/permission/manager/ManagerUserInterceptor.java b/src/main/java/au/com/royalpay/payment/manage/permission/manager/ManagerUserInterceptor.java
index e4c73c98e..124ffe67c 100644
--- a/src/main/java/au/com/royalpay/payment/manage/permission/manager/ManagerUserInterceptor.java
+++ b/src/main/java/au/com/royalpay/payment/manage/permission/manager/ManagerUserInterceptor.java
@@ -1,12 +1,13 @@
package au.com.royalpay.payment.manage.permission.manager;
+import au.com.royalpay.payment.manage.management.sysconfig.core.PermissionPartnerManager;
import au.com.royalpay.payment.manage.management.sysconfig.core.PermissionManager;
import au.com.royalpay.payment.manage.signin.core.SignInStatusManager;
import au.com.royalpay.payment.tools.CommonConsts;
import au.com.royalpay.payment.tools.exceptions.ForbiddenException;
import au.com.royalpay.payment.tools.http.HttpUtils;
-
import au.com.royalpay.payment.tools.permission.enums.PartnerRole;
+
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -33,6 +34,8 @@ public class ManagerUserInterceptor extends HandlerInterceptorAdapter implements
private SignInStatusManager signInStatusManager;
@Resource
private PermissionManager permissionManager;
+ @Resource
+ private PermissionPartnerManager permissionPartnerManager;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
@@ -68,7 +71,8 @@ public class ManagerUserInterceptor extends HandlerInterceptorAdapter implements
ex = e;
}
if (ex != null) {
- checkPartnerPermission(request, partner, partnerStatusKey, managerStatusKey);
+ String funcId = clazz.getSimpleName() + "." + method.getName();
+ checkPartnerPermission(request, partner, partnerStatusKey, managerStatusKey,funcId);
}
return true;
}
@@ -77,11 +81,12 @@ public class ManagerUserInterceptor extends HandlerInterceptorAdapter implements
checkManagerPermisson(request, funcId, managerStatusKey);
return true;
}
- checkPartnerPermission(request, partner, partnerStatusKey, managerStatusKey);
+ String funcId = clazz.getSimpleName() + "." + method.getName();
+ checkPartnerPermission(request, partner, partnerStatusKey, managerStatusKey,funcId);
return true;
}
- private void checkPartnerPermission(HttpServletRequest request, RequirePartner partner, String partnerStatusKey, String managerStatusKey) {
+ private void checkPartnerPermission(HttpServletRequest request, RequirePartner partner, String partnerStatusKey, String managerStatusKey,String funcId) {
if (StringUtils.isEmpty(partnerStatusKey) && StringUtils.isEmpty(managerStatusKey)) {
throw new ForbiddenException("error.permission.not_login");
}
@@ -98,6 +103,14 @@ public class ManagerUserInterceptor extends HandlerInterceptorAdapter implements
throw new ForbiddenException("error.permission.nopermission");
}
}
+
+// JSONObject func = permissionPartnerManager.getPartnerFuncById(funcId);
+// if(func!=null && StringUtils.isNotEmpty(func.getString("module_id"))){
+// JSONArray arr = loginUser.getJSONArray("available_module_ids");
+// if (arr == null || !arr.contains(func.getString("module_id"))) {
+// throw new ForbiddenException("error.permission.nopermission");
+// }
+// }
request.setAttribute(CommonConsts.PARTNER_STATUS, loginUser);
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PartnerPermissionScanner.java b/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PartnerPermissionScanner.java
new file mode 100644
index 000000000..263d0ba74
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PartnerPermissionScanner.java
@@ -0,0 +1,104 @@
+package au.com.royalpay.payment.manage.permission.manager.scanner;
+
+import au.com.royalpay.payment.manage.permission.manager.RequirePartner;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.core.annotation.AnnotatedElementUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by yixian on 2017-02-28.
+ */
+@Component
+public class PartnerPermissionScanner implements BeanPostProcessor, PermissionPartnerReader {
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
+ private Map permissionNodes = new HashMap<>();
+
+ @Override
+ public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+ Class> clazz = bean.getClass();
+ if (AnnotatedElementUtils.isAnnotated(clazz, Controller.class)) {
+
+ Method[] methods = clazz.getDeclaredMethods();
+ RequestMapping clazzRequestMapping = AnnotatedElementUtils.findMergedAnnotation(clazz, RequestMapping.class);
+ RequirePartner clazzPermission = AnnotatedElementUtils.findMergedAnnotation(clazz, RequirePartner.class);
+ for (Method method : methods) {
+ if (AnnotatedElementUtils.isAnnotated(method, RequestMapping.class)) {
+ RequestMapping methodMapping = AnnotatedElementUtils.findMergedAnnotation(method, RequestMapping.class);
+ RequirePartner methodPermission = AnnotatedElementUtils.findMergedAnnotation(method, RequirePartner.class);
+
+ if (clazzPermission != null || methodPermission != null) {
+ registerPermissionMapping(clazz, method, clazzRequestMapping, clazzPermission, methodMapping, methodPermission);
+ }
+ }
+ }
+ }
+ return bean;
+ }
+
+ private void registerPermissionMapping(Class> controller, Method method, RequestMapping clazzRequestMapping, RequirePartner clazzPermission, RequestMapping methodMapping, RequirePartner methodPermission) {
+
+ //get request uri and methods
+ PermissionNode node = new PermissionNode(controller.getSimpleName(), method.getName());
+ getRequestInfo(node, clazzRequestMapping, methodMapping);
+ node.setPartnerPermissions(clazzPermission, methodPermission);
+ logger.debug("register permission:" + node.getFuncName() + ":" + node.getRequestId());
+ if (permissionNodes.containsKey(node.getFuncId())) {
+ throw new RuntimeException("Duplicated permission function ID:" + controller.getName() + "." + method.getName());
+ }
+ permissionNodes.put(node.getFuncId(), node);
+
+ }
+
+ private void getRequestInfo(PermissionNode node, RequestMapping clazzRequestMapping, RequestMapping methodMapping) {
+ String uri = "";
+ RequestMethod[] methods = {};
+ if (clazzRequestMapping != null) {
+ if (clazzRequestMapping.value().length > 0) {
+ uri += clazzRequestMapping.value()[0];
+ }
+ methods = clazzRequestMapping.method();
+ }
+ if (!uri.startsWith("/")) {
+ uri = "/" + uri;
+ }
+ if (uri.endsWith("/")) {
+ uri = uri.substring(0, uri.length() - 1);
+ }
+ if (methodMapping.value().length > 0) {
+ String val = methodMapping.value()[0];
+ if (val.startsWith("/")) {
+ val = val.substring(1);
+ }
+ uri += "/" + val;
+ }
+ if (methodMapping.method().length > 0) {
+ methods = methodMapping.method();
+ }
+ node.setUri(uri);
+ node.setMethods(methods);
+ }
+
+ @Override
+ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+ return bean;
+ }
+
+ @Override
+ public List listFunctions() {
+ return new ArrayList<>(permissionNodes.values());
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PermissionNode.java b/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PermissionNode.java
index ffccc2985..26bab1124 100644
--- a/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PermissionNode.java
+++ b/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PermissionNode.java
@@ -1,7 +1,10 @@
package au.com.royalpay.payment.manage.permission.manager.scanner;
+import au.com.royalpay.payment.manage.permission.manager.RequirePartner;
import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import au.com.royalpay.payment.manage.permission.manager.RequireManager;
+import au.com.royalpay.payment.tools.permission.enums.PartnerRole;
+
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -92,4 +95,25 @@ public class PermissionNode {
this.roleMask = mask;
}
+
+ public void setPartnerPermissions(RequirePartner clazzPermission, RequirePartner methodPermission) {
+ PartnerRole[] roles;
+ if (methodPermission != null) {
+ roles = methodPermission.roles();
+ } else {
+ if (clazzPermission == null) {
+ throw new RuntimeException("Permission not set:" + getRequestId());
+ }
+ roles = clazzPermission.roles();
+ }
+ if (roles.length == 0) {
+ roles = PartnerRole.values();
+ }
+ int mask = 0;
+ for (PartnerRole role : roles) {
+ mask |= role.getCode();
+ }
+ this.roleMask = mask;
+
+ }
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PermissionPartnerReader.java b/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PermissionPartnerReader.java
new file mode 100644
index 000000000..152a2235c
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/permission/manager/scanner/PermissionPartnerReader.java
@@ -0,0 +1,10 @@
+package au.com.royalpay.payment.manage.permission.manager.scanner;
+
+import java.util.List;
+
+/**
+ * Created by yixian on 2017-02-28.
+ */
+public interface PermissionPartnerReader {
+ List listFunctions();
+}
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 74a7f77da..18eba9c12 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
@@ -16,6 +16,7 @@ import au.com.royalpay.payment.manage.signin.core.SignInAccountService;
import au.com.royalpay.payment.manage.signin.core.SignInStatusManager;
import au.com.royalpay.payment.manage.signin.events.ClientLoginEvent;
import au.com.royalpay.payment.manage.signin.events.ManagerLoginEvent;
+import au.com.royalpay.payment.manage.system.core.PermissionClientModulesService;
import au.com.royalpay.payment.tools.env.PlatformEnvironment;
import au.com.royalpay.payment.tools.env.RequestEnvironment;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
@@ -72,6 +73,8 @@ public class SignInAccountServiceImpl implements SignInAccountService, Applicati
private DeviceManager deviceManager;
@Resource
private ClientConfigService clientConfigService;
+ @Resource
+ private PermissionClientModulesService permissionClientModulesService;
private ApplicationEventPublisher publisher;
private static final List tags = new ArrayList<>();
@@ -142,6 +145,12 @@ public class SignInAccountServiceImpl implements SignInAccountService, Applicati
}
}
+ List funcs = permissionClientModulesService.listValidByClientId(account.getIntValue("client_id"));
+ List funcIds = new ArrayList<>();
+ for (JSONObject func : funcs) {
+ funcIds.add(func.getString("module_id"));
+ }
+ account.put("available_module_ids", funcIds);
return account;
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/system/core/PermissionClientModulesService.java b/src/main/java/au/com/royalpay/payment/manage/system/core/PermissionClientModulesService.java
new file mode 100644
index 000000000..7e9d97220
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/system/core/PermissionClientModulesService.java
@@ -0,0 +1,22 @@
+package au.com.royalpay.payment.manage.system.core;
+
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.List;
+
+/**
+ * @author kira
+ * @date 2018/7/4
+ */
+public interface PermissionClientModulesService {
+
+ void save(JSONObject record);
+
+ List listValidByClientId(int clientId);
+
+ List listByClientMoniker(String clientMoniker);
+
+ void switchValid(Long id,boolean isValid,JSONObject account);
+
+}
\ No newline at end of file
diff --git a/src/main/java/au/com/royalpay/payment/manage/system/core/SystemPackageCacheSupport.java b/src/main/java/au/com/royalpay/payment/manage/system/core/SystemPackageCacheSupport.java
new file mode 100644
index 000000000..ec0621e8b
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/system/core/SystemPackageCacheSupport.java
@@ -0,0 +1,21 @@
+package au.com.royalpay.payment.manage.system.core;
+
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author kira
+ * @date 2018/7/5
+ */
+@Service
+public class SystemPackageCacheSupport {
+
+ @CacheEvict(value = ":system:client_permission:", key = "#client_moniker")
+ public void clearClientPermission(String client_moniker){
+
+ }
+ @CacheEvict(value = ":system:client_permission:", key = "#client_id+''")
+ public void clearClientPermission(int client_id){
+
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/system/core/beans/PermissionClientModuleLog.java b/src/main/java/au/com/royalpay/payment/manage/system/core/beans/PermissionClientModuleLog.java
new file mode 100644
index 000000000..7ad83a373
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/system/core/beans/PermissionClientModuleLog.java
@@ -0,0 +1,98 @@
+package au.com.royalpay.payment.manage.system.core.beans;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @author kira
+ * @date 2018/7/4
+ */
+@Document(collection = "permission_client_module_log")
+public class PermissionClientModuleLog {
+
+ private long id;
+ private int clientId;
+ private String clientMoniker;
+ private String business;
+ private String userId;
+ private String userName;
+ private String originData;
+ private String newData;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+10")
+ private Date createTime;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public int getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(int clientId) {
+ this.clientId = clientId;
+ }
+
+ public String getClientMoniker() {
+ return clientMoniker;
+ }
+
+ public void setClientMoniker(String clientMoniker) {
+ this.clientMoniker = clientMoniker;
+ }
+
+ public String getBusiness() {
+ return business;
+ }
+
+ public void setBusiness(String business) {
+ this.business = business;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getOriginData() {
+ return originData;
+ }
+
+ public void setOriginData(String originData) {
+ this.originData = originData;
+ }
+
+ public String getNewData() {
+ return newData;
+ }
+
+ public void setNewData(String newData) {
+ this.newData = newData;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/system/core/impl/PermissionClientModulesServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/system/core/impl/PermissionClientModulesServiceImpl.java
new file mode 100644
index 000000000..f94e4351b
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/system/core/impl/PermissionClientModulesServiceImpl.java
@@ -0,0 +1,90 @@
+package au.com.royalpay.payment.manage.system.core.impl;
+
+import au.com.royalpay.payment.manage.mappers.system.SysPermissionClientModulesMapper;
+import au.com.royalpay.payment.manage.system.core.PermissionClientModulesService;
+import au.com.royalpay.payment.manage.system.core.SystemPackageCacheSupport;
+import au.com.royalpay.payment.manage.system.core.beans.PermissionClientModuleLog;
+import au.com.royalpay.payment.tools.exceptions.NotFoundException;
+import au.com.royalpay.payment.tools.utils.id.IdUtil;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+
+/**
+ * @author kira
+ * @date 2018/7/4
+ */
+@Service
+public class PermissionClientModulesServiceImpl implements PermissionClientModulesService {
+
+ @Resource
+ private SysPermissionClientModulesMapper permissionClientModulesMapper;
+
+ @Resource
+ private MongoTemplate mongoTemplate;
+ @Resource
+ private SystemPackageCacheSupport systemPackageCacheSupport;
+
+
+ @Override
+ public void save(JSONObject record) {
+ record.put("id",IdUtil.getId());
+ permissionClientModulesMapper.save(record);
+ }
+
+ @Override
+ @Cacheable(value = ":system:client_permission:", key = "#clientId+''")
+ public List listValidByClientId(int clientId) {
+ return permissionClientModulesMapper.listValidByClientId(clientId);
+ }
+
+ @Override
+ @Cacheable(value = ":system:client_permission:", key = "#clientMoniker")
+ public List listByClientMoniker(String clientMoniker) {
+ return permissionClientModulesMapper.listByClientMoniker(clientMoniker);
+ }
+
+
+ @Override
+ public void switchValid(Long id, boolean isValid, JSONObject account) {
+ JSONObject record = permissionClientModulesMapper.find(id);
+ if (record == null) {
+ throw new NotFoundException("Permission Client Module Not Found id:" + id);
+ }
+ JSONObject updateRecord = new JSONObject();
+ updateRecord.put("is_valid", isValid);
+ saveMongoLog(account,record,updateRecord,(isValid?"打开":"关闭")+"模块 id:"+record.getString("module_id"));
+ updateRecord.put("id", record.getLong("id"));
+ permissionClientModulesMapper.update(updateRecord);
+ systemPackageCacheSupport.clearClientPermission(record.getString("client_moniker"));
+ systemPackageCacheSupport.clearClientPermission(record.getIntValue("client_id"));
+
+ }
+
+ private void saveMongoLog(JSONObject account, JSONObject oldRecord, JSONObject modifyData, String business) {
+ modifyData.remove("id");
+ PermissionClientModuleLog mongoRecord = new PermissionClientModuleLog();
+ mongoRecord.setBusiness(business);
+ mongoRecord.setClientId(oldRecord.getIntValue("client_id"));
+ mongoRecord.setClientMoniker(oldRecord.getString("client_moniker"));
+ mongoRecord.setCreateTime(new Date());
+ mongoRecord.setId(IdUtil.getId());
+ mongoRecord.setUserId(account.getString("manager_id"));
+ mongoRecord.setUserName(account.getString("display_name"));
+ mongoRecord.setNewData(modifyData.toJSONString());
+ Map beforeModify = modifyData.keySet().stream().collect(Collectors.toMap(key -> key, oldRecord::get));
+ mongoRecord.setOriginData(JSON.toJSONString(beforeModify));
+ mongoTemplate.insert(mongoRecord);
+ }
+}
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/act/ActChairtyMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/act/ActChairtyMapper.xml
new file mode 100644
index 000000000..addc41843
--- /dev/null
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/act/ActChairtyMapper.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ select count(DISTINCT order_id) as count_ordernum ,client_moniker,active_time,ifnull(sum(pmt_transactions.clearing_amount),0) as sum_ordernum
+ from act_charity
+ left JOIN pmt_transactions on act_charity.client_id = pmt_transactions.client_id
+ and pmt_transactions.transaction_type='Credit' and pmt_transactions.transaction_time>=act_charity.active_time
+ and pmt_transactions.transaction_time<'2018-09-01' and pmt_transactions.transaction_time>='2018-07-09'
+ and pmt_transactions.channel != 'Settlement'
+ GROUP BY act_charity.client_id order by count_ordernum desc
+
+
+ select count(DISTINCT order_id) as count_ordernum,date_format(pmt_transactions.transaction_time,'%Y-%m-%d') as orderdate,client_moniker,ifnull(sum(pmt_transactions.clearing_amount),0) as sum_ordernum from act_charity inner JOIN pmt_transactions ON act_charity.client_id = pmt_transactions.client_id
+ and pmt_transactions.transaction_type='Credit' and pmt_transactions.transaction_time>=#{begin} and pmt_transactions.transaction_time<=#{end} and pmt_transactions.transaction_time>=act_charity.active_time
+ and pmt_transactions.channel != 'Settlement'
+ and pmt_transactions.transaction_time<'2018-09-01' and pmt_transactions.transaction_time>='2018-07-09'
+ group by date_format(pmt_transactions.transaction_time,'%Y-%m-%d')
+
+
+
+
+ select count(DISTINCT pmt_transactions.order_id) *0.01 as chair_ordernum,act_charity.client_moniker,ifnull(sum(pmt_transactions.clearing_amount),0) as sum_ordernum from act_charity left JOIN pmt_transactions ON act_charity.client_id = pmt_transactions.client_id
+ and pmt_transactions.transaction_type='Credit' and pmt_transactions.transaction_time>=#{begin} and pmt_transactions.transaction_time<=#{end} and pmt_transactions.transaction_time>=act_charity.active_time
+ and pmt_transactions.transaction_time<'2018-09-01' and pmt_transactions.transaction_time>='2018-07-09'
+ GROUP BY act_charity.client_moniker order by chair_ordernum desc
+
+
\ No newline at end of file
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyAccessLogMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyAccessLogMapper.xml
index 83a1ab531..4f115c7d3 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyAccessLogMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyAccessLogMapper.xml
@@ -42,4 +42,7 @@
GROUP BY access_date
ORDER BY access_date DESC
+
+ select sum(actural_amount) actural_amount from cus_encourage_money_access_log where member_id = #{memberId} and event_id = #{eventId};
+
\ No newline at end of file
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyUseLogMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyUseLogMapper.xml
index 4610889fc..4d025397b 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyUseLogMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerEncourageMoneyUseLogMapper.xml
@@ -43,4 +43,7 @@
INNER JOIN pmt_orders o ON o.order_id=u.order_id AND o.status>4
WHERE u.transaction_id is null
+
+ select sum(use_amount) use_amount from cus_encourage_money_use_log where member_id = #{memberId} and event_id = #{eventId} and transaction_id is not null
+
\ No newline at end of file
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialBDConfigMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialBDConfigMapper.xml
index 25eadc450..55dd4eb35 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialBDConfigMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialBDConfigMapper.xml
@@ -9,7 +9,8 @@
c.bd_level,
c.city,
c.get_prize,
- c.bd_group
+ c.bd_group,
+ c.kpi_amount
FROM sys_managers m
LEFT JOIN financial_bd_config c ON c.manager_id = m.manager_id
WHERE m.role & 4 > 0 AND m.is_valid = 1 AND (m.org_id = 1 OR m.org_id IS NULL)
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialBDPrizeRecordMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialBDPrizeRecordMapper.xml
index 63430d2be..24f56ef19 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialBDPrizeRecordMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialBDPrizeRecordMapper.xml
@@ -8,7 +8,7 @@
SELECT
- r.*,
+ r.*,l.kpi_amount,
sum(total_prize) total_prize,
sum(send_prize) total_send_prize,
sum(total_donation) total_donation
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticePartnerMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticePartnerMapper.xml
index 9ce2d1e10..6f0b045a0 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticePartnerMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticePartnerMapper.xml
@@ -28,4 +28,12 @@
LEFT JOIN sys_accounts a ON a.account_id = nc.read_id
WHERE nc.status = '1' AND nc.notice_id = #{notice_id}
+
+
+ select count(*) from sys_notice_client c left join sys_notice n on n.notice_id = c.notice_id
+ where c.`status` = #{status} and c.client_id = #{client_id}
+
+ and n.is_to_app=#{is_to_app}
+
+
\ No newline at end of file
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml
index ad74bfa4d..c6911c549 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml
@@ -100,14 +100,14 @@
SELECT
- count(t.transaction_id) order_count,
- ifnull(sum(if(t.transaction_type='Credit' and t.refund_id is null and o.currency!='CNY',o.display_amount,0)),0)
+ count(DISTINCT o.order_id) order_count,
+ ifnull(sum(if(t.transaction_type='Credit' and t.refund_id is null and t.system_generate=0 and o.currency!='CNY',o.display_amount,0)),0)
display_amount,
- ifnull(sum(if(t.transaction_type='Credit' and t.refund_id is null and o.currency!='CNY' and
+ ifnull(sum(if(t.transaction_type='Credit' and t.refund_id is null and t.system_generate=0 and o.currency!='CNY' and
o.pre_authorization=1,o.display_amount,0)),0) pre_display_amount,
- ifnull(sum(if(t.transaction_type='Credit' and t.refund_id is null and o.currency='CNY',o.display_amount,0)),0)
+ ifnull(sum(if(t.transaction_type='Credit' and t.refund_id is null and t.system_generate=0 and o.currency='CNY',o.display_amount,0)),0)
cny_display_amount,
- ifnull(sum(if(t.transaction_type='Credit' and t.refund_id is null and o.currency='CNY' and
+ ifnull(sum(if(t.transaction_type='Credit' and t.refund_id is null and t.system_generate=0 and o.currency='CNY' and
o.pre_authorization=1,o.display_amount,0)),0) pre_cny_display_amount,
ifnull(sum(if(t.transaction_type='Credit',t.clearing_amount,0)),0) paid_fee,
sum(if(t.transaction_type='Debit' AND t.refund_id is NOT NULL,t.clearing_amount,0))*-1
@@ -495,10 +495,7 @@
INNER JOIN pmt_orders o ON o.order_id = t.order_id
INNER JOIN sys_clients c ON c.client_id = o.client_id AND c.org_id = 1
WHERE year(o.create_time) = #{year} AND month(o.create_time) = #{month} AND t.channel != 'Settlement'
-
- and t.channel not in ('Alipay','Bestpay')
-
-
+
and t.channel = #{channel}
GROUP BY o.client_id, trade_date
@@ -507,7 +504,7 @@
SELECT
- sum(if(t.transaction_type = 'Credit', t.clearing_amount, -t.clearing_amount))
+ ifnull(sum(if(t.transaction_type = 'Credit', t.clearing_amount, -t.clearing_amount)),0)
total
FROM pmt_transactions t
INNER JOIN pmt_orders o ON o.order_id = t.order_id
@@ -528,6 +525,30 @@
where b.is_valid=1 and b.start_date<=now() and (b.end_date is null or b.end_date >= now())
AND c.bd_group=#{bd_group} or c.manager_id=#{bd_group})
+
+
+ SELECT
+ sum(if(t.transaction_type = 'Credit', t.clearing_amount, -t.clearing_amount))
+ total
+ FROM pmt_transactions t
+ INNER JOIN pmt_orders o ON o.order_id = t.order_id
+ INNER JOIN sys_clients c ON c.client_id = o.client_id AND c.org_id = 1
+ WHERE year(o.create_time) = #{year} AND month(o.create_time) = #{month}
+ AND(
+ t.transaction_type = 'Credit'
+ OR t.refund_id IS NOT NULL
+ )
+ AND(
+ o. STATUS =5
+ OR o. STATUS =6
+ OR o. STATUS =7
+ )
+ and t.client_id in
+ (SELECT b.client_id FROM sys_client_bd b
+ INNER JOIN financial_bd_config c ON c.manager_id=b.bd_id
+ where b.is_valid=1 and b.start_date<=now() and (b.end_date is null or b.end_date >= now())
+ AND c.city='Sydney')
+
#{date} OR end_date IS NULL) AND
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml
index 3a39d95b2..ef9a4a2ff 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml
@@ -166,6 +166,25 @@
and c.is_valid=1
+
+ SELECT
+ company_name,short_name,client_moniker,alipayindustry,address,suburb,state,postcode,business_hours,company_phone,merchant_introduction
+ from sys_clients
+
+ (approve_result=1 or (approve_result=2 and (source=1 or source=2)))
+
+ AND approve_time >= #{datefrom}
+
+
+ AND approve_time <= #{dateto}
+
+
+
+
+ SELECT
+ client_id,client_moniker
+ from sys_clients
+
SELECT c.*,o.name org_name FROM sys_clients c
inner join sys_org o on o.org_id=c.org_id
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/PermissionClientModuleMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/PermissionClientModuleMapper.xml
new file mode 100644
index 000000000..957b51ca8
--- /dev/null
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/PermissionClientModuleMapper.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ delete from sys_permission_partner_modules_clients
+ where module_id = (SELECT id from sys_permission_partner_modules where module_name=#{module_name})
+
+
\ No newline at end of file
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/PermissionPartnerFunctionMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/PermissionPartnerFunctionMapper.xml
new file mode 100644
index 000000000..cd677f123
--- /dev/null
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/PermissionPartnerFunctionMapper.xml
@@ -0,0 +1,39 @@
+
+
+
+
+ SELECT
+ f.*,
+ m.js_module,
+ m.js_path,
+ m.remark mod_remark
+ FROM sys_permission_partner_functions f
+ LEFT JOIN sys_permission_partner_modules m ON m.module_name = f.module
+
+
+
+
+
+
+
+ #{id}
+
+
+
+
+ 0
+ ]]>
+
+
+
+ ORDER BY f.module ASC,f.func_id ASC
+
+
\ No newline at end of file
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/SysPermissionClientModulesMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/SysPermissionClientModulesMapper.xml
new file mode 100644
index 000000000..742682a3d
--- /dev/null
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/SysPermissionClientModulesMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ SELECT
+ f.*,
+ m.js_module,
+ m.js_path,
+ m.remark mod_remark
+ FROM sys_permission_functions f
+ LEFT JOIN sys_permission_modules m ON m.module_name = f.module
+
+
+
+ select pmc.*,pm.module_name from sys_permission_partner_modules_clients pmc left join sys_permission_partner_modules pm
+ on pmc.module_id = pm.id and pmc.client_moniker = #{client_moniker}
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/templates/activity/encourage_money/desc.html b/src/main/resources/templates/activity/encourage_money/desc.html
index e5822f21d..595bfe20e 100644
--- a/src/main/resources/templates/activity/encourage_money/desc.html
+++ b/src/main/resources/templates/activity/encourage_money/desc.html
@@ -21,7 +21,7 @@
-
欢迎使用微信支付
+
欢迎使用RoyalPay支付
奖励再翻倍
@@ -32,7 +32,7 @@
- 用户在支持微信支付的商户进行消费,金额≥10澳币 时,
+ 用户在支持RoyalPay的商户使用微信、支付宝进行消费,金额≥10澳币 时,
立即获得随机鼓励金。最高可达888元,每人每天可领取三次 。
@@ -68,9 +68,9 @@
鼓励金仅在活动期间有效,活动结束鼓励金自动清零。
-
- 查看活动商家
-
+
+
+
-
+
活动期间任意消费满10澳币,获随机鼓励金
@@ -29,26 +32,26 @@
diff --git a/src/main/ui/manage.html b/src/main/ui/manage.html
index 5c2f09795..0119b7692 100644
--- a/src/main/ui/manage.html
+++ b/src/main/ui/manage.html
@@ -307,13 +307,13 @@ margin-bottom: 10%;"/>
-
+
+
+
+
+
+
+
+
到目前为止交易总金额排名(总额:{{totalAmount}})
+ (总公益额:{{totalChairty}})
+
+
+
+
+
+ Partner Name
+ Amount
+ 订单量
+ 捐款额
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Total Records:{{total_ranking_pagination.totalCount}};Total Pages:{{total_ranking_pagination.totalPages}}
+
+
+
+
{{event_date}} 商户半边天公益活动总排名 (选择上图相应的日期获取当日排名) 当日总额:{{cashBack_total_daily}}
+
+
+
+
+ Partner Name
+ Amount
+ 捐款额
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Total Records:{{day_ranking_pagination.totalCount}};Total Pages:{{day_ranking_pagination.totalPages}}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/actchairty/templates/act_chairty_merchants.html b/src/main/ui/static/actchairty/templates/act_chairty_merchants.html
new file mode 100644
index 000000000..4893f4e50
--- /dev/null
+++ b/src/main/ui/static/actchairty/templates/act_chairty_merchants.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Client Moniker
+ Active Time
+ 订单量
+ 订单金额
+ 捐款额
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/ui/static/activity/loving_merchants/loving_merchants_intro.html b/src/main/ui/static/activity/loving_merchants/loving_merchants_intro.html
index fa4b039fd..1c53bc149 100644
--- a/src/main/ui/static/activity/loving_merchants/loving_merchants_intro.html
+++ b/src/main/ui/static/activity/loving_merchants/loving_merchants_intro.html
@@ -28,7 +28,7 @@
-
+
diff --git a/src/main/ui/static/boot/indexMainApp.js b/src/main/ui/static/boot/indexMainApp.js
index d0a55cd3d..c214a29bd 100644
--- a/src/main/ui/static/boot/indexMainApp.js
+++ b/src/main/ui/static/boot/indexMainApp.js
@@ -555,6 +555,19 @@ define(['angular', 'angularSanitize', 'angularAnimate', 'angularMessages', 'uiRo
return roles.indexOf($rootScope.currentUser.role) >= 0;
}
}]);
+
+ app.filter('withPartnerModule', ['$rootScope', function ($rootScope) {
+ return function (module) {
+ var result = false;
+ angular.forEach($rootScope.currentUser.available_module_ids, function (item) {
+ if((item+'') == (module+'')){
+ result = true;
+ return ;
+ }
+ });
+ return result;
+ }
+ }]);
app.filter("trustUrl", ['$sce', function ($sce) {
return function (recordingUrl) {
return $sce.trustAsResourceUrl(recordingUrl);
diff --git a/src/main/ui/static/boot/manager-boot.js b/src/main/ui/static/boot/manager-boot.js
index 49ce1a7b6..287160881 100644
--- a/src/main/ui/static/boot/manager-boot.js
+++ b/src/main/ui/static/boot/manager-boot.js
@@ -10,7 +10,7 @@ require.config({
uiBootstrap: 'static/lib/angular-plugins/ui-bootstrap-tpls-1.2.4.min',
uiRouter: 'static/lib/angular-plugins/angular-ui-router.min',
angularChecklist: 'static/lib/angular-plugins/checklist-model',
- angular: 'static/lib/angularjs/angular.min',
+ angular: 'static/lib/angularjs/angular',
angularAnimate: 'static/lib/angularjs/angular-animate.min',
angularMessages: 'static/lib/angularjs/angular-messages.min',
angularSanitize: 'static/lib/angularjs/angular-sanitize.min',
diff --git a/src/main/ui/static/config/bdprize/bdprize.js b/src/main/ui/static/config/bdprize/bdprize.js
index 1d61028af..d444fb858 100644
--- a/src/main/ui/static/config/bdprize/bdprize.js
+++ b/src/main/ui/static/config/bdprize/bdprize.js
@@ -39,9 +39,12 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
})
}]);
- app.controller('bdPrizeRootCtrl', ['$scope', '$http', '$uibModal', 'commonDialog', function ($scope, $http, $uibModal, commonDialog) {
+ app.controller('bdPrizeRootCtrl', ['$scope', '$http', '$uibModal', 'commonDialog','$filter', function ($scope, $http, $uibModal, commonDialog,$filter) {
$scope.params = {year: new Date().getFullYear()};
+ $scope.generate = {};
$scope.availableYears = [new Date().getFullYear() - 1, new Date().getFullYear()];
+ $scope.kpiRanges = [{value: 1, label: '0-50%'}, {value: 2, label: '50%~80%'}, {value: 3, label: '80%~100%'},
+ {value: 4, label: '100%-120%'}, {value: 5, label: '>=120%'}];
$scope.initMonth = function (year) {
$scope.params.year = year;
$scope.months = [];
@@ -72,27 +75,37 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
};
$scope.getYearReports(new Date().getFullYear());
$scope.generateReport = function () {
+ if (!$scope.generate.month) {
+ commonDialog.alert({
+ type: 'error', title: 'Error', content: 'Select a month first!'
+ });
+ return;
+ }
commonDialog.confirm({
title: 'Warning',
content: 'This operation will clear the result of last month generated before. Are you sure?'
}).then(function () {
- $http.post('/sys/bd_prize/generate_record', null, {timeout: 60000}).then(function () {
+ $scope.generate.status = {};
+ var params = {month: $filter('date')($scope.generate.month, 'yyyy-MM')};
+ $http.post('/sys/bd_prize/generate_record/'+params.month, null, {timeout: 60000}).then(function (resp) {
+ $scope.generate.status = null;
commonDialog.alert({title: 'Success', content: 'Generate Finished', type: 'success'});
$scope.getYearReports($scope.params.year);
}, function (resp) {
- commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'})
+ commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
+ $scope.generate.status = null;
})
})
};
$scope.loadRateConfigs = function () {
$http.get('/sys/bd_prize/config/rates').then(function (resp) {
$scope.bd_rate_configs = resp.data;
- $scope.bd_rate_ranges = [];
- var rangeStart = [];
+ $scope.kpi_ranges = [];
+ var kpiStart = [];
angular.forEach($scope.bd_rate_configs, function (cfg) {
- if (rangeStart.indexOf(cfg.rate_from) < 0) {
- rangeStart.push(cfg.rate_from);
- $scope.bd_rate_ranges.push(cfg);
+ if (kpiStart.indexOf(cfg.kpi_range) < 0) {
+ kpiStart.push(cfg.kpi_range);
+ $scope.kpi_ranges.push(cfg);
}
})
})
@@ -136,7 +149,10 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
value: 3,
label: '>=7 Months'
}];
- $scope.filter = {bd_level: 1, months: 1};
+ $scope.kpiRanges = [{value: 1, label: '0-50%'}, {value: 2, label: '50%~80%'}, {value: 3, label: '80%~100%'},
+ {value: 4, label: '100%-120%'}, {value: 5, label: '>=120%'}];
+ $scope.clientRate = [{value: 0.6, label: '0.6-0.79'}, {value: 0.8, label: '0.8-2.0'}];
+ $scope.filter = {bd_level: 1,rate_from:0.6};
$scope.rates = rates;
$scope.submitRates = function () {
var validation = null;
@@ -191,7 +207,7 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
app.controller('bdCommissionConfigCtrl', ['$scope', '$state', '$http', '$filter', 'monModal', function ($scope, $state, $http, $filter, monModal) {
$scope.monModal = monModal;
$scope.params = {year: new Date().getFullYear()};
- $scope.bdtypes = [{id: 1, label: 'Leader'}, {id: 2, label: 'Manager'}, {id: 3, label: 'Director'}];
+ $scope.bdtypes = [{id: 1, label: 'BD Manager'}, {id: 2, label: 'KA Manager'}, {id: 3, label: 'Sydney GM'},{id: 4, label: 'COO'},{id: 5, label: 'NJ Department'}];
// $scope.bdmon;
// $scope.newSwitch;
$scope.initMonth = function (year) {
@@ -209,6 +225,34 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
var end = $filter('date')(new Date(), 'yyyy-MM');
return start <= mon && end >= mon
};
+ $scope.getBDLevels = function () {
+ $http.get('/sys/bd_prize/config/bd_levels').then(function (resp) {
+ $scope.bds = resp.data;
+ })
+ };
+ $scope.getBDLevels();
+ $scope.chooseLastConfig = function (mon) {
+ var index = $scope.months.indexOf(mon);
+ if(index == 0){
+ var year = new Date().getFullYear();
+ year--;
+ mon = year + '-12';
+ }else {
+ mon = $scope.months[index-1];
+ }
+ $http.get('/sys/bd_prize/commission/le_ma/' + mon).then(function (resp) {
+ $scope.bdlm = [];
+ angular.forEach(resp.data,function (e) {
+ var bdC = {};
+ bdC.commission_start_amount = e.commission_start_amount;
+ bdC.commission_end_amount = e.commission_end_amount;
+ bdC.bd_commission_rate = e.bd_commission_rate;
+ bdC.bd_type = e.bd_type;
+ $scope.bdlm.push(bdC);
+ });
+ $scope.listConfig = true;
+ })
+ };
$scope.listCurrentMonBDCommission = function (mon) {
$http.get('/sys/bd_prize/commission/le_ma/' + mon).then(function (resp) {
$scope.bdlm = resp.data;
@@ -266,6 +310,24 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
})
}
}
+ $scope.submitBdCommmissionConfig = function (mon, bds) {
+ $scope.check = true;
+ $scope.errmsg = null;
+ angular.forEach(bds, function (data, index) {
+ if(data.get_prize){
+ if (!data.kpi_amount) {
+ $scope.errmsg = "BD kpi Amount not be null";
+ $scope.check = false;
+ return;
+ }
+ }
+ });
+ if ($scope.check) {
+ $http.post('/sys/bd_prize/commission/kpi/update/' + mon, bds).then(function (resp) {
+ $scope.$close();
+ })
+ }
+ }
}]);
app.controller('bdPrizeMonthReportCtrl', ['$scope', '$http', 'report', function ($scope, $http, report) {
$scope.report = report.data;
diff --git a/src/main/ui/static/config/bdprize/templates/bd_commission_config_dialog.html b/src/main/ui/static/config/bdprize/templates/bd_commission_config_dialog.html
index 377cc43ca..4a5a96951 100644
--- a/src/main/ui/static/config/bdprize/templates/bd_commission_config_dialog.html
+++ b/src/main/ui/static/config/bdprize/templates/bd_commission_config_dialog.html
@@ -1,54 +1,144 @@
+
-
+
+
+
+
+
+
+
+
+
+ 完成当月指标低于 51%,提成按照 0.005%提取
+ 完成当月指标高于 80%,提成按照 0.008%提取
+ 完成当月指标 100%,提成按照 0.01%
+
+
+
+
+
+ 完成月度指标,当月部门提成为该部门总流水的 0.01%
+ 未完成月度指标,当月部门提成为该部门总流水的 0.005%;
+
+
+
+
+
+ 完成月度指标,当月提成为该分公司总流水的 0.005%
+ 未完成月度指标,当月提成为该分公司总流水的 0.0025%
+
+
+
+
+
+ 完成月度指标,当月提成为公司总流水的 0.01%
+ 未完成月度指标,当月提成为公司总流水的 0.005%
+
+
+
+
+
+ 完成 KPI 按照 0.03%提取;未完成 KPI 按照 0.02%提取
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/bdprize/templates/bd_prize_month_report.html b/src/main/ui/static/config/bdprize/templates/bd_prize_month_report.html
index 7734b95f5..c8ccb0cef 100644
--- a/src/main/ui/static/config/bdprize/templates/bd_prize_month_report.html
+++ b/src/main/ui/static/config/bdprize/templates/bd_prize_month_report.html
@@ -41,9 +41,9 @@
-
BD Taotal Commission: ${{report.WechatReport.total_prize}}
- BD Taotal Send: ${{report.WechatReport.total_send_prize}}
- BD Taotal Fund: ${{report.WechatReport.total_donation}}
+ BD Total Commission: ${{report.WechatReport.total_prize}}
+ BD Total Send: ${{report.WechatReport.total_send_prize}}
+ BD Total Fund: ${{report.WechatReport.total_donation}}
@@ -54,7 +54,7 @@
BD Total Commission: ${{report.AlipayReport.total_prize}}
- BD Taotal Send: ${{report.AlipayReport.total_send_prize}}
+ BD Total Send: ${{report.AlipayReport.total_send_prize}}
BD Total Fund: ${{report.AlipayReport.total_donation}}
@@ -65,9 +65,9 @@
-
BD Taotal Commission: ${{report.BestpayReport.total_prize}}
- BD Taotal Send: ${{report.BestpayReport.total_send_prize}}
- BD Taotal Fund: ${{report.BestpayReport.total_donation}}
+ BD Total Commission: ${{report.BestpayReport.total_prize}}
+ BD Total Send: ${{report.BestpayReport.total_send_prize}}
+ BD Total Fund: ${{report.BestpayReport.total_donation}}
@@ -79,6 +79,7 @@
BD Name
+ KPI
BD Level
Transaction Amount
Total Commission
@@ -91,8 +92,12 @@
{{log.bd_name}}
{{log.bd_name}} (Left Company)
+
+ {{log.kpi_amount}}
+ 0.00
+
-
+ {{log.total_amount|currency:'AUD '}}
@@ -110,7 +115,7 @@
-
+
@@ -152,18 +157,44 @@
-->
-
-
-
-
- Transaction Amount:
-
-
- Total Commission:
-
+
+
+
+
+ Transaction Amount:
+
+
+ Total Commission:
+
+
+
+
+
+
+ Transaction Amount:
+
+
+ Total Commission:
+
+
+
+
+
+
+
+
+
+ Transaction Amount:
+
+
+ Total Commission:
+
+
+
+
diff --git a/src/main/ui/static/config/bdprize/templates/bd_prize_root.html b/src/main/ui/static/config/bdprize/templates/bd_prize_root.html
index 460135274..23183fd11 100644
--- a/src/main/ui/static/config/bdprize/templates/bd_prize_root.html
+++ b/src/main/ui/static/config/bdprize/templates/bd_prize_root.html
@@ -9,9 +9,25 @@
-
Generate Report
-
Edit Rate Config
-
Edit BD Level
+
+
+
@@ -36,15 +52,15 @@
@@ -59,49 +75,48 @@
BD Level
- 费率
- 费率
- Junior BD
- Intermediate BD
- Senior BD
+ KPI完成度
+ Junior BD
+ Intermediate BD
+ Senior BD
- 商户开通时长
- 1-3个月
- 4-6个月
- >=7个月
- 1-3个月
- 4-6个月
- >=7个月
- 1-3个月
- 4-6个月
- >=7个月
+ 费率
+ 0.6-0.79
+ 0.8-2.0
+ 0.6-0.79
+ 0.8-2.0
+ 0.6-0.79
+ 0.8-2.0
-
+
-
-
+
-
+ ng-bind="(bd_rate_configs|filter:{kpi_range:range.kpi_range,bd_level:level,rate_from:0.6})[0].prize_rate+'%'">
+ ng-bind="(bd_rate_configs|filter:{kpi_range:range.kpi_range,bd_level:level,rate_from:0.8})[0].prize_rate+'%'">
补充说明
- 商户费率变更,提成比随之变更
- 商户开通时长从商户开通时间起算
- 后台系统自主申请商户,提成按照前三个月0.05%,后期0.01%发放,自主申请商户在详情列表中的Client Source标注为Apply
- 调岗人员移交的商户,移交后6个月内移交人员和接收人员平分提成,应在商户BD配置里进行设置,分配比例请关注详情列表中的Coefficient,正常情况下应当为1
- 离职人员移交的商户,接收人员享受一半提成,另一半作为BD福利基金,离职转交商户在详情列表中用红色标注
- BD提成按月发放
- 每月发放总额的80%,剩余20%于每年年底,即12月25日圣诞节前发放
+ 按月度发放
+ 每月发放总提成额度的 80%,剩余 20%按照“年度考评分数比例”于每年年底即 12 月 25 日圣诞前发放
提前离职者,20%提成不予发放
+ 年度考评(根据销管中心每月考评表打分制进行统计)按照考评分数对应比例发放 20%的占比部分,扣下部分如果第二年考评超出一定评分 110%可以补发;同样,如果年度考评分数超过 100 分按照同比例发放
+ 商户开通后连续 1 个月未产生流水的,上交主管,由主管重新分配
+ 连续 2 个月不产生流水的商户,由销管部统一收回,重新分配
+ 分配后的商户流水客户专员只能占一半
+ 离职及调岗人员商户统一上交销管中心,由销管中心 leader 及跨境事业部总监相互协商及相互监督,按照公平公正的原则, 做出分配方案,并由总监确认后统一分配。调岗人员移交的商户,在移交后 1 个月内移交人员和接收人员平分该商家产生的提成,移交人员需配合接收人员做好商户对接和短期内的商户维护;
+ 离职人员交接的商户提成,接收人员享受一半的提成,另一半作为跨境客服专员福利会基金
+ 被客户投诉情况严重者,此商户由销管中心无条件收回重新分配
+ 活动执行未传达到位且出现舞弊、徇私、懒惰等行为的,商户上交由销管中心统一分配
+ 后期维护不及时,连续一个月不跟踪者,此商户上交销管中心,统一重新分配
+ 以上分配,销管中心 leader 和跨境支付事业部商量好之后需做好方案后经 COO 审批方可执行
diff --git a/src/main/ui/static/config/bdprize/templates/rate_config_dialog.html b/src/main/ui/static/config/bdprize/templates/rate_config_dialog.html
index f35ca90d7..397bc2ec9 100644
--- a/src/main/ui/static/config/bdprize/templates/rate_config_dialog.html
+++ b/src/main/ui/static/config/bdprize/templates/rate_config_dialog.html
@@ -9,23 +9,29 @@
-
- Client Rate
+ KPI完成度
BD Rate
-
- {{rate.rate_from}}-{{rate.rate_to}}
+
+
diff --git a/src/main/ui/static/config/devtools/devtools.js b/src/main/ui/static/config/devtools/devtools.js
index c410bba37..51206382c 100644
--- a/src/main/ui/static/config/devtools/devtools.js
+++ b/src/main/ui/static/config/devtools/devtools.js
@@ -51,6 +51,10 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) {
url: '/phone_top_up',
templateUrl: '/static/config/devtools/templates/phone_top_up.html',
controller: 'phonetopupCtrl'
+ }).state('devtools.aliforexcel', {
+ url: '/aliforexcel',
+ templateUrl: '/static/config/devtools/templates/aliforexcel.html',
+ controller: 'aliforexcelCtrl'
})
}]);
app.controller('devManualRefundCtrl', ['$scope', '$http', 'commonDialog', function ($scope, $http, commonDialog) {
@@ -302,6 +306,38 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) {
})
}
}]);
+ /* app.controller('orgusertestCtrl', ['$scope', '$http', '$filter','commonDialog', function ($scope, $http, $filter,commonDialog) {
+ $scope.regist = function () {
+
+ $http.post('/dev/orgusertest',{client_moniker: $scope.company}).then(function (resp) {
+ commonDialog.alert({title: 'SUCCESS', content:"注册成功", type: 'success'})
+ }, function (resp) {
+ commonDialog.alert({title: 'Error', content: "商品编号已存在", type: 'Error'})
+ })
+ }
+}]);*/
+ app.controller('aliforexcelCtrl', ['$scope', '$filter', function ($scope, $filter) {
+ $scope.params = {};
+ var str = $filter('date')(new Date(), 'yyyyMMdd');
+ var oDate = new Date(str.slice(0, 4), str.slice(4, 6) - 1, str.slice(-2));
+ var oDay = oDate.getDay();
+ var oNum = oDate.getDate();
+ var bWeek1 =new Date(str.slice(0, 4), str.slice(4, 6) - 1, oNum-oDay-6);
+ var bWeek2 =new Date(str.slice(0, 4), str.slice(4, 6) - 1, oNum-oDay);
+ $scope.params.datefrom = bWeek1;
+ $scope.params.dateto = bWeek2;
+ $scope.Export = function () {
+ var params = angular.copy($scope.params);
+ params.datefrom = $filter('date')(params.datefrom, 'yyyy-MM-dd');
+ params.dateto = $filter('date')(params.dateto, 'yyyy-MM-dd');
+ var url = '/dev/aliforexcel';
+ var connectSymbol = '?';
+ url += connectSymbol + 'datefrom=' + params.datefrom + '&' + 'dateto=' + params.dateto;
+ return url;
+ }
+
+ }]);
return app;
+
});
\ No newline at end of file
diff --git a/src/main/ui/static/config/devtools/templates/aliforexcel.html b/src/main/ui/static/config/devtools/templates/aliforexcel.html
new file mode 100644
index 000000000..51232c480
--- /dev/null
+++ b/src/main/ui/static/config/devtools/templates/aliforexcel.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+ ~
+
+
+
   
+
+ Export
+
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/devtools/templates/orgusertest.html b/src/main/ui/static/config/devtools/templates/orgusertest.html
new file mode 100644
index 000000000..909a0a792
--- /dev/null
+++ b/src/main/ui/static/config/devtools/templates/orgusertest.html
@@ -0,0 +1,32 @@
+
+
+
diff --git a/src/main/ui/static/config/devtools/templates/root.html b/src/main/ui/static/config/devtools/templates/root.html
index 6e18a1a0d..d5c0ce8d9 100644
--- a/src/main/ui/static/config/devtools/templates/root.html
+++ b/src/main/ui/static/config/devtools/templates/root.html
@@ -67,7 +67,16 @@
Phone Top Up
+
+
+
+ 支付宝进件导出
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/sysconfigs/sysconfigs.js b/src/main/ui/static/config/sysconfigs/sysconfigs.js
index 763f50f5c..ccda9b062 100644
--- a/src/main/ui/static/config/sysconfigs/sysconfigs.js
+++ b/src/main/ui/static/config/sysconfigs/sysconfigs.js
@@ -39,6 +39,24 @@ define(['angular', 'uiRouter'], function (angular) {
templateUrl: '/static/config/sysconfigs/templates/payemnt_config.html',
controller: 'paymentConfigCtrl'
})*/
+ .state('sysconfig.permissionPartner', {
+ url: '/permissionPartner',
+ templateUrl: '/static/config/sysconfigs/templates/permissionPartner_config.html',
+ controller: 'permissionPartnerConfigRootCtrl'
+ }).state('sysconfig.permissionPartner.functions', {
+ url: '/partnerFunctions',
+ templateUrl: '/static/config/sysconfigs/templates/permissionPartner_functions.html',
+ controller: 'permissionPartnerFuncCtrl'
+ }).state('sysconfig.permissionPartner.modules', {
+ url: '/partnerModules',
+ templateUrl: '/static/config/sysconfigs/templates/permissionPartner_modules.html',
+ controller: 'permissionPartnerModuleCtrl',
+ resolve: {
+ modules: ['$http', function ($http) {
+ return $http.get('/sys/permissionPartner/modules')
+ }]
+ }
+ })
}]);
app.controller('sysConfigCtrl', ['$scope', function ($scope) {
@@ -118,6 +136,7 @@ define(['angular', 'uiRouter'], function (angular) {
$scope.modules = modules.data;
})
};
+
$scope.loadModules();
@@ -181,7 +200,7 @@ define(['angular', 'uiRouter'], function (angular) {
$scope.newModule = function () {
$uibModal.open({
templateUrl: '/static/config/sysconfigs/templates/permission_module_dialog.html',
- controller: 'moduleEditCtrl',
+ controller: 'moduleNewCtrl',
resolve: {
module: function () {
return {};
@@ -203,6 +222,7 @@ define(['angular', 'uiRouter'], function (angular) {
}).result.then(function () {
$state.reload();
})
+
};
$scope.deleteModule = function (mod) {
commonDialog.confirm({
@@ -230,7 +250,18 @@ define(['angular', 'uiRouter'], function (angular) {
})
};
}]);
-
+ app.controller('moduleNewCtrl', ['$scope', '$http', 'module', function ($scope, $http, module) {
+ $scope.module = angular.copy(module);
+ $scope.nameEditable = !module.module_name;
+ $scope.save = function () {
+ $scope.errmsg = null;
+ $http.put('/sys/permission/modules/' + $scope.module.module_name + '.end', $scope.module).then(function () {
+ $scope.$close();
+ }, function (resp) {
+ $scope.errmsg = resp.data.message;
+ })
+ };
+ }]);
app.controller('mailSubscribeCtrl', ['$scope', '$http','commonDialog','$uibModal',function ($scope, $http,commonDialog,$uibModal) {
$scope.params = {};
$scope.pagination = {};
@@ -295,5 +326,205 @@ define(['angular', 'uiRouter'], function (angular) {
})
}
}]);*/
+ app.controller('permissionPartnerConfigRootCtrl', ['$scope', '$http', '$uibModal', function ($scope, $http, $uibModal) {
+ $scope.authorizeRole = function (roleMask) {
+ $uibModal.open({
+ templateUrl: '/static/config/sysconfigs/templates/permissionPartner_authorize_dialog.html',
+ controller: 'permissionPartnerAuthorizeDialogCtrl',
+ size: 'lg',
+ resolve: {
+ authorized: ['$http', function ($http) {
+ return $http.get('/sys/permissionPartner/roles/' + roleMask + '/functions');
+ }],
+ modules: ['$http', function ($http) {
+ return $http.get('/sys/permissionPartner/functions');
+ }],
+ role: function () {
+ return roleMask
+ }
+ }
+ });
+ }
+ }]);
+ app.controller('permissionPartnerAuthorizeDialogCtrl', ['$scope', '$http', 'authorized', 'modules', 'role',
+ function ($scope, $http, authorized, modules, role) {
+ $scope.authorized = authorized.data;
+ $scope.modules = modules.data;
+ $scope.submitAuthorize = function () {
+ $scope.errmsg = null;
+ $http.put('/sys/permissionPartner/roles/' + role + '/functions', $scope.authorized).then(function () {
+ $scope.$close();
+ }, function (resp) {
+ $scope.errmsg = resp.data.message;
+ })
+ };
+ $scope.toggleAuthorize = function (func) {
+ var idx = $scope.authorized.indexOf(func.func_id);
+ if (idx >= 0) {
+ $scope.authorized.splice(idx, 1);
+ } else {
+ $scope.authorized.push(func.func_id);
+ }
+ }
+ }]
+ );
+ app.controller('permissionPartnerFuncCtrl', ['$scope', '$http', '$state', '$uibModal', 'commonDialog',
+ function ($scope, $http, $state, $uibModal, commonDialog) {
+ $scope.loadFunctions = function () {
+ $http.get('/sys/permissionPartner/functions').then(function (functions) {
+ $scope.modFunctions = functions.data;
+ })
+ };
+ $scope.loadFunctions();
+
+ $scope.loadModules = function () {
+ $http.get('/sys/permissionPartner/modules').then(function (modules) {
+ $scope.modules = modules.data;
+ })
+ };
+
+ $scope.loadModules();
+
+
+ $scope.syncFunctions = function () {
+ $http.post('/sys/permissionPartner/synchronize').then(function () {
+ $scope.loadFunctions();
+ })
+ };
+ $scope.moveFunction = function (func) {
+ $uibModal.open({
+ templateUrl: '/static/config/sysconfigs/templates/permissionPartner_choose_module.html',
+ controller: 'permissionPartnerChooseModuleDialogCtrl',
+ resolve: {
+ modules: function () {
+ return $scope.modules;
+ }
+ }
+ }).result.then(function (modName) {
+ $http.put('/sys/permissionPartner/functions/' + func.func_id + '/modules', {module_name: modName}).then(function () {
+ $scope.loadFunctions();
+ }, function (resp) {
+ commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'})
+ })
+ })
+ };
+ $scope.editFunctionInfo = function (func) {
+ $uibModal.open({
+ templateUrl: '/static/config/sysconfigs/templates/PartnerFunc_info_edit.html',
+ controller: 'permissionPartnerFuncEditDialogCtrl',
+ resolve: {
+ func: function () {
+ return angular.copy(func);
+ }
+ }
+ }).result.then(function () {
+ $scope.loadFunctions();
+ })
+ }
+ }]
+ );
+ app.controller('permissionPartnerChooseModuleDialogCtrl', ['$scope', '$http', 'modules', function ($scope, $http, modules) {
+ $scope.modules = modules;
+ $scope.chooseModule = function (mod) {
+ $scope.$close(mod.module_name);
+ }
+ }]);
+ app.controller('permissionPartnerFuncEditDialogCtrl', ['$scope', '$http', 'func', function ($scope, $http, func) {
+ $scope.func = func;
+ $scope.modifyFunction = function () {
+ $scope.errmsg = null;
+ $http.put('/sys/permissionPartner/functions/' + func.func_id + '.end', $scope.func).then(function () {
+ $scope.$close();
+ }, function (resp) {
+ $scope.errmsg = resp.data.message;
+ })
+ };
+ }]);
+ app.controller('permissionPartnerModuleCtrl', ['$scope', '$http', '$state', '$uibModal', 'commonDialog', 'modules',
+ function ($scope, $http, $state, $uibModal, commonDialog, modules) {
+ $scope.modules = modules.data;
+ $scope.newPartnerModule = function () {
+ $uibModal.open({
+ templateUrl: '/static/config/sysconfigs/templates/permissionPartner_module_dialog.html',
+ controller: 'partnerModuleNewCtrl',
+ resolve: {
+ moduleall: function () {
+ return $scope.modules;
+ },
+ module: function () {
+ return {};
+ }
+ }
+ }).result.then(function () {
+ $state.reload();
+ })
+ };
+ $scope.editPartnerModule = function (mod) {
+ $uibModal.open({
+ templateUrl: '/static/config/sysconfigs/templates/permissionPartner_module_dialog.html',
+ controller: 'partnerModuleEditCtrl',
+ resolve: {
+ module: function () {
+ return mod;
+ }
+ }
+ }).result.then(function () {
+ $state.reload();
+ })
+
+ };
+ $scope.deletePartnerModule = function (mod) {
+ commonDialog.confirm({
+ title: 'Warning',
+ content: 'You are deleting an exists module. Confirm?'
+ }).then(function () {
+ $http.delete('/sys/permissionPartner/modules/' + mod.module_name + '.end').then(function () {
+ $state.reload();
+ }, function (resp) {
+ commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'})
+ })
+ });
+ }
+ }]
+ );
+ app.controller('partnerModuleEditCtrl', ['$scope', '$http', 'module', function ($scope, $http, module) {
+ $scope.module = angular.copy(module);
+ $scope.nameEditable = !module.module_name;
+ $scope.save = function () {
+ $scope.errmsg = null;
+ $http.put('/sys/permissionPartner/modules/' + $scope.module.module_name + '.end', $scope.module).then(function () {
+ $scope.$close();
+ }, function (resp) {
+ $scope.errmsg = resp.data.message;
+ })
+ };
+ }]);
+ app.controller('partnerModuleNewCtrl', ['$scope', '$http', 'module','moduleall','commonDialog', function ($scope, $http, module,moduleall,commonDialog) {
+
+
+
+ $scope.module = angular.copy(module);
+ $scope.nameEditable = !module.module_name;
+ $scope.module.initialize = true;
+ $scope.save = function () {
+ var hasOne =0;
+ $scope.errmsg = null;
+ angular.forEach(moduleall,function (data) {
+ if ($scope.module.module_name == data.module_name) {
+ commonDialog.alert({title: 'Error', content: "Module Has Exists", type: 'error'})
+ hasOne=1
+ return hasOne;
+ }
+ })
+ if (hasOne != 1) {
+ $http.put('/sys/permissionPartner/modules/' + $scope.module.module_name + '.end', $scope.module).then(function () {
+ $scope.$close();
+ }, function (resp) {
+ $scope.errmsg = resp.data.message;
+ })
+ }
+ };
+ }]);
+
return app;
});
\ No newline at end of file
diff --git a/src/main/ui/static/config/sysconfigs/templates/PartnerFunc_info_edit.html b/src/main/ui/static/config/sysconfigs/templates/PartnerFunc_info_edit.html
new file mode 100644
index 000000000..3e2bed66a
--- /dev/null
+++ b/src/main/ui/static/config/sysconfigs/templates/PartnerFunc_info_edit.html
@@ -0,0 +1,20 @@
+
+
+
+
+ Name
+
+
+
+ Remark
+
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/sysconfigs/templates/permissionPartner_authorize_dialog.html b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_authorize_dialog.html
new file mode 100644
index 000000000..e4c416325
--- /dev/null
+++ b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_authorize_dialog.html
@@ -0,0 +1,16 @@
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/sysconfigs/templates/permissionPartner_choose_module.html b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_choose_module.html
new file mode 100644
index 000000000..764674b89
--- /dev/null
+++ b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_choose_module.html
@@ -0,0 +1,16 @@
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/sysconfigs/templates/permissionPartner_config.html b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_config.html
new file mode 100644
index 000000000..ef27e21b9
--- /dev/null
+++ b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_config.html
@@ -0,0 +1,38 @@
+
+
diff --git a/src/main/ui/static/config/sysconfigs/templates/permissionPartner_functions.html b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_functions.html
new file mode 100644
index 000000000..4616a92f8
--- /dev/null
+++ b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_functions.html
@@ -0,0 +1,43 @@
+
+
+
+ Synchronize Code
+
+
+
+
+
+
Functions With No Modules
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/sysconfigs/templates/permissionPartner_module_dialog.html b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_module_dialog.html
new file mode 100644
index 000000000..892cd3ca7
--- /dev/null
+++ b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_module_dialog.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+ Js Module
+
+
+
+ Js Path
+
+
+
+ Remark
+
+
+
+ 是否开放
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/sysconfigs/templates/permissionPartner_modules.html b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_modules.html
new file mode 100644
index 000000000..bb61be954
--- /dev/null
+++ b/src/main/ui/static/config/sysconfigs/templates/permissionPartner_modules.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+ Module ID
+ Module Name
+ Js Module
+ Remark
+ Operation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/sysconfigs/templates/sysconfig.html b/src/main/ui/static/config/sysconfigs/templates/sysconfig.html
index ecfe43b97..4a8705ecd 100644
--- a/src/main/ui/static/config/sysconfigs/templates/sysconfig.html
+++ b/src/main/ui/static/config/sysconfigs/templates/sysconfig.html
@@ -25,6 +25,11 @@
Mail Subscriptions
+
+
+ Partner Permission Config
+
+
diff --git a/src/main/resources/templates/activity/encourage_money/my.html b/src/main/resources/templates/activity/encourage_money/my.html
index 6d15bf1db..a5b4f9cf4 100644
--- a/src/main/resources/templates/activity/encourage_money/my.html
+++ b/src/main/resources/templates/activity/encourage_money/my.html
@@ -1,5 +1,5 @@
-
+