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 @@ + + + + + + + + \ 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 + \ 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 + \ 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 @@ + + \ 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 - 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}) + + + + + + 0 + ]]> + + + \ 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 + + + + \ 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 @@ 鼓励金仅在活动期间有效,活动结束鼓励金自动清零。 - - 查看活动商家 - + + +
本活动的最终解释权归RoyalPay所有
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 @@ - + @@ -16,11 +16,14 @@ +
活动期间任意消费满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%;"/> - +
+
+
+
+
+
+

Chairty Ranking

+
+
+
+
+

到目前为止交易总金额排名(总额:{{totalAmount}}) + (总公益额:{{totalChairty}}) +

+
+ + + + + + + + + + + + + + + + + + + +
Partner NameAmount订单量捐款额
+
+ +
+
Total Records:{{total_ranking_pagination.totalCount}};Total Pages:{{total_ranking_pagination.totalPages}}
+
+
+
+

{{event_date}} 商户半边天公益活动总排名 (选择上图相应的日期获取当日排名)当日总额:{{cashBack_total_daily}}

+
+ + + + + + + + + + + + + + + +
Partner NameAmount捐款额
+
+ +
+
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 @@ +
+

半边天公益活动

+ +
+
+
+
+ +
+
+
+ + + + + + 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 @@ + \ 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 @@
-
BD Manager Commission
+
Manager Commission
@@ -152,18 +157,44 @@ -->
-
Director Commission
-
-
-
- Transaction Amount: -
-
- Total Commission: -
+
Sydney GM Commission
+
+
+
+ Transaction Amount: +
+
+ Total Commission:
+
+
+
NJ Department Commission
+
+
+
+ Transaction Amount: +
+
+ Total Commission: +
+
+
+
+
+
COO 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 @@
- - - +
+
+
+
+ +
+ + + + +
+
+
+ +
@@ -36,15 +52,15 @@
@@ -59,49 +75,48 @@
- - - - - + + + + - - - - - - - - - - + + + + + + + - + - - + - + 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+'%'">
BD Level费率费率Junior BDIntermediate BDSenior BDKPI完成度Junior BDIntermediate BDSenior BD
商户开通时长1-3个月4-6个月>=7个月1-3个月4-6个月>=7个月1-3个月4-6个月>=7个月费率0.6-0.790.8-2.00.6-0.790.8-2.00.6-0.790.8-2.0

补充说明

    -
  • 商户费率变更,提成比随之变更
  • -
  • 商户开通时长从商户开通时间起算
  • -
  • 后台系统自主申请商户,提成按照前三个月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 RateKPI完成度 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 @@ +
+

Company test user

+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+
+
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 @@ + + + \ 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 @@ +
+

Permission Config

+ +
+
+ +
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 @@ +
+
+ +
+
+ +
+
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 @@ + + + \ 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 IDModule NameJs ModuleRemarkOperation
+ + +
+
\ 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 + +