42 Commits
ys ... dev

Author SHA1 Message Date
deng
aae4ef8b48 扫码王业务代码 2023-05-29 11:57:03 +08:00
hankaikai
790920f13e "拉卡拉进件支付代码" 2023-05-23 12:55:26 +08:00
hankaikai
52650b7ae0 "设备规格修改" 2023-05-23 12:50:46 +08:00
hankaikai
c56357adc0 "设备规格修改" 2023-05-23 12:48:55 +08:00
hankaikai
085297700a "拉卡拉修改" 2023-05-23 12:47:17 +08:00
hankaikai
7d2f7b2d80 "设备规格修改" 2023-05-23 12:45:52 +08:00
hankaikai
a344d0a9df "audit" 2023-05-23 12:42:41 +08:00
hankaikai
374396284d Merge remote-tracking branch 'origin/master' 2023-05-23 09:39:29 +08:00
liuyingfang
01335276c7 后台协议添加,快递鸟相关常数,正式服务器相关参数改动,快递鸟相关接口,苹果相关cid配置,改变提示,登录接口改为post请求,微信跳转连接 2023-05-22 16:34:08 +08:00
liuyingfang
329aafb487 IOS端公众号app相关,更改401错误码message,更改getAccessToken方法,银盛部分相关,四要素新增错误码 2023-05-17 09:18:16 +08:00
hankaikai
a1b23f7104 "设备规格修改" 2023-05-09 10:27:15 +08:00
liuyingfang
1c35150b8a 放开部分接口,测试服改回测试数据库 2023-05-08 18:16:04 +08:00
liuyingfang
5ddcf3b62e 更改错误 2023-05-08 11:09:28 +08:00
liuyingfang
4a5bc0dd25 收银呗改为快银收银,部分调整 2023-05-08 11:00:47 +08:00
liuyingfang
f8a583063f VIP数据同步,部分调整 2023-05-05 18:25:57 +08:00
liuyingfang
87b056b47f 银盛以及部分逻辑 2023-04-27 18:39:50 +08:00
liuyingfang
b5174dce3d 后台主页逻辑加规则,账单详情改变接口传参方式,vip同步小程序,后台营业执照日期格式,银盛回调暂时在测试服上 2023-04-25 16:36:31 +08:00
zhujunshuai
69eea7ab5f 退款更改 2023-04-24 14:47:28 +08:00
zhujunshuai
3e7655cd96 Merge branch 'master' of gitee.com:super-shopkeeper/chaozhanggui 2023-04-24 10:55:47 +08:00
zhujunshuai
c095746fba 退款功能增加 2023-04-24 10:55:31 +08:00
zhujunshuai
4fd5d1dbaa 退款功能增加 2023-04-24 10:55:06 +08:00
liuyingfang
0b76bc417d 修改部分,微信模板消息会员费率变动 2023-04-21 15:03:24 +08:00
liuyingfang
6af4f70998 修改部分,微信推送事件 2023-04-21 13:50:12 +08:00
liuyingfang
082896aabc 修改部分,微信推送事件,lkl的部分配置 2023-04-20 15:29:59 +08:00
zhujunshuai
73fdf1b517 update 2023-04-19 16:53:47 +08:00
zhujunshuai
263b6b9849 update 2023-04-19 16:53:06 +08:00
zhujunshuai
31e93abce9 更改推送 2023-04-19 15:21:41 +08:00
zhujunshuai
9701fdf0b3 update 2023-04-19 15:20:08 +08:00
zhujunshuai
234842cd9d Merge branch 'master' of gitee.com:super-shopkeeper/chaozhanggui 2023-04-18 11:00:08 +08:00
zhujunshuai
89c2147c65 Merge branch 'master' of gitee.com:super-shopkeeper/chaozhanggui 2023-04-18 10:59:39 +08:00
liuyingfang
aa31ef186d 修改部分 2023-04-18 10:59:35 +08:00
zhujunshuai
7e96155e8d 设备商城支付开发 2023-04-18 10:59:24 +08:00
liuyingfang
9770e1f72a 拦截器拦截emoji 2023-04-14 15:49:21 +08:00
liuyingfang
4446877297 Merge branch 'master' of https://gitee.com/super-shopkeeper/chaozhanggui 2023-04-14 13:56:41 +08:00
liuyingfang
c9df5137cb 与小程序联调 2023-04-14 13:56:28 +08:00
zhujunshuai
c14ab93262 登录增加同步充值服务功能 2023-04-14 13:55:44 +08:00
zhujunshuai
59fd9ee9f5 update 2023-04-14 11:31:04 +08:00
zhujunshuai
a87f114e5b 增加登录同步到充值业务功能 2023-04-14 11:29:40 +08:00
liuyingfang
6491ed9c7f pos缺失VO 2023-04-13 09:29:49 +08:00
zhujunshuai
17ec8176fc Merge branch 'master' of gitee.com:super-shopkeeper/chaozhanggui 2023-04-12 14:05:07 +08:00
zhujunshuai
6eac88b2c3 更改地址 2023-04-12 14:04:53 +08:00
liuyingfang
690f9a0e4f !1 pos以及银盛
Merge pull request !1 from liuyingfang/ys
2023-04-12 02:33:54 +00:00
153 changed files with 8795 additions and 667 deletions

View File

@@ -2,6 +2,7 @@ package cn.pluss.platform.configurer;
import cn.pluss.platform.configurer.extend.CurrentUserMethodArgumentResolver; import cn.pluss.platform.configurer.extend.CurrentUserMethodArgumentResolver;
import cn.pluss.platform.configurer.extend.FastJsonHttpMessageConverterEx; import cn.pluss.platform.configurer.extend.FastJsonHttpMessageConverterEx;
import cn.pluss.platform.interceptor.EmojiInterceptor;
import cn.pluss.platform.interceptor.RequestInfoInterceptor; import cn.pluss.platform.interceptor.RequestInfoInterceptor;
import cn.pluss.platform.interceptor.TokenRegistryInterceptor; import cn.pluss.platform.interceptor.TokenRegistryInterceptor;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@@ -69,9 +70,11 @@ public class WebConfigurer implements WebMvcConfigurer {
excludes.add("/Pictures/**"); excludes.add("/Pictures/**");
excludes.add("/druid/**"); excludes.add("/druid/**");
excludes.add("/callback/**"); excludes.add("/callback/**");
excludes.add("/membercallback/**");
registry.addInterceptor(new RequestInfoInterceptor()); registry.addInterceptor(new RequestInfoInterceptor());
registry.addInterceptor(tokenRegistryInterceptor()).excludePathPatterns(excludes); registry.addInterceptor(tokenRegistryInterceptor()).excludePathPatterns(excludes);
//registry.addInterceptor(emojiInterceptor()).excludePathPatterns(excludes);
} }
@Bean @Bean
@@ -88,4 +91,8 @@ public class WebConfigurer implements WebMvcConfigurer {
public FastJsonHttpMessageConverterEx fastJsonHttpMessageConverterEx() { public FastJsonHttpMessageConverterEx fastJsonHttpMessageConverterEx() {
return new FastJsonHttpMessageConverterEx(); return new FastJsonHttpMessageConverterEx();
} }
@Bean
public EmojiInterceptor emojiInterceptor() {
return new EmojiInterceptor();
}
} }

View File

@@ -7,8 +7,10 @@ import cn.pluss.platform.activityRecommend.ActivityRecommendService;
import cn.pluss.platform.api.PageInfo; import cn.pluss.platform.api.PageInfo;
import cn.pluss.platform.api.Result; import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.constants.Constant;
import cn.pluss.platform.constants.ProjectConstant; import cn.pluss.platform.constants.ProjectConstant;
import cn.pluss.platform.entity.*; import cn.pluss.platform.entity.*;
import cn.pluss.platform.merchant.MerchantBaseInfoService;
import cn.pluss.platform.merchantStore.MerchantStoreService; import cn.pluss.platform.merchantStore.MerchantStoreService;
import cn.pluss.platform.util.EmojiUtil; import cn.pluss.platform.util.EmojiUtil;
import cn.pluss.platform.util.StringUtil; import cn.pluss.platform.util.StringUtil;
@@ -20,10 +22,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.List; import static cn.pluss.platform.controller.ActivityRechargeController.synchronous;
import java.util.Map;
/** /**
* @author DJH * @author DJH
@@ -47,6 +48,8 @@ public class ActivityActivateController {
@Resource @Resource
private MerchantStoreService merchantStoreService; private MerchantStoreService merchantStoreService;
@Resource
private MerchantBaseInfoService merchantBaseInfoService;
@GetMapping @GetMapping
@ApiOperation(value = "获取全部", notes = "返回分页过后的数据", httpMethod = "GET") @ApiOperation(value = "获取全部", notes = "返回分页过后的数据", httpMethod = "GET")
@@ -80,7 +83,9 @@ public class ActivityActivateController {
@PostMapping @PostMapping
@ApiOperation(value = "添加数据", notes = "添加新的数据", httpMethod = "POST") @ApiOperation(value = "添加数据", notes = "添加新的数据", httpMethod = "POST")
public Result<Object> add(@RequestBody ActivityActivate activityActivate) { public Result<Object> add(@RequestBody ActivityActivate activityActivate) {
if (activityActivate == null || activityActivate.getUserId() == null) {
return ResultGenerator.genFailResult("参数错误!");
}
ActivityActivate activity = new ActivityActivate(); ActivityActivate activity = new ActivityActivate();
activity.setMerchantCode(activityActivate.getMerchantCode()); activity.setMerchantCode(activityActivate.getMerchantCode());
activity.setStoreId(activityActivate.getStoreId()); activity.setStoreId(activityActivate.getStoreId());
@@ -98,6 +103,14 @@ public class ActivityActivateController {
} }
activityActivate.setCreateDt(new Date()); activityActivate.setCreateDt(new Date());
activityActivateService.saveActivityActivate(activityActivate); activityActivateService.saveActivityActivate(activityActivate);
//同步到小程序
MerchantBaseInfo merchantBaseInfo = new MerchantBaseInfo();
MerchantBaseInfo queryMerchantBaseInfo = new MerchantBaseInfo();
queryMerchantBaseInfo.setUserId((String.valueOf(activityActivate.getUserId())));
merchantBaseInfo = merchantBaseInfoService.queryMerchantBaseInfo(queryMerchantBaseInfo);
List<ActivityActivate> activityActivateList = new ArrayList<>();
activityActivateList.add(activityActivate);
synchronous(merchantBaseInfo, activityActivateList, Constant.MEMBER_ACTIVATION_ACTIVITY);
return ResultGenerator.genSuccessResult("添加成功!"); return ResultGenerator.genSuccessResult("添加成功!");
} }

View File

@@ -4,8 +4,11 @@ import cn.pluss.platform.activityConsumReturn.ActivityConsumReturnService;
import cn.pluss.platform.api.PageInfo; import cn.pluss.platform.api.PageInfo;
import cn.pluss.platform.api.Result; import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.constants.Constant;
import cn.pluss.platform.constants.ProjectConstant; import cn.pluss.platform.constants.ProjectConstant;
import cn.pluss.platform.entity.ActivityConsumReturn; import cn.pluss.platform.entity.ActivityConsumReturn;
import cn.pluss.platform.entity.MerchantBaseInfo;
import cn.pluss.platform.merchant.MerchantBaseInfoService;
import cn.pluss.platform.util.StringUtil; import cn.pluss.platform.util.StringUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
@@ -13,7 +16,10 @@ import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date; import java.util.Date;
@@ -21,6 +27,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static cn.pluss.platform.controller.ActivityRechargeController.synchronous;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/activityConsumReturn") @RequestMapping("/activityConsumReturn")
@@ -30,6 +38,8 @@ public class ActivityConsumReturnController {
@Resource @Resource
private ActivityConsumReturnService activityConsumReturnService; private ActivityConsumReturnService activityConsumReturnService;
@Resource
private MerchantBaseInfoService merchantBaseInfoService;
@GetMapping @GetMapping
@ApiOperation(value = "获取全部", notes = "返回分页过后的数据", httpMethod = "GET") @ApiOperation(value = "获取全部", notes = "返回分页过后的数据", httpMethod = "GET")
@@ -59,7 +69,7 @@ public class ActivityConsumReturnController {
@PostMapping @PostMapping
@ApiOperation(value = "添加数据", notes = "添加新的数据", httpMethod = "POST") @ApiOperation(value = "添加数据", notes = "添加新的数据", httpMethod = "POST")
public Result<Object> add(@RequestBody List<ActivityConsumReturn> activityConsumReturn) { public Result<Object> add(@RequestBody List<ActivityConsumReturn> activityConsumReturn) {
if (activityConsumReturn == null) { if (activityConsumReturn == null || activityConsumReturn.get(0).getUserId() == null) {
return ResultGenerator.genFailResult("参数错误!"); return ResultGenerator.genFailResult("参数错误!");
} }
if (activityConsumReturn.size() > 0) { if (activityConsumReturn.size() > 0) {
@@ -76,6 +86,12 @@ public class ActivityConsumReturnController {
activityConsumReturn2.setCreateDt(new Date()); activityConsumReturn2.setCreateDt(new Date());
activityConsumReturnService.saveActivityConsumReturn(activityConsumReturn2); activityConsumReturnService.saveActivityConsumReturn(activityConsumReturn2);
} }
//同步活动到小程序
MerchantBaseInfo merchantBaseInfo = new MerchantBaseInfo();
MerchantBaseInfo queryMerchantBaseInfo = new MerchantBaseInfo();
queryMerchantBaseInfo.setUserId((String.valueOf(activityConsumReturn.get(0).getUserId())));
merchantBaseInfo = merchantBaseInfoService.queryMerchantBaseInfo(queryMerchantBaseInfo);
synchronous(merchantBaseInfo, activityConsumReturn, Constant.MEMBER_CONSUME_ACTIVITY);
return ResultGenerator.genSuccessResult(); return ResultGenerator.genSuccessResult();
} }

View File

@@ -4,6 +4,7 @@ import cn.pluss.platform.activityRecharge.ActivityRechargeService;
import cn.pluss.platform.api.PageInfo; import cn.pluss.platform.api.PageInfo;
import cn.pluss.platform.api.Result; import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.constants.Constant;
import cn.pluss.platform.constants.ProjectConstant; import cn.pluss.platform.constants.ProjectConstant;
import cn.pluss.platform.entity.ActivityRecharge; import cn.pluss.platform.entity.ActivityRecharge;
import cn.pluss.platform.entity.MerchantBaseInfo; import cn.pluss.platform.entity.MerchantBaseInfo;
@@ -18,12 +19,13 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.util.Date; import java.util.*;
import java.util.HashMap; import java.util.stream.Collectors;
import java.util.List;
import java.util.Map;
/** /**
* @author DJH * @author DJH
@@ -96,6 +98,8 @@ public class ActivityRechargeController {
activityRecharge2.setStoreName(merchantStore.getStoreName()); activityRecharge2.setStoreName(merchantStore.getStoreName());
activityRechargeService.saveActivityRecharge(activityRecharge2); activityRechargeService.saveActivityRecharge(activityRecharge2);
} }
//同步活动到小程序
synchronous(merchantBaseInfo, activityRechargeList, Constant.MEMBER_RECHARGE_ACTIVITY);
} }
return ResultGenerator.genSuccessResult(activityRechargeList); return ResultGenerator.genSuccessResult(activityRechargeList);
} }
@@ -131,4 +135,21 @@ public class ActivityRechargeController {
return ResultGenerator.genSuccessResult(activityRecharge); return ResultGenerator.genSuccessResult(activityRecharge);
} }
/**
* 同步活动到小程序
* @param merchantBaseInfo
* @param list
*/
public static void synchronous(MerchantBaseInfo merchantBaseInfo, List<?> list, String URL){
RestTemplate restTemplate = new RestTemplate();
String url = URL;
MultiValueMap<String, Object> postMap = new LinkedMultiValueMap();
Long id = merchantBaseInfo.getId();
postMap.add("list", list);
postMap.add("syb_m_id", id);
System.out.println("postMap"+postMap);
String result = restTemplate.postForObject(url, postMap, String.class);
log.info("返回",result);
}
} }

View File

@@ -253,6 +253,40 @@ public class MerchantBaseInfoController {
return ResultGenerator.genFailResult("系统繁忙,请稍后再试"); return ResultGenerator.genFailResult("系统繁忙,请稍后再试");
} }
} }
@GetMapping("/queryMerchantActivityApplet")
@ApiOperation(value = "查询商家活动", notes = "查询商家活动", httpMethod = "POST")
public Result<?> merchantActivityApplet(@RequestParam Integer id) {
Map<String, Object> result = new HashMap<String, Object>(16);
try {
if(id == null){
return ResultGenerator.genFailResult("id为空");
}
MerchantBaseInfo merchantBaseInfo;
MerchantBaseInfo queryMerchantBaseInfo = new MerchantBaseInfo();
queryMerchantBaseInfo.setId(id.longValue());
merchantBaseInfo = merchantBaseInfoService.queryMerchantBaseInfo(queryMerchantBaseInfo);
ActivityActivate activityActivate = new ActivityActivate();
activityActivate.setMerchantCode(merchantBaseInfo.getMerchantCode());
List<ActivityActivate> queryActivityActivateList = activityActivateService
.queryActivityActivateList(activityActivate);
result.put("activityActivateList", queryActivityActivateList);
ActivityRecharge activityRecharge = new ActivityRecharge();
activityRecharge.setMerchantCode(merchantBaseInfo.getMerchantCode());
List<ActivityRecharge> queryActivityRechargeList = activityRechargeService
.queryActivityRechargeList(activityRecharge);
result.put("activityRechargeList", queryActivityRechargeList);
ActivityConsumReturn activityConsumReturn = new ActivityConsumReturn();
activityConsumReturn.setMerchantCode(merchantBaseInfo.getMerchantCode());
List<ActivityConsumReturn> queryActivityConsumReturnList = activityConsumReturnService
.queryActivityConsumReturnList(activityConsumReturn);
result.put("activityConsumReturnList", queryActivityConsumReturnList);
return ResultGenerator.genSuccessResult(result);
} catch (Exception e) {
e.printStackTrace();
return ResultGenerator.genFailResult("系统繁忙,请稍后再试");
}
}
@PostMapping("/manageMerchantManageList") @PostMapping("/manageMerchantManageList")
@ApiOperation(value = "多商户管理列表", notes = "多商户管理列表", httpMethod = "POST") @ApiOperation(value = "多商户管理列表", notes = "多商户管理列表", httpMethod = "POST")

View File

@@ -5,10 +5,7 @@ import cn.pluss.platform.api.PageInfo;
import cn.pluss.platform.api.Result; import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.constants.ProjectConstant; import cn.pluss.platform.constants.ProjectConstant;
import cn.pluss.platform.entity.ActivityActivate; import cn.pluss.platform.entity.*;
import cn.pluss.platform.entity.MerchantMenber;
import cn.pluss.platform.entity.MerchantMenberRecharge;
import cn.pluss.platform.entity.UserApp;
import cn.pluss.platform.memberOrder.MemberOrderService; import cn.pluss.platform.memberOrder.MemberOrderService;
import cn.pluss.platform.merchant.MerchantBaseInfoService; import cn.pluss.platform.merchant.MerchantBaseInfoService;
import cn.pluss.platform.merchantMenber.MerchantMenberService; import cn.pluss.platform.merchantMenber.MerchantMenberService;
@@ -111,7 +108,69 @@ public class MerchantMenberController {
merchantMenber.getPage().longValue(), merchantMenber.getSize().longValue(), merchantMenberList); merchantMenber.getPage().longValue(), merchantMenber.getSize().longValue(), merchantMenberList);
return ResultGenerator.genSuccessResult(pager); return ResultGenerator.genSuccessResult(pager);
} }
@PostMapping("/info")
@ApiOperation(tags = {"页面-会员选择", "小程序"}, value = "获取全部", notes = "返回分页过后的数据", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "MerchantMenber", value = "查询对象的实例信息", paramType = "body", dataType = "MerchantMenber"),})
public Result<PageInfo<MerchantMenber>> listInfo(@RequestBody MerchantMenber merchantMenber) {
if (merchantMenber.getId() == null) {
return ResultGenerator.genFailResult("无商家编码!");
}
if (merchantMenber.getSize() == null || merchantMenber.getSize() == 0) {
merchantMenber.setSize(ProjectConstant.PAGE_SIZE);
}
if (merchantMenber.getPage() == null || merchantMenber.getPage() == 0) {
merchantMenber.setPage(1);
}
//通过商户id换取商户code
MerchantBaseInfo merchantBaseInfo = new MerchantBaseInfo();
MerchantBaseInfo queryMerchantBaseInfo = new MerchantBaseInfo();
queryMerchantBaseInfo.setId(Long.valueOf(merchantMenber.getId()));
merchantBaseInfo = merchantBaseInfoService.queryMerchantBaseInfo(queryMerchantBaseInfo);
String merchantCode = merchantBaseInfo.getMerchantCode();
Map<String, Object> map = new HashMap<>();
map.put("pageSize", merchantMenber.getSize());
map.put("offset", (merchantMenber.getPage() - 1) * merchantMenber.getSize());
map.put("merchantCode",merchantCode);
map.put("memberCode", merchantMenber.getMemberCode());
if (StringUtil.isNotEmpty(merchantMenber.getStoreId())) {
map.put("storeId", merchantMenber.getStoreId());
}
if (!StringUtil.isEmpty(merchantMenber.getPhone()) || !StringUtil.isEmpty(merchantMenber.getMemberName())) {
map.put("keyWord", "1");
}
//判断是否有检索条件
if (StringUtil.isNotEmpty(merchantMenber.getPhone())) {
map.put("phone", merchantMenber.getPhone());
}
if (StringUtil.isNotEmpty(merchantMenber.getNickName())) {
map.put("nickName", merchantMenber.getNickName());
}
List<MerchantMenber> merchantMenberList = merchantMenberService.queryMerchantMenberPage(map);
for (MerchantMenber m : merchantMenberList) {
Map<String, Object> orderMap = new HashMap<>();
orderMap.put("memberCode", m.getMemberCode());
orderMap.put("orderType", "0");
orderMap.put("orderStatus", "1");
Integer count = memberOrderService.queryMemberOrderPageCount(orderMap);
m.setOrderNumber(count + "");
if (StringUtils.isNotBlank(m.getAppOpenId())) {
m.setOpenid(m.getAppOpenId());
}
}
Integer count = merchantMenberService.queryMerchantMenberPageCount(map);
for (MerchantMenber menber : merchantMenberList) {
menber.setNickName(EmojiUtil.emojiRecovery2(menber.getNickName()));
}
// 返回参数
PageInfo<MerchantMenber> pager = new PageInfo<>(count.longValue(), (long)StringUtil.getPageCount(count, merchantMenber.getSize()),
merchantMenber.getPage().longValue(), merchantMenber.getSize().longValue(), merchantMenberList);
return ResultGenerator.genSuccessResult(pager);
}
@GetMapping("/queryMemberIsExist") @GetMapping("/queryMemberIsExist")
@ApiOperation(tags = {"会员开卡"}, value = "获取关注公众号二维码", notes = "获取关注公众号二维码", httpMethod = "POST") @ApiOperation(tags = {"会员开卡"}, value = "获取关注公众号二维码", notes = "获取关注公众号二维码", httpMethod = "POST")
@ApiImplicitParams({ @ApiImplicitParams({

View File

@@ -46,6 +46,7 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@@ -388,7 +389,7 @@ public class MerchantOrderController {
@ApiOperation(value = "会员充值", notes = "APP扫码-会员充值", httpMethod = "GET") @ApiOperation(value = "会员充值", notes = "APP扫码-会员充值", httpMethod = "GET")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "MemberRechargeDTO", value = "MemberRechargeDTO", paramType = "MemberRechargeDTO", dataType = "MemberRechargeDTO", required = true)}) @ApiImplicitParam(name = "MemberRechargeDTO", value = "MemberRechargeDTO", paramType = "MemberRechargeDTO", dataType = "MemberRechargeDTO", required = true)})
public Result<Map<String, Object>> memberRecharge(@RequestBody MemberRechargeDTO memberRechargeDTO) { public Result<Map<String, Object>> memberRecharge(@RequestBody MemberRechargeDTO memberRechargeDTO, HttpServletRequest request) {
try { try {
UserApp userApp = userAppService.queryUserAppByToken(); UserApp userApp = userAppService.queryUserAppByToken();
@@ -398,7 +399,7 @@ public class MerchantOrderController {
memberRechargeDTO.setMerchantCode(userApp.getMerchantCode()); memberRechargeDTO.setMerchantCode(userApp.getMerchantCode());
memberRechargeDTO.setUserId(String.valueOf(userApp.getUserId())); memberRechargeDTO.setUserId(String.valueOf(userApp.getUserId()));
memberRechargeDTO.setUserName(userApp.getUserName()); memberRechargeDTO.setUserName(userApp.getUserName());
return merchantOrderService.toMemberRecharge(memberRechargeDTO); return merchantOrderService.toMemberRecharge(memberRechargeDTO, request);
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
MsgException.throwException(e.getMessage()); MsgException.throwException(e.getMessage());
@@ -417,7 +418,7 @@ public class MerchantOrderController {
@ApiOperation(tags = {"页面-收款"}, value = "扫码支付", notes = "扫码支付", httpMethod = "POST") @ApiOperation(tags = {"页面-收款"}, value = "扫码支付", notes = "扫码支付", httpMethod = "POST")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "MerchantOrderVo", value = "扫码支付需要传递的参数实例", paramType = "body", dataType = "MerchantOrderVo", required = true)}) @ApiImplicitParam(name = "MerchantOrderVo", value = "扫码支付需要传递的参数实例", paramType = "body", dataType = "MerchantOrderVo", required = true)})
public Result<Object> scanPay(@RequestBody MerChantOrderDTO merchantOrderDTO) { public Result<Object> scanPay(@RequestBody MerChantOrderDTO merchantOrderDTO, HttpServletRequest req) {
UserApp tokenUa = userAppService.queryUserAppByToken(); UserApp tokenUa = userAppService.queryUserAppByToken();
merchantOrderDTO.setMerchantCode(tokenUa.getMerchantCode()); merchantOrderDTO.setMerchantCode(tokenUa.getMerchantCode());
//校验金额 //校验金额
@@ -425,7 +426,7 @@ public class MerchantOrderController {
MsgException.throwException("金额异常"); MsgException.throwException("金额异常");
} }
try { try {
return merchantOrderService.toActivePay(merchantOrderDTO); return merchantOrderService.toActivePay(merchantOrderDTO, req);
} catch (Exception e){ } catch (Exception e){
e.printStackTrace(); e.printStackTrace();
return ResultGenerator.genFailResult(e.getMessage()); return ResultGenerator.genFailResult(e.getMessage());
@@ -437,7 +438,7 @@ public class MerchantOrderController {
* @return * @return
*/ */
@PostMapping("/posScanPay") @PostMapping("/posScanPay")
public Result<Object> posScanPay(@RequestBody MerChantOrderDTO merchantOrderDTO) { public Result<Object> posScanPay(@RequestBody MerChantOrderDTO merchantOrderDTO, HttpServletRequest request) {
//首先验签 //首先验签
verify(merchantOrderDTO.getTimestamp(), merchantOrderDTO.getRequestId(), merchantOrderDTO.getAppId(), merchantOrderDTO.getToken()); verify(merchantOrderDTO.getTimestamp(), merchantOrderDTO.getRequestId(), merchantOrderDTO.getAppId(), merchantOrderDTO.getToken());
//通过后查询商户信息 //通过后查询商户信息
@@ -451,7 +452,7 @@ public class MerchantOrderController {
} }
//进行支付操作 //进行支付操作
try { try {
Result<Object> activePay = merchantOrderService.toActivePay(merchantOrderDTO); Result<Object> activePay = merchantOrderService.toActivePay(merchantOrderDTO, request);
String result = activePay.toString(); String result = activePay.toString();
JSONObject jsonData = JSONObject.parseObject(result); JSONObject jsonData = JSONObject.parseObject(result);
Object orderNumber = jsonData.getJSONObject("data").get("orderNumber"); Object orderNumber = jsonData.getJSONObject("data").get("orderNumber");
@@ -1296,8 +1297,8 @@ public class MerchantOrderController {
merchantIncomeService.saveMerchantIncome(merchantIncome); merchantIncomeService.saveMerchantIncome(merchantIncome);
} }
@GetMapping("/couponList/{orderNumber}") @GetMapping("/couponList")
public Result<List<Map<String, Object>>> getCouponListByOrderNumber(@PathVariable("orderNumber") String orderNumber) { public Result<List<Map<String, Object>>> getCouponListByOrderNumber(String orderNumber) {
List<Map<String, Object>> couponList = merchantOrderService.getCouponList(orderNumber); List<Map<String, Object>> couponList = merchantOrderService.getCouponList(orderNumber);
return ResultGenerator.genSuccessResult(couponList); return ResultGenerator.genSuccessResult(couponList);
} }

View File

@@ -6,7 +6,8 @@ import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.entitiy.PushCidAlias; import cn.pluss.platform.entitiy.PushCidAlias;
import cn.pluss.platform.entity.UserApp; import cn.pluss.platform.entity.UserApp;
import cn.pluss.platform.userApp.UserAppService; import cn.pluss.platform.userApp.UserAppService;
import cn.pluss.platform.util.MobV2PushUtil; import cn.pluss.platform.util.MobV2PushUtilAndroid;
import cn.pluss.platform.util.MobV2PushUtilIOS;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Setter; import lombok.Setter;
@@ -20,9 +21,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.*; import java.util.*;
@@ -68,15 +69,31 @@ public class PushController {
* @throws NoSuchAlgorithmException * @throws NoSuchAlgorithmException
*/ */
@PostMapping("/bindalias") @PostMapping("/bindalias")
public Result<Object> bindAlias(@RequestBody Map<String, Object> param) throws IOException, NoSuchAlgorithmException { public Result<Object> bindAlias(@RequestBody Map<String, Object> param, HttpServletRequest httpServletRequest) throws IOException, NoSuchAlgorithmException {
UserApp userApp = userAppService.queryUserAppByToken(); UserApp userApp = userAppService.queryUserAppByToken();
String uid = userApp.getUserId().toString(); String uid = userApp.getUserId().toString();
String cid = param.get("cid").toString(); String cid = param.get("cid").toString();
if (cid.isEmpty()){
return ResultGenerator.genSuccessResult();
}
MobV2PushUtil mobV2PushUtil = new MobV2PushUtil(); String deviceType = httpServletRequest.getHeader("type");
String token = mobV2PushUtil.getToken();
String token = "";
String aliasUrl = "";
if (deviceType.equals("1")) {
MobV2PushUtilAndroid mobV2PushUtil = new MobV2PushUtilAndroid();
token = mobV2PushUtil.getToken();
aliasUrl = "https://restapi.getui.com/v2/" + MobV2PushUtilAndroid.appId + "/user/alias";
} else if (deviceType.equals("2")) {
MobV2PushUtilIOS mobV2PushUtilIOS = new MobV2PushUtilIOS();
token = mobV2PushUtilIOS.getToken();
aliasUrl = "https://restapi.getui.com/v2/" + MobV2PushUtilIOS.appId + "/user/alias";
}
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
@@ -99,8 +116,7 @@ public class PushController {
// 设置为UTF8编码 // 设置为UTF8编码
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
String tokenInfo = restTemplate.postForObject( String tokenInfo = restTemplate.postForObject(aliasUrl, httpEntity,
"https://restapi.getui.com/v2/" + MobV2PushUtil.appId + "/user/alias", httpEntity,
String.class); String.class);
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
@@ -122,15 +138,31 @@ public class PushController {
* @throws NoSuchAlgorithmException * @throws NoSuchAlgorithmException
*/ */
@PostMapping("/unbindingAlias") @PostMapping("/unbindingAlias")
public Result<Object> unbindingAlias(@RequestBody Map<String, Object> param) throws IOException, NoSuchAlgorithmException { public Result<Object> unbindingAlias(@RequestBody Map<String, Object> param,HttpServletRequest httpServletRequest) throws IOException, NoSuchAlgorithmException {
UserApp userApp = userAppService.queryUserAppByToken(); UserApp userApp = userAppService.queryUserAppByToken();
String uid = userApp.getUserId().toString(); String uid = userApp.getUserId().toString();
String cid = param.get("cid").toString(); String cid = param.get("cid").toString();
MobV2PushUtil mobV2PushUtil = new MobV2PushUtil(); if (cid.isEmpty()){
String token = mobV2PushUtil.getToken(); return ResultGenerator.genSuccessResult();
}
String deviceType = httpServletRequest.getHeader("type");
String token = "";
String aliasUrl = "";
if (deviceType.equals("1")) {
MobV2PushUtilAndroid mobV2PushUtil = new MobV2PushUtilAndroid();
token = mobV2PushUtil.getToken();
aliasUrl = "https://restapi.getui.com/v2/" + MobV2PushUtilAndroid.appId + "/user/alias";
} else if (deviceType.equals("2")) {
MobV2PushUtilIOS mobV2PushUtilIOS = new MobV2PushUtilIOS();
token = mobV2PushUtilIOS.getToken();
aliasUrl = "https://restapi.getui.com/v2/" + MobV2PushUtilIOS.appId + "/user/alias";
}
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
@@ -155,7 +187,7 @@ public class PushController {
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
// delete, entity直接设为null即可 // delete, entity直接设为null即可
ResponseEntity<Map> resultEntity = restTemplate.exchange("https://restapi.getui.com/v2/" + MobV2PushUtil.appId + "/user/alias", ResponseEntity<Map> resultEntity = restTemplate.exchange(aliasUrl,
HttpMethod.DELETE, HttpMethod.DELETE,
httpEntity, httpEntity,
Map.class); Map.class);

View File

@@ -44,6 +44,7 @@ import java.math.RoundingMode;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.regex.Pattern;
import javax.validation.Valid; import javax.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
@@ -259,8 +260,14 @@ public class UserAppController {
} }
) )
public Result<Object> realNameAudit( public Result<Object> realNameAudit(
@RequestBody @Valid CertificationDTO certificationDTO @RequestBody @Valid CertificationDTO certificationDTO) {
) { if (Pattern.matches("^[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]$",
certificationDTO.getCertnum())){
System.out.println("身份证无误");
} else {
System.out.println("身份证有误");
return ResultGenerator.genFailResult("身份证号码错误");
}
try { try {
accountService.realNameAudit(certificationDTO); accountService.realNameAudit(certificationDTO);
return ResultGenerator.genSuccessResult(); return ResultGenerator.genSuccessResult();

View File

@@ -229,6 +229,17 @@ public class UserInfoController {
return ResultGenerator.genSuccessResult(); return ResultGenerator.genSuccessResult();
} }
/**
* 新版登录
* @param userInfo
* @return
*/
@PostMapping("/login")
public Result<Map<String, Object>> detail(@RequestBody UserInfo userInfo) {
Map<String, Object> login = userInfoNewService.login(userInfo.getLoginName(), userInfo.getPassword());
return ResultGenerator.genSuccessResult(login);
}
@GetMapping("/{loginName}/{password}") @GetMapping("/{loginName}/{password}")
@ApiOperation(tags = {"页面-登录", "页面-切换商户"}, value = "登录", notes = "登录接口", httpMethod = "GET") @ApiOperation(tags = {"页面-登录", "页面-切换商户"}, value = "登录", notes = "登录接口", httpMethod = "GET")
@ApiImplicitParams({ @ApiImplicitParams({
@@ -265,6 +276,19 @@ public class UserInfoController {
return ResultGenerator.genSuccessResult("保存安全密码成功", null); return ResultGenerator.genSuccessResult("保存安全密码成功", null);
} }
@PostMapping("/checkPayPassword")
public Result<Object> checkPayPassword(@RequestBody UserInfo userInfo){
if (userInfo.getId() == null){
return ResultGenerator.genFailResult("无ID");
}
UserInfo payPassword = userInfoNewService.queryUserInfo(userInfo);
if (payPassword.getPayPassword() == null){
return ResultGenerator.genSuccessResult("无支付密码","0");
}else {
return ResultGenerator.genSuccessResult("ok","1");
}
}
@PostMapping("/verifyPayPassword") @PostMapping("/verifyPayPassword")
public Result<Object> verifyPayPassword(@RequestBody Map<String, Object> param) { public Result<Object> verifyPayPassword(@RequestBody Map<String, Object> param) {
String payPassword = param.get("payPassword").toString(); String payPassword = param.get("payPassword").toString();

View File

@@ -0,0 +1,208 @@
package cn.pluss.platform.controller.access;
import cn.pluss.platform.access.AccessService;
import cn.pluss.platform.access.domain.CodeEnum;
import cn.pluss.platform.access.domain.ReqEntity;
import cn.pluss.platform.access.domain.RespEntity;
import cn.pluss.platform.access.exception.AccessException;
import cn.pluss.platform.access.service.AccessBizService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/access")
@RestController
public class AccessController {
@Autowired
private AccessService accessService;
@Autowired
private AccessBizService accessBizService;
@PostMapping("/storeInfoByDeviceNo")
public RespEntity machineStoreInfo(@RequestBody ReqEntity reqEntity) {
String requestId = reqEntity.getRequestId();
JSONObject reqData = reqEntity.initJSONData();
RespEntity result;
String deviceNo = reqData.getString("deviceNo");
if (deviceNo == null) {
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.PARAM_ERROR, null, requestId);
accessService.addSign(result);
return result;
}
Object bizResult = accessBizService.machineStoreInfo(deviceNo);
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.SUCCESS, bizResult, requestId);
accessService.addSign(result);
return result;
}
@PostMapping("/scanPay")
public RespEntity scanPay(@RequestBody ReqEntity reqEntity) {
String requestId = reqEntity.getRequestId();
JSONObject reqData = reqEntity.initJSONData();
RespEntity result;
String deviceNo = reqData.getString("deviceNo");
if (deviceNo == null) {
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.PARAM_ERROR, null, requestId);
accessService.addSign(result);
return result;
}
try {
Object bizResult = accessBizService.scanPay(reqData);
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.SUCCESS, bizResult, requestId);
accessService.addSign(result);
return result;
} catch (AccessException e) {
result = new RespEntity(reqEntity.getOrgId(), e.getCode(), null, requestId, e.getMessage());
accessService.addSign(result);
return result;
}
}
@PostMapping("/orderStatus")
public RespEntity orderStatus(@RequestBody ReqEntity reqEntity) {
String requestId = reqEntity.getRequestId();
JSONObject reqData = reqEntity.initJSONData();
RespEntity result;
String deviceNo = reqData.getString("deviceNo");
if (deviceNo == null) {
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.PARAM_ERROR, null, requestId);
accessService.addSign(result);
return result;
}
String orderNumber = reqData.getString("orderNumber");
String mercOrderNo = reqData.getString("mercOrderNo");
try {
Object bizResult = accessBizService.orderStatus(orderNumber, mercOrderNo);
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.SUCCESS, bizResult, requestId);
accessService.addSign(result);
return result;
} catch (AccessException e) {
result = new RespEntity(reqEntity.getOrgId(), e.getCode(), null, requestId, e.getMessage());
accessService.addSign(result);
return result;
}
}
@PostMapping("/orderRefund")
public RespEntity orderRefund(@RequestBody ReqEntity reqEntity) {
String requestId = reqEntity.getRequestId();
JSONObject reqData = reqEntity.initJSONData();
RespEntity result;
String deviceNo = reqData.getString("deviceNo");
if (deviceNo == null) {
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.PARAM_ERROR, null, requestId);
accessService.addSign(result);
return result;
}
try {
Object bizResult = accessBizService.refund(reqData);
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.SUCCESS, bizResult, requestId);
accessService.addSign(result);
return result;
} catch (AccessException e) {
result = new RespEntity(reqEntity.getOrgId(), e.getCode(), null, requestId, e.getMessage());
accessService.addSign(result);
return result;
}
}
@PostMapping("/orderRefundList")
public RespEntity orderRefundList(@RequestBody ReqEntity reqEntity) {
String requestId = reqEntity.getRequestId();
JSONObject reqData = reqEntity.initJSONData();
RespEntity result;
String deviceNo = reqData.getString("deviceNo");
if (deviceNo == null) {
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.PARAM_ERROR, null, requestId);
accessService.addSign(result);
return result;
}
try {
Object bizResult = accessBizService.refundList(reqData);
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.SUCCESS, bizResult, requestId);
accessService.addSign(result);
return result;
} catch (AccessException e) {
result = new RespEntity(reqEntity.getOrgId(), e.getCode(), null, requestId, e.getMessage());
accessService.addSign(result);
return result;
}
}
@PostMapping("/orderList")
public RespEntity orderList(@RequestBody ReqEntity reqEntity) {
String requestId = reqEntity.getRequestId();
JSONObject reqData = reqEntity.initJSONData();
RespEntity result;
String deviceNo = reqData.getString("deviceNo");
if (deviceNo == null) {
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.PARAM_ERROR, null, requestId);
accessService.addSign(result);
return result;
}
try {
Object bizResult = accessBizService.orderList(reqData);
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.SUCCESS, bizResult, requestId);
accessService.addSign(result);
return result;
} catch (AccessException e) {
result = new RespEntity(reqEntity.getOrgId(), e.getCode(), null, requestId, e.getMessage());
accessService.addSign(result);
return result;
}
}
@PostMapping("/dataAnalysis")
public RespEntity dataAnalysis(@RequestBody ReqEntity reqEntity) {
String requestId = reqEntity.getRequestId();
JSONObject reqData = reqEntity.initJSONData();
RespEntity result;
String deviceNo = reqData.getString("deviceNo");
if (deviceNo == null) {
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.PARAM_ERROR, null, requestId);
accessService.addSign(result);
return result;
}
try {
Object bizResult = accessBizService.dataAnalysis(reqData);
result = new RespEntity(reqEntity.getOrgId(), CodeEnum.SUCCESS, bizResult, requestId);
accessService.addSign(result);
return result;
} catch (AccessException e) {
result = new RespEntity(reqEntity.getOrgId(), e.getCode(), null, requestId, e.getMessage());
accessService.addSign(result);
return result;
}
}
}

View File

@@ -64,11 +64,11 @@ public class UserAddressController {
@RequestMapping(value = "/delete") @RequestMapping(value = "/delete")
@ApiOperation(tags = {"页面-设备管理-地址管理"}, value = "删除收货地址", notes = "删除收货地址", httpMethod = "GET") @ApiOperation(tags = {"页面-设备管理-地址管理"}, value = "删除收货地址", notes = "删除收货地址", httpMethod = "GET")
public Result<Object> delete(@RequestParam("ids[]") Long[] ids) { public Result<Object> delete(Integer id) {
if(ids == null || ids.length == 0){ if(id == null || id== 0){
return ResultGenerator.genSuccessResult("缺失ids参数",null); return ResultGenerator.genSuccessResult("缺失ids参数",null);
} }
userAddressService.removeByIds(Arrays.asList(ids)); userAddressService.removeByIds(Arrays.asList(id));
return ResultGenerator.genSuccessResult("删除成功",null); return ResultGenerator.genSuccessResult("删除成功",null);
} }

View File

@@ -1,15 +1,30 @@
package cn.pluss.platform.controller.merchant; package cn.pluss.platform.controller.merchant;
import cn.pluss.platform.channel.ys.impl.YSAuditServiceV3;
import cn.pluss.platform.entity.SubMerchantApplyOrder; import cn.pluss.platform.entity.SubMerchantApplyOrder;
import cn.pluss.platform.exception.MsgException; import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.mapper.SubMerchantApplyOrderMapper; import cn.pluss.platform.mapper.SubMerchantApplyOrderMapper;
import cn.pluss.platform.merchant.MerchantBaseInfoService;
import cn.pluss.platform.wx.WxCommonService;
import cn.pluss.platform.ys.impl.v20220527.ReqMethod;
import cn.pluss.platform.ys.impl.v20220527.YsServiceV3;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.utils.StringUtils; import com.aliyuncs.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import static cn.pluss.platform.util.WechatSignUtil.*;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -17,6 +32,15 @@ import java.io.IOException;
public class WxController { public class WxController {
private final SubMerchantApplyOrderMapper subMerchantApplyOrderMapper; private final SubMerchantApplyOrderMapper subMerchantApplyOrderMapper;
@Resource
private MerchantBaseInfoService merchantBaseInfoService;
@Resource
private YsServiceV3 ysServiceV3;
@Resource
private YSAuditServiceV3 ysAuditServiceV3;
@Resource
private WxCommonService wxCommonService;
/** /**
* 跳转到微信商户认证图片 * 跳转到微信商户认证图片
@@ -68,4 +92,134 @@ public class WxController {
response.setHeader("content-type", "text/html;charset=UTF-8"); response.setHeader("content-type", "text/html;charset=UTF-8");
response.getWriter().write("<img src='" + subMerchantApplyOrder.getInfoQrcode() + "' />"); response.getWriter().write("<img src='" + subMerchantApplyOrder.getInfoQrcode() + "' />");
} }
// @PostMapping("/authorisation")
// public void authorisation(){
//// MerchantBaseInfo merchantBaseInfoByUserId = merchantBaseInfoService.getMerchantBaseInfoByUserId(userId);
// JSONObject bizContentMap = new JSONObject();
//// Map<String,Object> bizContentMap = new HashMap<>();
// //交易报备渠道编号 CUPS_WECHAT-银联微信CUPS_ALIPAY-银联支付宝NUCC_WECHAT-网联微信NUCC_ALIPAY-网联支付宝
// bizContentMap.put("channelCode","CUPS_WECHAT");
// //商户号
// bizContentMap.put("mercId","QRY230510383416");
// //商户信息-营业执照营业执照复印件(盖公章)
// bizContentMap.put("linencePhoto","https://czg-oss.oss-cn-hangzhou.aliyuncs.com/images/7228fde116c14c6380fce592c97e8998.png?Expires=1998984528&OSSAccessKeyId=LTAI5tPdEfYSZcqHbjCrtPRD&Signature=klQgxxm4MgTR1JuJTLW5NZJ9C%2BE%3D");
// //商户信息-法人身份证复印件(盖私章,签字)/原件扫描件
// bizContentMap.put("indentityPhoto","");
// //商户信息-服务协议复印件(盖公章)/原件扫描件
// bizContentMap.put("protocolPhoto","");
// //商户信息-组织机构代码证(盖公章)/原件扫描件
// bizContentMap.put("cocc","");
// //商户信息-法人身份证正面照
// bizContentMap.put("sfzFrontPhoto","");
// //商户信息-法人身份证反面照
// bizContentMap.put("sfzBackPhoto","");
// //商户信息法人身份证号码
// bizContentMap.put("idcarNo","");
// //商户信息-银盛商户类型
// bizContentMap.put("mccSubCd","5814");
// //业务类型0-微信 1-支付宝
// bizContentMap.put("busiType","0");
// //商户信息-商户简称
// bizContentMap.put("mercShortName","会飞的土豆");
// //商户信息-商户归属省
// bizContentMap.put("mercProv","7900");
// //商户信息-商户归属市
// bizContentMap.put("mercCity","7910");
// //商户信息-商户归属区
// bizContentMap.put("mercArea","8081");
// //商户信息-营业地址(联系地址)
// bizContentMap.put("busAddr","荣民国际");
// //商户信息-联系人姓名
// bizContentMap.put("contactsName","李雯");
// //商户信息-联系人手机号
// bizContentMap.put("contactsTel","18710449883");
// //商户信息-联系人邮箱
// bizContentMap.put("contactsEmail","1657953836@qq.com");
// //商户信息-法人姓名
// bizContentMap.put("crpNm","李雯");
// //商户信息-法人证件号
// bizContentMap.put("certNo","610323199812250941");
// //商户信息-代理商名称
// bizContentMap.put("agentName","陕西超掌柜科技有限公司");
// //商户信息-代理商编号
// bizContentMap.put("agtMercId","801521000002WJW");
// //商户信息-开户行行别
// bizContentMap.put("bankType","1051000");
// //商户信息-开户行名称
// bizContentMap.put("bankName","中国建设银行陕西省分行");
// //商户信息-账户类型
// bizContentMap.put("accountType","11");
// //商户信息-账户名称
// bizContentMap.put("accountName","李雯");
// //商户信息-账户账号
// bizContentMap.put("accountNo","QRY230510383416");
// //商户信息-客户号
// bizContentMap.put("custId","2023051028630896");
// //商户信息-报备行业类型
// bizContentMap.put("mchType","139");
// bizContentMap.put("mercName","");
// bizContentMap.put("reportName","");
// //商户信息-商户类别 0或null普通企业商户1小微商户,2个体商户,3事业单位4社会组织原其他组织 5政府机关
// bizContentMap.put("mercType","1");
// bizContentMap.put("certType","");
// bizContentMap.put("pId","");
// bizContentMap.put("shopPhoto","https://czg-oss.oss-cn-hangzhou.aliyuncs.com/images/f2804e6991474b4691bda17d8a644f41.png?Expires=1998984700&OSSAccessKeyId=LTAI5tPdEfYSZcqHbjCrtPRD&Signature=aW28so6wOxOfdJpU7sgA4gr1%2FeE%3D");
// bizContentMap.put("storeEnvirPhoto","https://czg-oss.oss-cn-hangzhou.aliyuncs.com/images/a71a293015d44006b7db02a911f54775.png?Expires=1998984731&OSSAccessKeyId=LTAI5tPdEfYSZcqHbjCrtPRD&Signature=lkhJ%2F0Rg2%2BA9fd1fQId382g0CO8%3D");
// bizContentMap.put("idImgHand", "https://czg-oss.oss-cn-hangzhou.aliyuncs.com/images/7228fde116c14c6380fce592c97e8998.png?Expires=1998984528&OSSAccessKeyId=LTAI5tPdEfYSZcqHbjCrtPRD&Signature=klQgxxm4MgTR1JuJTLW5NZJ9C%2BE%3D");
// bizContentMap.put("bankCardImg","");
// bizContentMap.put("bdShopPhoto","");
// bizContentMap.put("bdPosterPhoto","");
// bizContentMap.put("wxPlatform","");
// bizContentMap.put("idValidDateBegin","");
// bizContentMap.put("idValidDateEnd","");
// bizContentMap.put("busLincenceBegin","");
// bizContentMap.put("busLincenceEnd","");
// bizContentMap.put("managementType","");
// bizContentMap.put("storeName","");
// bizContentMap.put("wechatCheckStandPhoto","");
// bizContentMap.put("alipayCheckStandPhoto","");
// bizContentMap.put("aliPayStoreCashierPhoto","");
// bizContentMap.put("bookType","");
// bizContentMap.put("unitPhoto","");
// bizContentMap.put("hotLine","");
// //商户信息-证照类型 0:营业执照;1:事业单位法人证书;2:小微商户负责人身份证;3:社会信用等级证书
// bizContentMap.put("businessLicenseType","2");
// //商户信息-证件编号
// bizContentMap.put("businessLicense","610323199812250941");
// bizContentMap.put("appletAppId","wxc2bb94c0ddda1032");
// bizContentMap.put("appId1","");
// bizContentMap.put("appId2","");
// bizContentMap.put("appId3","");
// bizContentMap.put("appId4","");
// bizContentMap.put("applyServices","01;02");
// bizContentMap.put("picType","2");
// //商户信息-商户归属机构
// bizContentMap.put("orgNo","3520000064");
// ysServiceV3.req(ReqMethod.Reporting, bizContentMap);
// }
//
@PostMapping("/appIdAddOrUpdate")
public void appIdAddOrUpdate(){
JSONObject bizContentMap = new JSONObject();
bizContentMap.put("channelId", "CUPS_WECHAT");
bizContentMap.put("mercId", "QRY230511483159");
bizContentMap.put("appletId", "wxc2bb94c0ddda1032");
ysServiceV3.req(ReqMethod.appIdAddOrUpdate, bizContentMap);
}
@PostMapping("/auditResult")
public void test(String sysFlowId){
ysAuditServiceV3.result(sysFlowId);
}
/**
* 获取公众号权限
* @param
* @return
*/
@PostMapping("/permissions")
public JSONObject appletPermissions(@RequestBody JSONObject url){
JSONObject jsApiConfigParam = wxCommonService.getJsApiConfigParam(url.getString("url"));
return jsApiConfigParam;
}
} }

View File

@@ -4,6 +4,7 @@ import cn.hutool.crypto.symmetric.DES;
import cn.pluss.platform.channel.MerchantAuditService; import cn.pluss.platform.channel.MerchantAuditService;
import cn.pluss.platform.channel.ys.YSAuditServiceV3; import cn.pluss.platform.channel.ys.YSAuditServiceV3;
import cn.pluss.platform.entity.RyxAccessModel; import cn.pluss.platform.entity.RyxAccessModel;
import cn.pluss.platform.klk.service.impl.LaKalaInterfaceImpl;
import cn.pluss.platform.ryx.RyxService; import cn.pluss.platform.ryx.RyxService;
import cn.pluss.platform.ys.impl.v20210929.YsConfigV2; import cn.pluss.platform.ys.impl.v20210929.YsConfigV2;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
@@ -14,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@@ -139,5 +141,11 @@ public class AuditCallbackController {
return ryxMerchantAuditService.editMerchantCallback(result); return ryxMerchantAuditService.editMerchantCallback(result);
} }
@Resource
LaKalaInterfaceImpl laKalaInterface;
@PostMapping("lklCallBack")
public String lklCallBack(@RequestBody Map<String, Object> map) throws Exception {
String str ="data -> hplFXwPU1gbHYwraQM/fKEcoIkBfHD07VSH99OnKTZk9HJRFAvZyOm9nsdeSi8t/UdGPn+LXldrjZ7wiY+F5MzGlIdEma7agKZyHJ+UO6CrDJfYFMwlPUOgO+Pq5ljg6QOdZBxBLEHkRMkQnC/CTv9vQnPDqeCv4MvAbHJspADGRRPvmjxtzf0J4OQgP3hj9+ZqH+btsuX+W+YZRXRMYL+uOQkSJhMUv31hc9MAC/1Sp0C9cBcHKxr+idS+0CCjvD8WzLbXv2QuOSQccIKQw+Je8RMeuKs8f64MibCkf+RkilTCVCEd5apL1MkhYJZoUVzqPXmDBLjaJgr987X1wBAzQMS8+F34Vl/BonKPuJ4RRwdE/M3WJ+ZfM2WiLawpU7ZqUQdVY2bwJO801TcmFCswLoz2qxHHsBsjXtQPqMOj3pw3Kvz3WH3oWmcFRZjHKIbDSy9Jh2STEFRbvVWarjksBVjXkcbletDtOtY0T8XCdiiNoQNlVNj5kH5QkAWmt";
return laKalaInterface.tuoKeCallBack(map);
}
} }

View File

@@ -3,6 +3,7 @@ package cn.pluss.platform.controller.store;
import cn.pluss.platform.api.Result; import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.device.MercOrderDetailService; import cn.pluss.platform.device.MercOrderDetailService;
import cn.pluss.platform.device.MercOrderExpressService;
import cn.pluss.platform.dto.MercOrderDetailDTO; import cn.pluss.platform.dto.MercOrderDetailDTO;
import cn.pluss.platform.entity.MercOrderDetail; import cn.pluss.platform.entity.MercOrderDetail;
import cn.pluss.platform.vo.MercOrderExpressVO; import cn.pluss.platform.vo.MercOrderExpressVO;
@@ -26,6 +27,8 @@ public class MercOrderDetailController {
@Resource @Resource
private MercOrderDetailService modService; private MercOrderDetailService modService;
@Resource
private MercOrderExpressService mercOrderExpressService;
/** /**
* 订单分页查询接口 * 订单分页查询接口
@@ -114,6 +117,18 @@ public class MercOrderDetailController {
String msg = express == null ? "暂无物流信息" : "获取成功"; String msg = express == null ? "暂无物流信息" : "获取成功";
return ResultGenerator.genSuccessResult(msg,express); return ResultGenerator.genSuccessResult(msg,express);
} }
/**
* 查看物流信息(快递鸟)
*/
@GetMapping("/logistic")
public Result<Object> logistic(@RequestParam String expressNo)throws Exception{
JSONObject expressInfo = mercOrderExpressService.getExpressInfo(expressNo);
if (expressInfo.isEmpty()){
return ResultGenerator.genFailResult("无法查询快递信息");
}else {
return ResultGenerator.genSuccessResult(expressInfo);
}
}
/** /**
* 申请退款 * 申请退款

View File

@@ -0,0 +1,32 @@
package cn.pluss.platform.interceptor;
import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.util.Emoji;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
/**
* @author lyf
*/
public class EmojiInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
StringBuilder sb = new StringBuilder();
String line;
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
String body = sb.toString();
boolean emoji = Emoji.containsEmoji(body);
if (emoji) {
throw new MsgException("请正确输入");//这里是我自己封装了一个异常,根据自己需要写自己的异常
}
return super.preHandle(request, response, handler);
}
}

View File

@@ -1,5 +1,9 @@
package cn.pluss.platform.interceptor; package cn.pluss.platform.interceptor;
import cn.pluss.platform.access.AccessService;
import cn.pluss.platform.access.domain.CodeEnum;
import cn.pluss.platform.access.domain.ReqEntity;
import cn.pluss.platform.access.domain.RespEntity;
import cn.pluss.platform.api.Result; import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultCode; import cn.pluss.platform.api.ResultCode;
import cn.pluss.platform.constants.CommonError; import cn.pluss.platform.constants.CommonError;
@@ -10,14 +14,20 @@ import cn.pluss.platform.merchant.MerchantStaffConnService;
import cn.pluss.platform.userApp.UserAppService; import cn.pluss.platform.userApp.UserAppService;
import cn.pluss.platform.userInfo.UserInfoService; import cn.pluss.platform.userInfo.UserInfoService;
import cn.pluss.platform.util.ComUtil; import cn.pluss.platform.util.ComUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -35,6 +45,9 @@ public class TokenRegistryInterceptor extends HandlerInterceptorAdapter {
@Resource @Resource
private MerchantStaffConnService staffConnService; private MerchantStaffConnService staffConnService;
@Autowired
private AccessService accessService;
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestUri = request.getRequestURI(); String requestUri = request.getRequestURI();
@@ -57,6 +70,16 @@ public class TokenRegistryInterceptor extends HandlerInterceptorAdapter {
limitUri.add("/api/index.html"); limitUri.add("/api/index.html");
limitUri.add("/api/merchantOrder/posScanPay"); limitUri.add("/api/merchantOrder/posScanPay");
limitUri.add("/api/merchantOrder/pos/tradeQuery"); limitUri.add("/api/merchantOrder/pos/tradeQuery");
limitUri.add("/api/merchantOrder/returnOrder");
limitUri.add("/api/memberOrder");
limitUri.add("/api/merchantMenber/info");
limitUri.add("/api/merchantBaseInfo/queryMerchantActivityApplet");
limitUri.add("/api/deviceGoods/goodListSimple");
limitUri.add("/api/deviceGoods/tagList");
limitUri.add("/api/deviceGoods/deviceDetail/");
limitUri.add("/api/questionsAnswers");
limitUri.add("/api/helpVideo");
limitUri.add("/api/systemConfig/updateSystemVersion");
boolean passFlag = limitUri.stream().anyMatch(s -> s.equals(requestUri) || requestUri.startsWith(s)); boolean passFlag = limitUri.stream().anyMatch(s -> s.equals(requestUri) || requestUri.startsWith(s));
if (passFlag) { if (passFlag) {
return true; return true;
@@ -65,6 +88,46 @@ public class TokenRegistryInterceptor extends HandlerInterceptorAdapter {
String contentType = request.getContentType(); String contentType = request.getContentType();
if (contentType != null
&& contentType.contains("application/json")
&& requestUri.startsWith("/api/access")) {
StringBuilder responseStrBuilder = new StringBuilder();
InputStream is = request.getInputStream();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
String inputStr;
while ((inputStr = streamReader.readLine()) != null) {
responseStrBuilder.append(inputStr);
}
ReqEntity reqEntity;
try {
reqEntity = JSON.toJavaObject(JSON.parseObject(responseStrBuilder.toString()), ReqEntity.class);
} catch (Exception e) {
RespEntity entity = new RespEntity(null, CodeEnum.PARAM_ERROR, null, null);
ComUtil.responseResult(response, entity);
return false;
}
if (reqEntity == null || reqEntity.getOrgId() == null) {
RespEntity entity = new RespEntity(null, CodeEnum.ORG_ID_NOT_FOUND, null, null);
ComUtil.responseResult(response, entity);
return false;
}
boolean signCheck = accessService.checkSign(reqEntity);
// 操作
if (signCheck) {
return true;
} else {
RespEntity entity = new RespEntity(reqEntity.getOrgId(), CodeEnum.SIGN_ERROR, null, reqEntity.getRequestId());
accessService.addSign(entity);
ComUtil.responseResult(response, entity);
return false;
}
}
synchronized (this) { synchronized (this) {
String requestToken = request.getHeader("token"); String requestToken = request.getHeader("token");
// 登录账号 // 登录账号
@@ -79,7 +142,7 @@ public class TokenRegistryInterceptor extends HandlerInterceptorAdapter {
if (StringUtils.isEmpty(myLoginName) || StringUtils.isEmpty(requestToken)) { if (StringUtils.isEmpty(myLoginName) || StringUtils.isEmpty(requestToken)) {
Result<Object> result = new Result<>(); Result<Object> result = new Result<>();
result.setCode(ResultCode.NOT_TOKEN).setMessage("非法请求"); result.setCode(ResultCode.NOT_TOKEN).setMessage("请先登录");
ComUtil.responseResult(response, result); ComUtil.responseResult(response, result);
return false; return false;
} }

View File

@@ -1,9 +1,14 @@
spring: spring:
# datasource:
# url: jdbc:mysql://60.205.224.68:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
# username: root
# password: CZGmysqlroot@123
# driver-class-name: com.mysql.jdbc.Driver
datasource: datasource:
url: jdbc:mysql://60.205.224.68:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 url: jdbc:mysql://rm-bp19ib8x213kh9t450o.rwlb.rds.aliyuncs.com:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root username: root
password: CZGmysqlroot@123 password: prodCZGmysqlroot@123
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver
parameter: parameter:
### 这个根据自己的情况配置 ### 这个根据自己的情况配置
domain: https://ky.sxczgkj.cn domain: https://ky.sxczgkj.cn

View File

@@ -1,6 +1,7 @@
spring: spring:
datasource: datasource:
url: jdbc:mysql://rm-bp19ib8x213kh9t45.rwlb.rds.aliyuncs.com:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 # url: jdbc:mysql://rm-bp19ib8x213kh9t45.rwlb.rds.aliyuncs.com:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
url: jdbc:mysql://rm-bp19ib8x213kh9t450o.rwlb.rds.aliyuncs.com:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root username: root
password: prodCZGmysqlroot@123 password: prodCZGmysqlroot@123
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver

View File

@@ -89,11 +89,24 @@ public class ParameterConfig {
*/ */
@Value("${parameter.APPLETS_APPID}") @Value("${parameter.APPLETS_APPID}")
public String APPLETS_APPID; public String APPLETS_APPID;
@Value("${parameter.APPLETS_SECRET}")
public String APPLETS_SECRET;
/** /**
* AppSecret * AppSecret
*/ */
@Value("${parameter.APPSECRET}") @Value("${parameter.APPSECRET}")
public String APPSECRET; public String APPSECRET;
/**
* IOS公众号ID
*/
@Value("${parameter.APPID_IOS}")
public String APPID_IOS;
/**
* IOS公众号密钥
*/
@Value("${parameter.APP_SECRET_IOS}")
public String APP_SECRET_IOS;
/** /**
* 商户号 * 商户号
*/ */
@@ -263,6 +276,14 @@ public class ParameterConfig {
@Value("${parameter.SJ_APPSECRET}") @Value("${parameter.SJ_APPSECRET}")
public String SJ_APPSECRET; public String SJ_APPSECRET;
/**
* 快递相关(快递鸟)
*/
@Value("${express.USERID}")
public String USERID;
@Value("${express.APIKEY}")
public String APIKEY;
@PostConstruct @PostConstruct
public void init() { public void init() {
ParametersUtil.upload_save_path = upload_save_path; ParametersUtil.upload_save_path = upload_save_path;
@@ -272,7 +293,10 @@ public class ParameterConfig {
ParametersUtil.WECHAT_RATE = WECHAT_RATE; ParametersUtil.WECHAT_RATE = WECHAT_RATE;
ParametersUtil.APPID = APPID; ParametersUtil.APPID = APPID;
ParametersUtil.APPLETS_APPID = APPLETS_APPID; ParametersUtil.APPLETS_APPID = APPLETS_APPID;
ParametersUtil.APPLETS_SECRET = APPLETS_SECRET;
ParametersUtil.APPSECRET = APPSECRET; ParametersUtil.APPSECRET = APPSECRET;
ParametersUtil.APPID_IOS = APPID_IOS;
ParametersUtil.APP_SECRET_IOS = APP_SECRET_IOS;
ParametersUtil.PID = PID; ParametersUtil.PID = PID;
ParametersUtil.KEY = KEY; ParametersUtil.KEY = KEY;
ParametersUtil.wechatCallback = wechatCallback; ParametersUtil.wechatCallback = wechatCallback;
@@ -306,6 +330,8 @@ public class ParameterConfig {
ParametersUtil.LESHUA_API=LESHUA_API; ParametersUtil.LESHUA_API=LESHUA_API;
ParametersUtil.SJ_APPID = SJ_APPID; ParametersUtil.SJ_APPID = SJ_APPID;
ParametersUtil.SJ_APPSECRET = SJ_APPSECRET; ParametersUtil.SJ_APPSECRET = SJ_APPSECRET;
ParametersUtil.USERID = USERID;
ParametersUtil.APIKEY = APIKEY;
SxfConfg.init(sxfDomain, publicKey, orgId); SxfConfg.init(sxfDomain, publicKey, orgId);

View File

@@ -151,7 +151,7 @@ public class Constant {
/** /**
* 默认收款商户号 * 默认收款商户号
*/ */
public static final String DEFUALT_CASHIER_MERCHANT = "M80020220111357490"; public static final String DEFUALT_CASHIER_MERCHANT = "M800202207078584958";
/** /**
* 默认收款商户属性key * 默认收款商户属性key
@@ -161,12 +161,12 @@ public class Constant {
/** /**
* 默认通道 * 默认通道
*/ */
public static final Integer DEFAULT_CHANNEL = 4; public static final Integer DEFAULT_CHANNEL = 1;
/** /**
* 支付宝H5支付前缀 * 支付宝H5支付前缀
*/ */
public static final String ALIPAY_H5_PAY_URL_PRIFIX = "alipays://platformapi/startapp?appId=20000067&url="; public static final String ALIPAY_H5_PAY_URL_PRIFIX = "alipays://platformapi/startapp?appId=2021003175619219&url=";
/** /**
* 收款通道类型 * 收款通道类型
@@ -192,6 +192,19 @@ public class Constant {
* 积分商城用户同步URL * 积分商城用户同步URL
*/ */
public static final String JF_SHOP_USER_SYNC_URL = "http://jf.shouyinbei.com/addons/shopro/syb_merchant/sysnmerchant"; public static final String JF_SHOP_USER_SYNC_URL = "http://jf.shouyinbei.com/addons/shopro/syb_merchant/sysnmerchant";
/**
* 会员活动(充值活动)
*/
public static final String MEMBER_RECHARGE_ACTIVITY = "http://192.168.1.116/javaApi/java-api/get-vip-sdata";
/**
* 会员活动(消费活动)
*/
public static final String MEMBER_CONSUME_ACTIVITY = "http://192.168.1.116/javaApi/java-api/get-vip-xfdata";
/**
* 会员活动(激活送)
*/
public static final String MEMBER_ACTIVATION_ACTIVITY = "http://192.168.1.116/javaApi/java-api/get-vip-jhdata";
/** /**
* 生活圈会员卡默认过期时间 5单位分钟 * 生活圈会员卡默认过期时间 5单位分钟

View File

@@ -165,7 +165,7 @@ public class ComUtil {
return ip; return ip;
} }
public static void responseResult(HttpServletResponse response, Result result) { public static void responseResult(HttpServletResponse response, Object result) {
response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8");
response.setHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8"); response.setHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8");
response.setStatus(200); response.setStatus(200);

View File

@@ -0,0 +1,91 @@
package cn.pluss.platform.util;
import org.apache.commons.lang3.StringUtils;
public class Emoji {
/**
* @Description: 是否有表情判断
* @author zhaopeng
* @email zp152527@163.com
* @date 2018/8/24 18:27
*/
public static boolean containsEmoji(String source) {
int len = source.length();
boolean isEmoji = false;
for (int i = 0; i < len; i++) {
char hs = source.charAt(i);
if (0xd800 <= hs && hs <= 0xdbff) {
if (source.length() > 1) {
char ls = source.charAt(i + 1);
int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <= 0x1f77f) {
return true;
}
}
} else {
// non surrogate
if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) {
return true;
} else if (0x2B05 <= hs && hs <= 0x2b07) {
return true;
} else if (0x2934 <= hs && hs <= 0x2935) {
return true;
} else if (0x3297 <= hs && hs <= 0x3299) {
return true;
} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d
|| hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c
|| hs == 0x2b1b || hs == 0x2b50 || hs == 0x231a) {
return true;
}
if (!isEmoji && source.length() > 1 && i < source.length() - 1) {
char ls = source.charAt(i + 1);
if (ls == 0x20e3) {
return true;
}
}
}
}
return isEmoji;
}
private static boolean isEmojiCharacter(char codePoint) {
return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
|| (codePoint == 0xD)
|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
/**
* @Description: 过滤emoji 或者 其他非文字类型的字符
* @author zhaopeng
* @email zp152527@163.com
* @date 2018/8/24 18:27
*/
public static String filterEmoji(String source) {
if (StringUtils.isBlank(source)) {
return source;
}
StringBuilder buf = null;
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (isEmojiCharacter(codePoint)) {
if (buf == null) {
buf = new StringBuilder(source.length());
}
buf.append(codePoint);
}
}
if (buf == null) {
return source;
} else {
if (buf.length() == len) {
buf = null;
return source;
} else {
return buf.toString();
}
}
}
}

View File

@@ -38,7 +38,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
public class MobV2PushUtil { public class MobV2PushUtilAndroid {
public static final String appKey = "9f5Nw6Bvb982HvsN3sG1y5"; public static final String appKey = "9f5Nw6Bvb982HvsN3sG1y5";
public static final String appId = "jzSkfM0Wsk8uSDL2zwGu07"; public static final String appId = "jzSkfM0Wsk8uSDL2zwGu07";
@@ -143,7 +143,7 @@ public class MobV2PushUtil {
pushChannel.setAndroid(androidDTO); pushChannel.setAndroid(androidDTO);
//ios离线apn通道推送的消息体 //ios离线apn通道推送的消息体
Alert alert = new Alert(); /* Alert alert = new Alert();
alert.setTitle(title); alert.setTitle(title);
alert.setBody(content); alert.setBody(content);
Aps aps = new Aps(); Aps aps = new Aps();
@@ -153,7 +153,8 @@ public class MobV2PushUtil {
IosDTO iosDTO = new IosDTO(); IosDTO iosDTO = new IosDTO();
iosDTO.setAps(aps); iosDTO.setAps(aps);
iosDTO.setType("notify"); iosDTO.setType("notify");
pushChannel.setIos(iosDTO); pushChannel.setIos(iosDTO);*/
pushDTO.setPushChannel(pushChannel); pushDTO.setPushChannel(pushChannel);
pushBatchDTO.addPushDTO(pushDTO); pushBatchDTO.addPushDTO(pushDTO);

View File

@@ -0,0 +1,196 @@
package cn.pluss.platform.util;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.getui.push.v2.sdk.ApiHelper;
import com.getui.push.v2.sdk.GtApiConfiguration;
import com.getui.push.v2.sdk.api.PushApi;
import com.getui.push.v2.sdk.common.ApiResult;
import com.getui.push.v2.sdk.dto.req.Audience;
import com.getui.push.v2.sdk.dto.req.Settings;
import com.getui.push.v2.sdk.dto.req.message.PushBatchDTO;
import com.getui.push.v2.sdk.dto.req.message.PushChannel;
import com.getui.push.v2.sdk.dto.req.message.PushDTO;
import com.getui.push.v2.sdk.dto.req.message.PushMessage;
import com.getui.push.v2.sdk.dto.req.message.android.AndroidDTO;
import com.getui.push.v2.sdk.dto.req.message.android.ThirdNotification;
import com.getui.push.v2.sdk.dto.req.message.android.Ups;
import com.getui.push.v2.sdk.dto.req.message.ios.Alert;
import com.getui.push.v2.sdk.dto.req.message.ios.Aps;
import com.getui.push.v2.sdk.dto.req.message.ios.IosDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
public class MobV2PushUtilIOS {
public static final String appKey = "QwyHsKpc0I9BQMk9Xysx74";
public static final String appId = "yuBG87yWEt6SXrwBSSvjy1 ";
public static final String masterSecret = "PpidsIbMSs7EQddDMHAh81";
public String getToken() throws IOException, NoSuchAlgorithmException {
Map<String, Object> map = new HashMap<>();
Long timestamp = new Date().getTime();
String content = appKey + timestamp + masterSecret;
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(content.getBytes("UTF-8"));
String sign = byte2Hex(messageDigest.digest());
map.put("sign", sign);
map.put("timestamp", timestamp);
map.put("appkey", appKey);
String json = new ObjectMapper().writeValueAsString(map);
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> httpEntity = new HttpEntity<>(json, header);
RestTemplate restTemplate = new RestTemplate();
// 设置为UTF8编码
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
String tokenInfo = restTemplate.postForObject(
"https://restapi.getui.com/v2/" + appId + "/auth", httpEntity,
String.class);
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(tokenInfo);
JsonNode code = jsonNode.get("code");
if (code.asText().equals("0")) {
return jsonNode.get("data").get("token").asText();
}
return null;
}
public static void sendSingleByAlias(List<String> alias, String title, String content, String ext) {
GtApiConfiguration apiConfiguration = new GtApiConfiguration();
//填写应用配置参数在“Uni Push”下的“应用配置”页面中获取
apiConfiguration.setAppId(appId);
apiConfiguration.setAppKey(appKey);
apiConfiguration.setMasterSecret(masterSecret);
apiConfiguration.setDomain("https://restapi.getui.com/v2/");
// 实例化ApiHelper对象用于创建接口对象
ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
// 创建对象建议复用。目前有PushApi、StatisticApi、UserApi
PushApi pushApi = apiHelper.creatApi(PushApi.class);
PushBatchDTO pushBatchDTO = new PushBatchDTO();
for (String value : alias) {
//根据cid进行单推
PushDTO<Audience> pushDTO = new PushDTO<Audience>();
// 设置推送参数requestid需要每次变化唯一
pushDTO.setRequestId(System.currentTimeMillis() + "");
Settings settings = new Settings();
pushDTO.setSettings(settings);
//消息有效期,走厂商消息必须设置该值
settings.setTtl(3600000);
//在线走个推通道时推送的消息体
PushMessage pushMessage = new PushMessage();
pushDTO.setPushMessage(pushMessage);
//此格式的透传消息由 unipush 做了特殊处理,会自动展示通知栏。开发者也可自定义其它格式,在客户端自己处理。
//pushMessage.setTransmission(" {title:\"标题\",content:\"内容\",payload:\"快银到账1万元\"}");
//pushMessage.setTransmission("{title:" + title + ", content:" + content + ext);
pushMessage.setTransmission("{title:\"" + title + "\",content:\"" + content + "\"," + ext);
// 设置接收人信息
Audience audience = new Audience();
//audience.addAlias("244");
audience.addAlias(value);
pushDTO.setAudience(audience);
//设置离线推送时的消息体
PushChannel pushChannel = new PushChannel();
//安卓离线厂商通道推送的消息体
/* AndroidDTO androidDTO = new AndroidDTO();
Ups ups = new Ups();
ThirdNotification thirdNotification = new ThirdNotification();
ups.setNotification(thirdNotification);
thirdNotification.setTitle(title);
thirdNotification.setBody(content);
thirdNotification.setClickType("intent");
//注意intent参数必须按下方文档特殊参数说明要求的固定格式传值intent错误会导致客户端无法收到消息
thirdNotification.setIntent("intent://io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end");
androidDTO.setUps(ups);
pushChannel.setAndroid(androidDTO);*/
//ios离线apn通道推送的消息体
Alert alert = new Alert();
alert.setTitle(title);
alert.setBody(content);
Aps aps = new Aps();
aps.setContentAvailable(0);
aps.setSound("default");
aps.setAlert(alert);
IosDTO iosDTO = new IosDTO();
iosDTO.setAps(aps);
iosDTO.setType("notify");
pushChannel.setIos(iosDTO);
pushDTO.setPushChannel(pushChannel);
pushBatchDTO.addPushDTO(pushDTO);
}
ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushBatchByAlias(pushBatchDTO);
log.info("[uni推送]PushResult result is {}", apiResult.getData());
if (apiResult.isSuccess()) {
// success
System.out.println(apiResult.getData());
} else {
// failed
System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
}
}
/**
* 将byte转为16进制
*
* @param bytes
* @return
*/
private static String byte2Hex(byte[] bytes) {
StringBuffer stringBuffer = new StringBuffer();
String temp = null;
for (int i = 0; i < bytes.length; i++) {
temp = Integer.toHexString(bytes[i] & 0xFF);
if (temp.length() == 1) {
// 1得到一位的进行补0操作
stringBuffer.append("0");
}
stringBuffer.append(temp);
}
return stringBuffer.toString();
}
}

View File

@@ -45,10 +45,23 @@ public class ParametersUtil {
* 小程序付款的appid * 小程序付款的appid
*/ */
public static String APPLETS_APPID; public static String APPLETS_APPID;
/**
* 小程序密钥
*/
public static String APPLETS_SECRET;
/** /**
* AppSecret * AppSecret
*/ */
public static String APPSECRET; public static String APPSECRET;
/**
* IOS公众号ID
*/
public static String APPID_IOS;
/**
* IOS公众号密钥
*/
public static String APP_SECRET_IOS;
/** /**
*商户号 *商户号
*/ */
@@ -186,5 +199,11 @@ public class ParametersUtil {
* @date: 2021/9/23 10:27 * @date: 2021/9/23 10:27
*/ */
public static String SJ_APPSECRET; public static String SJ_APPSECRET;
/**
* 快递相关(快递鸟)
*/
public static String USERID;
public static String APIKEY;
} }

View File

@@ -113,7 +113,7 @@ public class RSAUtils {
public static PrivateKey getPrivateKey(String key) throws Exception { public static PrivateKey getPrivateKey(String key) throws Exception {
byte[] keyBytes; byte[] keyBytes;
keyBytes = Base64.getDecoder().decode(key); keyBytes = Base64.getMimeDecoder().decode(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA); KeyFactory keyFactory = KeyFactory.getInstance(RSA);
return keyFactory.generatePrivate(keySpec); return keyFactory.generatePrivate(keySpec);

View File

@@ -0,0 +1,161 @@
package cn.pluss.platform.util;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import cn.pluss.platform.exception.MsgException;
import org.bouncycastle.crypto.CryptoException;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Base64;
import static org.bouncycastle.util.encoders.Base64.toBase64String;
//import com.lakala.zf.idry.yzt.exception.CryptoException;
public class SM4Util {
public static final String ALGORITHM_NAME = "SM4";
public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";
// SM4算法目前只支持128位即密钥16字节
public static final int DEFAULT_KEY_SIZE = 128;
public static final String ENCODING = "UTF-8";
static {
Security.addProvider(new BouncyCastleProvider());
}
/**
* 生成Base64编码的密钥
*
* @return Base64编码的密钥
* @throws CryptoException
*/
public static String generateKeyToBase64() throws CryptoException {
return toBase64String(generateKey());
}
public static byte[] generateKey() throws CryptoException {
return generateKey(DEFAULT_KEY_SIZE);
}
/**
* 生成Base64编码的密钥
*
* @param keySize 密钥长度 单位为bit
* @return Base64编码的密钥
* @throws CryptoException
*/
public static String generateKeyToBase64(int keySize) throws CryptoException {
return toBase64String(generateKey(keySize));
}
public static byte[] generateKey(int keySize) throws CryptoException {
KeyGenerator kg = null;
try {
kg = KeyGenerator.getInstance(ALGORITHM_NAME, BouncyCastleProvider.PROVIDER_NAME);
} catch (Exception e) {
throw new CryptoException("SM4Util generateKey error:", e);
}
kg.init(keySize, new SecureRandom());
return kg.generateKey().getEncoded();
}
public static byte[] encrypt_ECB_Padding(byte[] key, byte[] data) throws CryptoException {
try {
Cipher cipher = generateECBCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(data);
} catch (Exception e) {
throw new CryptoException("SM4Util encrypt_ECB_Padding error:", e);
}
}
/**
* ECB_PKCS5Padding 加密返回Base64编码后的密文
*
* @param key base64
* @param data 正常明文数据
* @return
* @throws MsgException
*/
public static String encrypt(String key, String data) throws CryptoException {
try {
Cipher cipher = generateECBCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, Base64.decode(key));
byte[] enData =cipher.doFinal(data.getBytes(ENCODING));
return Base64.toBase64String(enData);
} catch (Exception e) {
throw new CryptoException("SM4Util encrypt_ECB_Padding error:", e);
}
}
/**
* ECB_PKCS5Padding 解密 ,返回正常明文数据
*
* @param key base64
* @param cipherText 返回Base64编码后的密文
* @return
* @throws Exception
*/
public static String decrypt(String key, String cipherText) throws CryptoException {
try {
Cipher cipher = generateECBCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, Base64.decode(key));
byte[] data =cipher.doFinal(Base64.decode(cipherText));
return new String(data,ENCODING);
} catch (Exception e) {
throw new CryptoException("SM4Util decrypt_ECB_Padding error:", e);
}
}
public static byte[] decrypt_ECB_Padding(byte[] key, byte[] cipherText) throws CryptoException {
try {
Cipher cipher = generateECBCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, key);
return cipher.doFinal(cipherText);
} catch (Exception e) {
throw new CryptoException("SM4Util decrypt_ECB_Padding error:", e);
}
}
private static Cipher generateECBCipher(String algorithmName, int mode, byte[] key)
throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException,
InvalidKeyException {
Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME);
Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);
cipher.init(mode, sm4Key);
return cipher;
}
public static void main(String[] args) throws Exception {
try {
String key = "dRzPaYd7z6vYn9sL/JTZ3A==";
String data = "阿萨德哈的哦已我居然挤公交大幅度AAAADDF";
String cipherText = encrypt(key, data);
System.out.println("cipherText " + cipherText);
String deData = decrypt(key, cipherText);
System.out.println("deData " + deData);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

View File

@@ -1,16 +1,10 @@
package cn.pluss.platform.util; package cn.pluss.platform.util;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import javax.crypto.Mac; import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import com.alibaba.fastjson.JSONObject;
public class WechatSignUtil { public class WechatSignUtil {
@@ -95,4 +89,30 @@ public class WechatSignUtil {
signParam.append("&key=").append(payKey); signParam.append("&key=").append(payKey);
return signParam.toString(); return signParam.toString();
} }
/**
* 加密模式
* @return
*/
public static String createNonceStr() {
return UUID.randomUUID().toString();
}
/**
* 时间戳
* @return
*/
public static String createTimestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
public static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
} }

View File

@@ -84,17 +84,17 @@ public class WxConstants {
public static final Integer RESULT_SUCCESS_CODE = 0; public static final Integer RESULT_SUCCESS_CODE = 0;
public static final Integer QR_EXPIRE_SECONDS = 2592000; public static final Integer QR_EXPIRE_SECONDS = 25920000;
/** /**
* 微信会员开卡通知模板ID * 微信会员开卡通知模板ID
* @date: 2021/12/9 18:17 * @date: 2021/12/9 18:17
*/ */
public static final String VIP_CARD_SUCCESS_TEMPLATE_ID = "Hf_WLVwVAc0HD4KV2_zLD0vTgiw4jpZ-OkcN4lIffUA"; public static final String VIP_CARD_SUCCESS_TEMPLATE_ID = "xCnkmNFUTVmlqn3njTW-qiET6s_6nOVc5k3gb-xW7A0";
/** /**
* 会员卡余额变动通知模板ID * 会员卡余额变动通知模板ID
* @date: 2021/12/9 18:19 * @date: 2021/12/9 18:19
*/ */
public static final String VIP_BALANCE_CHANGE_TEMPLATE_ID = "GNwluamISkPhGQU-NC1uBH-ftb7z28rknYe7hZyDKyI"; public static final String VIP_BALANCE_CHANGE_TEMPLATE_ID = "QNYK59v0h1Q4yQ2lIIrJGE0Fk0JnizhJ-_Gz1cA8_5Q";
} }

View File

@@ -132,11 +132,11 @@ public class YtCreateOrder implements Serializable {
public YtCreateOrder() { public YtCreateOrder() {
this.senderName = "收银客服部"; this.senderName = "快银收银客服部";
this.senderProvinceName = "湖北"; this.senderProvinceName = "陕西";
this.senderCityName = "武汉"; this.senderCityName = "西安";
this.senderCountyName = "洪山"; this.senderCountyName = "未央";
this.senderAddress = "九台别墅42栋"; this.senderAddress = "荣民中央国际";
this.senderMobile = "18062761507"; this.senderMobile = "19191701028";
} }
} }

View File

@@ -101,8 +101,13 @@ parameter:
# wxfffc7bff64c7a11e # wxfffc7bff64c7a11e
#小程序付款APPID #小程序付款APPID
APPLETS_APPID: wxc2bb94c0ddda1032 APPLETS_APPID: wxc2bb94c0ddda1032
APPSECRET: 4e00bbf3fc75a1ff68ce866fd13f2bcc #小程序密钥
APPLETS_SECRET: 625cbce8772629312e42e8278a8d6889
APPSECRET: 8492a7e8d55bbb1b57f5c8276ea1add0
# b84ee0efaa0d9a649746ac65525f8e10 # b84ee0efaa0d9a649746ac65525f8e10
#IOS端公众号
APPID_IOS: wx212769170d2c6b2a
APP_SECRET_IOS: 8492a7e8d55bbb1b57f5c8276ea1add0
KEY: 微信原生加密用的KEY KEY: 微信原生加密用的KEY
LESHUALIU: 乐刷、未接入可不管 LESHUALIU: 乐刷、未接入可不管
LESHUA_API: LESHUA_API:
@@ -151,3 +156,11 @@ sxf:
getui: getui:
domain: https://restapi.getui.com/v2/${getui.appId} domain: https://restapi.getui.com/v2/${getui.appId}
appId: jzSkfM0Wsk8uSDL2zwGu07 appId: jzSkfM0Wsk8uSDL2zwGu07
#快递(快递鸟)
express:
USERID: 1778214
APIKEY: 63e75d64-e8fd-4dcc-93fa-17dc710cdf04

View File

@@ -0,0 +1,11 @@
lkl:
private_key: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGxrIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhDZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbWdhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCNrpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK15quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4mE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7qCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZKNXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAKTPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gHSTTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0Zr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLvAtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeIRgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlkeMzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw48zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBPscd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDibEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCnLl2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEzNzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3jAylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilqCHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6QsFLQgFyXgvDnzr/o+hQJelW
appid: OP00000462 #接入方唯一编号
mchSerialNo: 00dfba8194c41b84cf #证书序列号
merchantNo: 8221210594300JY #商户号
vposId: 491612871013605376 #vpos_id
termNo: A0073841 #终端号
apiUrl: https://test.wsmsd.cn/
privateKeyPath: "classpath:lakalaConf/OP00000003_private_key.pem"
certificatePath: "classpath:lakalaConf/OP00000003_cert"

View File

@@ -10,12 +10,12 @@ ys:
## 其他网关接口 ## 其他网关接口
otherDomain: https://commonapi.ysepay.com/gateway.do otherDomain: https://commonapi.ysepay.com/gateway.do
## 代理商编号 ## 代理商编号
agentNo: agentNo: 801521000002WJW
## 交易发起方编号 武汉融商创科技有限公司 ## 交易发起方编号 武汉融商创科技有限公司
srcMerchantNo: 826521673920090 srcMerchantNo: 826521773920170
## 私钥用于签名,对应的公钥给到银盛 ## 私钥用于签名,对应的公钥给到银盛
priKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT/PW5hpPAtgKXd9BvhtpfXhzbK6U9UURKhBgFIkQ+oIJQNfbB/F2jdVK9ke3IYi0/TXHMnY63x43qxciLeAOt+LxdhHn6ZImV4MsRkPjF/zLsaJrPOPWbc2m4T1yvinfzkrxhZaWn1dj4+IdyO3tA/juXCjydQqKR2kSqJlo6gdT9N3RIJ+ETda2UUahZyYXBfjyxFQEaOXthm6krZH1zBHs510Og6bQJQHjMmTskkslWvj38qPDfsuC4tq0Hgbu3LcyiX9vGYzQoGOaGhDEiNPObdDlOuh5gn0slRmg+PxAgMBAAECggEAJRvrCBRki50C5HD6Kmtp/M/vVYwYYhcAum2ViO9qk2ILNJ+CYpsCvASEVvzuBtm2L8xq3Vw2C1AubXGC8KSsa33o/EG4qIM1REnP+a8VKbr6dlOIuoMFyNMI+QpDX7mAafnxmRqgXuGAJDmupYFsFaU/mRHRxhKoZDsd2FA5HEbuDI9SJp86keE72NHsxyqfDIZyIk3Z8k7HZY2wg3FW+YaOKQBHVA9JYvhfZMeaQ1ymrA0IAqWpUqjLkqAa2Qa6xUsbj+QhvrkBCE48i8duamXKDSOaLfkqTb8IyxOM9eTsFwLVGEuZQrkhrLxdrg5aBPvu81pIJME6SgrquJJ84QKBgQD/MAFLiWU0wDJ4Hqf2jKa5vgrBmCqOsANBc079s8gDXM4zbsG/TjMHPDmiOGZxtDG8937twjYzRv9XpnqyITMArlhWWMhTOJ3r3CTVr/OISgeZKPGjfp+MbeDsOK4OggTVKZmNLx3nKiuc94IlTDOcz5qArVBTxKadWg56f1UGswKBgQD28G+haXxneMhRZozoHPjcfdgtDoZJaVa8XTXw8nvQala5ioU9yesbIAdtD/VR/eWwuMtO4rK1IFxtNZQ/MtSXwqlnKLf1xDJQPuj3kY5mC7H7sn4HGeFDP50VFnPgIaUnB5VwgyYFm8l19AW06OBjlnoBv0dnl1s5u+DgpzQcywKBgQCfeWSVzBtPR/1CTAYzcdqPoVAfg/S0jxK5yFHJAp0wXMMQKVszLq99CgoKcqyyyiV7LkBIXWJ50RipsgRjZZP2DP5vl7Q5LdyjFUR/tiG/PmRZNtkrj2ot3Ez/0rwTnPVgMUsgjB1n5Va0FYljvadTi/nGCIl2kCJ/m1QJAaIlOQKBgGV8TwRxS9ViiEEb+lDyhzxm488wpvPIvQLQ8/hAT65J5bZ/PV81etA9C5BA/Ltjs2A7siKLfJJ/6DxhxrlqdICiWeixjVkN9vePw0LrqTA7IjylELJuamuu2yntflXgvfUaYspIu/mWGufFEAtXodCL6TyKlhf21mEV28e4L+ydAoGAItgCUGbot95QNT1z+9QFN+18AvMnWCNvqanrC4qsk0phjYX9FFwfSCqWVeVm0Q0+2tUrRNcUEcbmlbQToBZq/hSu0nPcZIPvnNxLfW/NY7eVCXIcI5eNPjUIgbRCVMc6w5ukYMxPidOBuRXIt1iq2+iV20/FMbA58sY7AgOiaMw= priKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDky8v1JlxCfZM0e0p7rkZq/hpa3yHjsF3aJaE5rBt0+x5G7MnHX1AIgi9jJzG3Z8QnEPUVutVClVbRZ3k9hZChlm6T9Miv4IhyvE4kPGJEXRi2q2r7nHyUeGve3TC4jXvELy0muS30BWRyczM/f2x13/uzjxeCM1eMnI5+jxfdg8aaYS2NpCydgObtEvKQRpx6YoF+F7eIF8DNvbYyoRNzM/+NsmquDmgK7Ad1qNK7gqYSmfXHUys7F97Sd/NxfegaiBMapepruUvQSlcQkYXJprM9cBGQuWx/iK8kQ+yYfmOI0OWX8pBwYWut7rR/ritujAdKtIpg14XVxRLnop6dAgMBAAECggEASjJA6TZQcwuQIlPdOrCwi1/uIgv8TH9UYDsVxsMmgFAzaGK/qNUi+i9luKzsNYMEHHsmT66wHBCb//qjWa0n0w8auwaF0mtpNHQWjy+52luqeQqr/f6oc+l9ad+nPiI7wcpexREGcv0QrwDm3K+w96T0Vi2QPRvzR1k56Jb08VN+kpAXb3g7X++il0Ql2lKFM8NySI0utnHAFMH7erJqNc4KeKmr2fJYw23ldBUOxmU6oWEIGwO+KiysfNlmzu3JspYE/eQfKX5aaEKaDbPVGF5Dje5e1SlJ1x9sTAfhOPeh83canoRN61aAI5mEKu04li5LLscBZfW6li2sVVJi7QKBgQD6qPgPc9NOusBvYP02NPdARBswCoafA86QHftPtWpyza67/M2c3X7dd+EnOU1Q+9p2Wj+L64M2KnC1JB+RUrVDBhs4e+yZ3Gly8rD+OUt1kWdJTaK3hJyKAnKtbL9yE90CEwMxLEH0XnYTmC8GhYYXGbOS2ZsqzQJaGUaYel3kTwKBgQDpq5Z00hb8EcPF6l34aL+FL9nAxlASXbYJql/UkD8PdhIkoxezkox/UI5jeF+RXbQ+VfuZQa6HfUrBQOcHTmp9o4cInDqoN/DSjvqV3v8Cnjs/PuF+kxFMDJdYPsjkps4IqR24l8nypPCdPHRjCaRnyfOyc1AteB1jYxDxkUmXUwKBgDOu7V76SeKc3RraC7vGlgiZQmXYdcOJ3GiY1f2scWN0h4fZa2fhv8vYcQNObGO7WmM23o1yJR7hB1ZCOYQUYq2ML8aovrNG4DNEWTxCAg4eygYyTM+8Ny65rH2Xw6247MQFuY3FC2BgrcYChge5NlnDAeTQm47qsIZ1WboM2Rk/AoGBAIuT1kSjtd0OE34mV8lpcHVzNsQi8XN3DKTLY4DKRRDMO1wtG5xFPq1SBiu+nH9tlJvjqm1KQaFnIv868IV5vrybsK5g+9y9xZlQlLhvQq5irAtEWVfNK3jc0I6CumdyiAG+WyWHbbcF9UBG+1KpUM46YNpIbS0r4Yobg+R4H5hHAoGBAOCZOg2VFPiluOPWzIcILb6nYvZyPhZP4pzz7WyzBht2SoHcD70cduCQpcuAXbj5JY59gUfNxURCDxQDNW2x8cQs6Hxme1kVg5kZNJAaclfb7Jx+ZqsYk4ua0NqxOtyfhRmYXVaTVKDFNt8CmwoiKYse4VDC/E3yKgha0UdcE+co
## 签名公钥,由银盛提供 ## 签名公钥,由银盛提供
pubKey: pubKey:
## 付款验签公钥,由银盛提供 ## 付款验签公钥,由银盛提供
@@ -24,13 +24,13 @@ ys:
## 进件URL前缀v2 ## 进件URL前缀v2
auditDomainV2: https://ouser.ysepay.com:6443/ auditDomainV2: https://ouser.ysepay.com:6443/
## 机构号ID ## 机构号ID
src: 3520000052 src: 3520000064
## 代理商编号 ## 代理商编号
agentNoV2: 801521000002UUS agentNoV2: 801521000002WJW
## 进件私钥v2 ## 进件私钥v2
priKeyV2: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT/PW5hpPAtgKXd9BvhtpfXhzbK6U9UURKhBgFIkQ+oIJQNfbB/F2jdVK9ke3IYi0/TXHMnY63x43qxciLeAOt+LxdhHn6ZImV4MsRkPjF/zLsaJrPOPWbc2m4T1yvinfzkrxhZaWn1dj4+IdyO3tA/juXCjydQqKR2kSqJlo6gdT9N3RIJ+ETda2UUahZyYXBfjyxFQEaOXthm6krZH1zBHs510Og6bQJQHjMmTskkslWvj38qPDfsuC4tq0Hgbu3LcyiX9vGYzQoGOaGhDEiNPObdDlOuh5gn0slRmg+PxAgMBAAECggEAJRvrCBRki50C5HD6Kmtp/M/vVYwYYhcAum2ViO9qk2ILNJ+CYpsCvASEVvzuBtm2L8xq3Vw2C1AubXGC8KSsa33o/EG4qIM1REnP+a8VKbr6dlOIuoMFyNMI+QpDX7mAafnxmRqgXuGAJDmupYFsFaU/mRHRxhKoZDsd2FA5HEbuDI9SJp86keE72NHsxyqfDIZyIk3Z8k7HZY2wg3FW+YaOKQBHVA9JYvhfZMeaQ1ymrA0IAqWpUqjLkqAa2Qa6xUsbj+QhvrkBCE48i8duamXKDSOaLfkqTb8IyxOM9eTsFwLVGEuZQrkhrLxdrg5aBPvu81pIJME6SgrquJJ84QKBgQD/MAFLiWU0wDJ4Hqf2jKa5vgrBmCqOsANBc079s8gDXM4zbsG/TjMHPDmiOGZxtDG8937twjYzRv9XpnqyITMArlhWWMhTOJ3r3CTVr/OISgeZKPGjfp+MbeDsOK4OggTVKZmNLx3nKiuc94IlTDOcz5qArVBTxKadWg56f1UGswKBgQD28G+haXxneMhRZozoHPjcfdgtDoZJaVa8XTXw8nvQala5ioU9yesbIAdtD/VR/eWwuMtO4rK1IFxtNZQ/MtSXwqlnKLf1xDJQPuj3kY5mC7H7sn4HGeFDP50VFnPgIaUnB5VwgyYFm8l19AW06OBjlnoBv0dnl1s5u+DgpzQcywKBgQCfeWSVzBtPR/1CTAYzcdqPoVAfg/S0jxK5yFHJAp0wXMMQKVszLq99CgoKcqyyyiV7LkBIXWJ50RipsgRjZZP2DP5vl7Q5LdyjFUR/tiG/PmRZNtkrj2ot3Ez/0rwTnPVgMUsgjB1n5Va0FYljvadTi/nGCIl2kCJ/m1QJAaIlOQKBgGV8TwRxS9ViiEEb+lDyhzxm488wpvPIvQLQ8/hAT65J5bZ/PV81etA9C5BA/Ltjs2A7siKLfJJ/6DxhxrlqdICiWeixjVkN9vePw0LrqTA7IjylELJuamuu2yntflXgvfUaYspIu/mWGufFEAtXodCL6TyKlhf21mEV28e4L+ydAoGAItgCUGbot95QNT1z+9QFN+18AvMnWCNvqanrC4qsk0phjYX9FFwfSCqWVeVm0Q0+2tUrRNcUEcbmlbQToBZq/hSu0nPcZIPvnNxLfW/NY7eVCXIcI5eNPjUIgbRCVMc6w5ukYMxPidOBuRXIt1iq2+iV20/FMbA58sY7AgOiaMw= priKeyV2: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDky8v1JlxCfZM0e0p7rkZq/hpa3yHjsF3aJaE5rBt0+x5G7MnHX1AIgi9jJzG3Z8QnEPUVutVClVbRZ3k9hZChlm6T9Miv4IhyvE4kPGJEXRi2q2r7nHyUeGve3TC4jXvELy0muS30BWRyczM/f2x13/uzjxeCM1eMnI5+jxfdg8aaYS2NpCydgObtEvKQRpx6YoF+F7eIF8DNvbYyoRNzM/+NsmquDmgK7Ad1qNK7gqYSmfXHUys7F97Sd/NxfegaiBMapepruUvQSlcQkYXJprM9cBGQuWx/iK8kQ+yYfmOI0OWX8pBwYWut7rR/ritujAdKtIpg14XVxRLnop6dAgMBAAECggEASjJA6TZQcwuQIlPdOrCwi1/uIgv8TH9UYDsVxsMmgFAzaGK/qNUi+i9luKzsNYMEHHsmT66wHBCb//qjWa0n0w8auwaF0mtpNHQWjy+52luqeQqr/f6oc+l9ad+nPiI7wcpexREGcv0QrwDm3K+w96T0Vi2QPRvzR1k56Jb08VN+kpAXb3g7X++il0Ql2lKFM8NySI0utnHAFMH7erJqNc4KeKmr2fJYw23ldBUOxmU6oWEIGwO+KiysfNlmzu3JspYE/eQfKX5aaEKaDbPVGF5Dje5e1SlJ1x9sTAfhOPeh83canoRN61aAI5mEKu04li5LLscBZfW6li2sVVJi7QKBgQD6qPgPc9NOusBvYP02NPdARBswCoafA86QHftPtWpyza67/M2c3X7dd+EnOU1Q+9p2Wj+L64M2KnC1JB+RUrVDBhs4e+yZ3Gly8rD+OUt1kWdJTaK3hJyKAnKtbL9yE90CEwMxLEH0XnYTmC8GhYYXGbOS2ZsqzQJaGUaYel3kTwKBgQDpq5Z00hb8EcPF6l34aL+FL9nAxlASXbYJql/UkD8PdhIkoxezkox/UI5jeF+RXbQ+VfuZQa6HfUrBQOcHTmp9o4cInDqoN/DSjvqV3v8Cnjs/PuF+kxFMDJdYPsjkps4IqR24l8nypPCdPHRjCaRnyfOyc1AteB1jYxDxkUmXUwKBgDOu7V76SeKc3RraC7vGlgiZQmXYdcOJ3GiY1f2scWN0h4fZa2fhv8vYcQNObGO7WmM23o1yJR7hB1ZCOYQUYq2ML8aovrNG4DNEWTxCAg4eygYyTM+8Ny65rH2Xw6247MQFuY3FC2BgrcYChge5NlnDAeTQm47qsIZ1WboM2Rk/AoGBAIuT1kSjtd0OE34mV8lpcHVzNsQi8XN3DKTLY4DKRRDMO1wtG5xFPq1SBiu+nH9tlJvjqm1KQaFnIv868IV5vrybsK5g+9y9xZlQlLhvQq5irAtEWVfNK3jc0I6CumdyiAG+WyWHbbcF9UBG+1KpUM46YNpIbS0r4Yobg+R4H5hHAoGBAOCZOg2VFPiluOPWzIcILb6nYvZyPhZP4pzz7WyzBht2SoHcD70cduCQpcuAXbj5JY59gUfNxURCDxQDNW2x8cQs6Hxme1kVg5kZNJAaclfb7Jx+ZqsYk4ua0NqxOtyfhRmYXVaTVKDFNt8CmwoiKYse4VDC/E3yKgha0UdcE+co
## 进件公钥v2 ## 进件公钥v2
pubKeyV2: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7SPkmIUf2auwkgbVchMyfeCDgICuA1GKrSwRbDI24UMVhzDgcIxCUmFG5/DfcPJz0d3oV9Ggkd4/7NmteRvmNnOOGNOnmR6AGEKafDpL1mAdpndmpkAZ0f6OVo3Py5JDg2wt8d+u3dF0AFWwd2rrrqscWvxJVB55DnuZfXl2CyQIDAQAB pubKeyV2: MIGfMA0GCSGqSIb3DQEBAQUAA4GNADCBiQKBgQC7SPkmIUf2auwkgbVchMyfeCDgICuA1GKrSwRbDI24UMVhzDgcIxCUmFG5/DfcPJz0d3oV9Ggkd4/7NmteRvmNnOOGNOnmR6AGEKafDpL1mAdpndmpkAZ0f6OVo3Py5JDg2wt8d+u3dF0AFWwd2rrrqscWvxJVB55DnuZfXl2CyQIDAQAB
## 加密密钥 ## 加密密钥
encryptPwd: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT encryptPwd: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT
oldPayV2: oldPayV2:
@@ -49,7 +49,7 @@ ys-extension:
## 机构号ID ## 机构号ID
src: src:
## 代理商编号 ## 代理商编号
agentNoV2: agentNoV2: 801521000002WJW
## 进件私钥v2 ## 进件私钥v2
priKeyV2: priKeyV2:
## 进件公钥v2 ## 进件公钥v2

View File

@@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDYTCCAkmgAwIBAgIJAN+6gZTEG4TPMA0GCSqGSIb3DQEBCwUAMEkxCzAJBgNV
BAYTAlVTMREwDwYDVQQIEwhzaGFuZ2hhaTERMA8GA1UEBxMIc2hhbmdoYWkxFDAS
BgNVBAMUC2xha2FsYV8yMDIxMB4XDTIxMDYxODA3MjEzNFoXDTMxMDYxOTA3MjEz
NFowSTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCHNoYW5naGFpMREwDwYDVQQHEwhz
aGFuZ2hhaTEUMBIGA1UEAxQLbGFrYWxhXzIwMjEwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDvDBZyHUDndAGxrIcsCV2njhNO3vCEZotTaWYSYwtDvkcA
b1EjsBFabXZaKigpqFXk5XXNI3NIHP9M8XKzIgGvc65NpLAfRjVql8JiTvLyYd1g
IUcOXMInabu+oX7dQSI1mS8XzqaoVRhDZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si
+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbWdhZ+NHwitnQwAJTLBFvfk28INM39G7XO
sXdVLfsooFdglVTOHpNuRiQAj9gShCCNrpGsNQxDiJIxE43qRsNsRwigyo6DPJk/
klgDJa417E2wgP8VrwiXparO4FMzOGK15quuoD7DAgMBAAGjTDBKMAkGA1UdEwQC
MAAwEQYJYIZIAYb4QgEBBAQDAgTwMAsGA1UdDwQEAwIFoDAdBgNVHSUEFjAUBggr
BgEFBQcDAgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAI21YYAlH+Pc1ISv
nbQrGqL8suGL0Hh/8hGaFfrJEJEKr9OeC8jElUhck2MTmfu/Y1lB7r8RBrhGPXi4
kTXmB6ADs/9+ezNW3WXyFj7fhs3JcZ3mo33T9wyQySDKd//JrEtrTsc/s2PZ602y
qNmPomXSzjrlugaMyC7LI9sR44mc7sQnchjHoxrQFD5/usTFW72UQfYCORsQWYMt
0KKEyAcpRL51RE3xbX1WDtduFYGP62PbwLAn2nCL/j1wlF5hltWj7sditWqKgso5
F8BTffn2Bb0RdsNxqwMy1cTPrWLeXVOqMDu3ge7hvoav8lZKTjk5Kmqhs7wNAQXK
mg9qSwo=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGx
rIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M
8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhD
ZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbW
dhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCN
rpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK1
5quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4
mE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7
qCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZK
NXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X
3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAK
TPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk
9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gH
STTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0
Zr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLv
AtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeI
RgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlke
MzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw4
8zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBP
scd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDi
bEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCn
Ll2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEz
NzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3j
Aylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilq
CHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6
QsFLQgFyXgvDnzr/o+hQJelW
-----END PRIVATE KEY-----

View File

@@ -0,0 +1,16 @@
package cn.pluss.platform.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cn.pluss.platform.entity.AccessChannelCipherCode;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
public interface AccessChannelCipherCodeMapper extends BaseMapper<AccessChannelCipherCode> {
default AccessChannelCipherCode selectAllByOrgId(String orgId) {
LambdaQueryWrapper<AccessChannelCipherCode> qWrapper = Wrappers.lambdaQuery();
qWrapper.eq(AccessChannelCipherCode::getOrgId, orgId);
return selectOne(qWrapper);
}
}

View File

@@ -5,6 +5,7 @@ import cn.pluss.platform.entity.UserProfit;
import cn.pluss.platform.vo.*; import cn.pluss.platform.vo.*;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -22,6 +23,14 @@ import java.util.Map;
@Mapper @Mapper
public interface MerchantOrderMapper extends BaseMapper<MerchantOrder> { public interface MerchantOrderMapper extends BaseMapper<MerchantOrder> {
@Select("SELECT SUM(mro.refundAmt) refundFee FROM tb_pluss_merchant_order mo LEFT JOIN \n" +
"tb_pluss_merchant_refund_order mro ON (mo.orderNumber = mro.orderNumber OR mo.orderNumber = mro.refundNo)\n" +
"WHERE mo.snNo = #{snNo} AND mo.`status` = '1' AND mro.`status` = '1' " +
"AND mo.merchantCode = #{merchantCode} AND mro.refundTime LIKE CONCAT(#{date}, '%')")
BigDecimal selectRefundAmt(@Param("merchantCode") String merchantCode, @Param("snNo") String snNo, @Param("date") String date);
Page<MerchantOrder> page(IPage<MerchantOrder> page, @Param("map") Map<String, Object> map, @Param("statusList") List<String> statusList);
/** /**
* 统计一些数值的合计值 * 统计一些数值的合计值
* @return . * @return .

View File

@@ -0,0 +1,9 @@
package cn.pluss.platform.mapper;
import cn.pluss.platform.entity.PlussMerchantLklEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PlussMerchantLklDao extends BaseMapper<PlussMerchantLklEntity> {
}

View File

@@ -0,0 +1,8 @@
package cn.pluss.platform.mapper;
import cn.pluss.platform.entity.TbLklRegionBankInfoEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TbLklRegionBankInfoDao extends BaseMapper<TbLklRegionBankInfoEntity> {
}

View File

@@ -0,0 +1,9 @@
package cn.pluss.platform.mapper;
import cn.pluss.platform.entity.TbPlussBankBranchLklEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TbPlussBankBranchLklMapper extends BaseMapper<TbPlussBankBranchLklEntity> {
}

View File

@@ -0,0 +1,9 @@
package cn.pluss.platform.mapper;
import cn.pluss.platform.entity.TbPlussBankRegionLklEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TbPlussBankRegionLklMapper extends BaseMapper<TbPlussBankRegionLklEntity> {
}

View File

@@ -0,0 +1,9 @@
package cn.pluss.platform.mapper;
import cn.pluss.platform.entity.TbPlussBusinessSmallLklEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TbPlussBusinessSmallLklDao extends BaseMapper<TbPlussBusinessSmallLklEntity> {
}

View File

@@ -0,0 +1,9 @@
package cn.pluss.platform.mapper;
import cn.pluss.platform.entity.TbPlussRegionLklEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TbPlussRegionLklMapper extends BaseMapper<TbPlussRegionLklEntity> {
}

View File

@@ -31,12 +31,20 @@
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<!-- <select id="selectListWithStockWithNoDetail" resultType="cn.pluss.platform.entity.DeviceDetail">-->
<!-- SELECT dd.id, dd.code, dd.venderCode, dd.deviceLogo, dd.venderName, dd.venderModel,-->
<!-- dd.aisleModel, dd.type, dd.groupNo, dd.size, dd.seq, dd.status, dd.createDt, dd.unitPrice,-->
<!-- dd.wholesalePrice, dd.wholesaleMinNum, dd.introDesc, ds.specName typeDesc-->
<!-- FROM tb_pluss_device_detail dd-->
<!-- LEFT JOIN tb_pluss_device_spec ds ON dd.type = ds.spec AND dd.`code` = ds.`code`-->
<!-- ${ew.customSqlSegment}-->
<!-- </select>-->
<select id="selectListWithStockWithNoDetail" resultType="cn.pluss.platform.entity.DeviceDetail"> <select id="selectListWithStockWithNoDetail" resultType="cn.pluss.platform.entity.DeviceDetail">
SELECT dd.id, dd.code, dd.venderCode, dd.deviceLogo, dd.venderName, dd.venderModel, SELECT dd.id, dd.code, dd.venderCode, dd.deviceLogo, dd.venderName, dd.venderModel,
dd.aisleModel, dd.type, dd.groupNo, dd.size, dd.seq, dd.status, dd.createDt, dd.unitPrice, dd.aisleModel, dd.type, dd.groupNo, dd.size, dd.seq, dd.status, dd.createDt, dd.unitPrice,
dd.wholesalePrice, dd.wholesaleMinNum, dd.introDesc, ds.specName typeDesc dd.wholesalePrice, dd.wholesaleMinNum, dd.introDesc, ds.specName typeDesc
FROM tb_pluss_device_detail dd FROM tb_pluss_device_detail dd
LEFT JOIN tb_pluss_device_spec ds ON dd.type = ds.spec AND dd.`code` = ds.`code` LEFT JOIN tb_pluss_device_spec ds ON dd.`code` = ds.`code`
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
</mapper> </mapper>

View File

@@ -15,6 +15,51 @@
</foreach> </foreach>
</insert> </insert>
<select id="page" resultType="cn.pluss.platform.entity.MerchantOrder">
SELECT
IFNULL(mro.orderNumber, mo.orderNumber) orderNumber, mo.merchantCode, mo.merchantName, mo.payTypeCode,
mo.thirdTransNo, mo.consumeFee, mo.createDt, mo.transDt, mo.staffCode, mo.staffName, mo.`status`,
mo.enterFee, mo.remark, mo.updateTime, mo.rate, mo.mercOrderNo, mo.isRecharge, mo.snNo, mo.cashPlaceId,
mo.settlementType, mo.drType, mro.refundAmt, mro.refundTime
FROM
tb_pluss_merchant_order mo
LEFT JOIN tb_pluss_merchant_refund_order mro ON mo.merchantCode = mro.merchantCode
AND (mo.orderNumber = mro.orderNumber OR mo.orderNumber = mro.refundNo) AND mo.`status` = '2'
<where>
<if test="map.merchantCode != null and map.merchantCode != ''">
AND mo.merchantCode = #{map.merchantCode}
</if>
<if test="map.snNo != null and map.snNo != ''">
AND mo.snNo = #{map.snNo}
</if>
<if test="map.createDate != null">
AND (
(mo.createDate LIKE CONCAT(#{map.createDate}, '%') AND mo.status = '1')
OR (mro.refundTime LIKE CONCAT(#{map.createDate}, '%') AND mo.status IN ('2', '6'))
)
</if>
<if test="map.startTime != null">
AND (
(mo.transTime &gt; #{map.startTime} AND mo.status = '1')
OR (mro.refundTime &gt; #{map.startTime} AND mo.status IN ('2', '6'))
)
</if>
<if test="map.endTime != null">
AND (
(mo.transTime &lt; #{map.endTime} AND mo.status = '1')
OR (mro.refundTime &lt; #{map.endTime} AND mo.status IN ('2', '6'))
)
</if>
<if test="statusList != null and statusList.size > 0">
AND mo.`status` IN
<foreach collection="statusList" item="item" close=")" separator="," open="(">
#{item}
</foreach>
</if>
</where>
ORDER BY mo.updateTime
</select>
<select id="queryMerchantOrder" <select id="queryMerchantOrder"
parameterType="cn.pluss.platform.entity.MerchantOrder" parameterType="cn.pluss.platform.entity.MerchantOrder"
resultType="cn.pluss.platform.entity.MerchantOrder"> resultType="cn.pluss.platform.entity.MerchantOrder">

View File

@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
@@ -187,6 +188,7 @@ public class ActivityActivateController extends BaseNoModelController {
@RequestMapping(value = "/saveActivityActivate", method = RequestMethod.POST) @RequestMapping(value = "/saveActivityActivate", method = RequestMethod.POST)
@ResponseBody @ResponseBody
public Map<String, Object> saveActivityActivate(ActivityActivate activityActivate) { public Map<String, Object> saveActivityActivate(ActivityActivate activityActivate) {
Map<String, Object> result = new HashMap<String, Object>(16); Map<String, Object> result = new HashMap<String, Object>(16);
// 通过merchantCode查商户信息 // 通过merchantCode查商户信息
MerchantBaseInfo merchantBaseInfo = new MerchantBaseInfo(); MerchantBaseInfo merchantBaseInfo = new MerchantBaseInfo();

View File

@@ -38,6 +38,7 @@ public class MercOrderDetailController extends BaseModelController<MercOrderDeta
@Resource @Resource
private DeviceTypeMapper deviceTypeMapper; private DeviceTypeMapper deviceTypeMapper;
@GetMapping("/index") @GetMapping("/index")
public String list(HttpServletRequest request) { public String list(HttpServletRequest request) {
List<String> codeList = deviceTypeMapper.selectListCodeByShowFlag(); List<String> codeList = deviceTypeMapper.selectListCodeByShowFlag();

View File

@@ -6,9 +6,11 @@ import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.base.BaseModelController; import cn.pluss.platform.base.BaseModelController;
import cn.pluss.platform.device.DeviceGoodTagService; import cn.pluss.platform.device.DeviceGoodTagService;
import cn.pluss.platform.device.DeviceSpecService;
import cn.pluss.platform.device.DeviceTypeService; import cn.pluss.platform.device.DeviceTypeService;
import cn.pluss.platform.entity.DeviceGoodTag; import cn.pluss.platform.entity.DeviceGoodTag;
import cn.pluss.platform.entity.DeviceGoods; import cn.pluss.platform.entity.DeviceGoods;
import cn.pluss.platform.entity.DeviceSpec;
import cn.pluss.platform.entity.DeviceType; import cn.pluss.platform.entity.DeviceType;
import cn.pluss.platform.util.OssOperatUtil; import cn.pluss.platform.util.OssOperatUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@@ -20,6 +22,7 @@ import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@@ -70,7 +73,8 @@ public class DeviceGoodsController extends BaseModelController<DeviceGoodsServic
return data; return data;
} }
@Resource
DeviceSpecService deviceSpecService;
/** /**
* 数据回显 * 数据回显
*/ */
@@ -82,6 +86,9 @@ public class DeviceGoodsController extends BaseModelController<DeviceGoodsServic
List<DeviceGoodTag> list = deviceGoodTagService.list(); List<DeviceGoodTag> list = deviceGoodTagService.list();
model.addAttribute("deviceGoodTagList", list); model.addAttribute("deviceGoodTagList", list);
List<DeviceSpec> list1 = deviceSpecService.list();
model.addAttribute("list1", list1);
Map<String, String> uploadParam = OssOperatUtil.getUploadParam(); Map<String, String> uploadParam = OssOperatUtil.getUploadParam();
model.addAttribute("uploadParam",uploadParam); model.addAttribute("uploadParam",uploadParam);
if (id != null) { if (id != null) {

View File

@@ -3,7 +3,10 @@ package cn.pluss.platform.controller.home;
import cn.pluss.platform.api.Result; import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.controller.BaseNoModelController; import cn.pluss.platform.controller.BaseNoModelController;
import cn.pluss.platform.device.DeviceSpecService;
import cn.pluss.platform.entitiy.ShiroUser; import cn.pluss.platform.entitiy.ShiroUser;
import cn.pluss.platform.entity.DeviceSpec;
import cn.pluss.platform.entity.DeviceType;
import cn.pluss.platform.entity.MerchantChannelStatus; import cn.pluss.platform.entity.MerchantChannelStatus;
import cn.pluss.platform.entity.PlatformData; import cn.pluss.platform.entity.PlatformData;
import cn.pluss.platform.home.HomeService; import cn.pluss.platform.home.HomeService;
@@ -17,6 +20,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -77,11 +81,24 @@ public class HomeController extends BaseNoModelController {
BigDecimal yestDayNowTransAmt = merchantOrderService.getPlatformAmtYestNowData(date,yestStartDate,yestEndDate); BigDecimal yestDayNowTransAmt = merchantOrderService.getPlatformAmtYestNowData(date,yestStartDate,yestEndDate);
BigDecimal toDayTransCount = orderData.get("toDayTransCount") == null ? BigDecimal.ZERO :BigDecimal.valueOf((double)orderData.get("toDayTransCount")); BigDecimal toDayTransCount = orderData.get("toDayTransCount") == null ? BigDecimal.ZERO :BigDecimal.valueOf((double)orderData.get("toDayTransCount"));
BigDecimal subtract = toDayTransCount.subtract(yestDayNowTransAmt); BigDecimal subtract = toDayTransCount.subtract(yestDayNowTransAmt);
BigDecimal scale = subtract.divide(yestDayNowTransAmt,4,BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)).setScale(2,BigDecimal.ROUND_DOWN); BigDecimal scale;
if((BigDecimal.ZERO).compareTo(yestDayNowTransAmt) == 0){
scale = new BigDecimal("0.00");
}else {
scale = subtract.divide(yestDayNowTransAmt,4,BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)).setScale(2,BigDecimal.ROUND_DOWN);
}
result.putAll(orderData); result.putAll(orderData);
result.putAll(refundData); result.putAll(refundData);
result.putAll(otherData); result.putAll(otherData);
result.putAll(amtData); if(amtData == null){
HashMap<String, Object> amtDataMap = new HashMap<>(16);
amtDataMap.put("toDayProfitCount", 0.00);
amtDataMap.put("toDayShareCount", 0.00);
amtDataMap.put("toDayFansCount", 0.00);
result.putAll(amtDataMap);
} else {
result.putAll(amtData);
}
result.putAll(transData); result.putAll(transData);
PlatformData yesterDayData = platformDataService.censusPlatformData(); PlatformData yesterDayData = platformDataService.censusPlatformData();
result.put("yesterDay",yesterDayData); result.put("yesterDay",yesterDayData);
@@ -121,6 +138,14 @@ public class HomeController extends BaseNoModelController {
return ResultGenerator.genSuccessResult("获取成功",result); return ResultGenerator.genSuccessResult("获取成功",result);
} }
public static void main(String[] args) {
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
objectObjectHashMap.put("toDayProfitCount", "0.00");
objectObjectHashMap.put("toDayShareCount", "0.00");
objectObjectHashMap.put("toDayFansCount", "0.00");
System.out.println(objectObjectHashMap);
}
@PostMapping("/logout") @PostMapping("/logout")
@ResponseBody @ResponseBody
public Map<String, Object> login(HttpServletRequest request) { public Map<String, Object> login(HttpServletRequest request) {
@@ -145,7 +170,6 @@ public class HomeController extends BaseNoModelController {
result.put("loginName", loginName); result.put("loginName", loginName);
return result; return result;
} }
@PostMapping(value = "/getAuditData") @PostMapping(value = "/getAuditData")
@ResponseBody @ResponseBody
public Result<Object> getAuditData() { public Result<Object> getAuditData() {

View File

@@ -4,6 +4,7 @@ import cn.pluss.platform.annotation.PassToken;
import cn.pluss.platform.api.Result; import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.channel.MerchantAuditService; import cn.pluss.platform.channel.MerchantAuditService;
import cn.pluss.platform.channel.ys.YSAuditServiceV3;
import cn.pluss.platform.common.CommonRemarkService; import cn.pluss.platform.common.CommonRemarkService;
import cn.pluss.platform.controller.BaseNoModelController; import cn.pluss.platform.controller.BaseNoModelController;
import cn.pluss.platform.entitiy.ShiroUser; import cn.pluss.platform.entitiy.ShiroUser;
@@ -85,6 +86,8 @@ public class MerchantStoreController extends BaseNoModelController {
@Setter(onMethod_ = {@Autowired, @Qualifier("ysAuditServiceV2")}) @Setter(onMethod_ = {@Autowired, @Qualifier("ysAuditServiceV2")})
private MerchantAuditService ysAuditServiceV2; private MerchantAuditService ysAuditServiceV2;
@Resource
private YSAuditServiceV3 ysAuditServiceV3;
/** /**
@@ -462,8 +465,8 @@ public class MerchantStoreController extends BaseNoModelController {
try { try {
JSONObject params = new JSONObject(); JSONObject params = new JSONObject();
params.put("userId", ua.getUserId() + ""); params.put("userId", ua.getUserId() + "");
ysAuditServiceV2.merchantAudit(ua.getUserId() + "", false); //ysAuditServiceV2.merchantAudit(ua.getUserId() + "", false);
// userAppService.merchantAudit(params, "4"); ysAuditServiceV3.merchantAuditV3(String.valueOf(ua.getUserId()), false); // userAppService.merchantAudit(params, "4");
result.put("code", "1"); result.put("code", "1");
result.put("msg", "发起进件成功, 稍后查看进件状态"); result.put("msg", "发起进件成功, 稍后查看进件状态");
return result; return result;

View File

@@ -1,9 +1,15 @@
spring: spring:
# datasource:
# druid:
# url: jdbc:mysql://60.205.224.68:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&noAccessToProcedureBodies=true&allowMultiQueries=true
# username: root
# password: CZGmysqlroot@123
# driver-class-name: com.mysql.jdbc.Driver
datasource: datasource:
druid: druid:
url: jdbc:mysql://60.205.224.68:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&noAccessToProcedureBodies=true&allowMultiQueries=true url: jdbc:mysql://rm-bp19ib8x213kh9t450o.rwlb.rds.aliyuncs.com:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root username: root
password: CZGmysqlroot@123 password: prodCZGmysqlroot@123
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver
logging: logging:
config: classpath:log4j2-dev.xml config: classpath:log4j2-dev.xml

View File

@@ -1,10 +1,16 @@
spring: spring:
# datasource:
# druid:
# url: jdbc:mysql://rm-bp19ib8x213kh9t45.rwlb.rds.aliyuncs.com:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&noAccessToProcedureBodies=true&allowMultiQueries=true
# username: root
# password: prodCZGmysqlroot@123
# driver-class-name: com.mysql.jdbc.Driver
datasource: datasource:
druid: druid:
url: jdbc:mysql://rm-bp19ib8x213kh9t45.rwlb.rds.aliyuncs.com:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&noAccessToProcedureBodies=true&allowMultiQueries=true url: jdbc:mysql://rm-bp19ib8x213kh9t450o.rwlb.rds.aliyuncs.com:3306/chaozhanggui?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root username: root
password: prodCZGmysqlroot@123 password: prodCZGmysqlroot@123
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver
scheduling: scheduling:
enabled: true enabled: true

View File

@@ -44,6 +44,7 @@
<option value="3" <c:if test="${agreement.discern == 3}">selected</c:if>>隐私协议</option> <option value="3" <c:if test="${agreement.discern == 3}">selected</c:if>>隐私协议</option>
<option value="5" <c:if test="${agreement.discern == 5}">selected</c:if>>应用权限说明</option> <option value="5" <c:if test="${agreement.discern == 5}">selected</c:if>>应用权限说明</option>
<option value="6" <c:if test="${agreement.discern == 6}">selected</c:if>>第三方SDK说明</option> <option value="6" <c:if test="${agreement.discern == 6}">selected</c:if>>第三方SDK说明</option>
<option value="7" <c:if test="${agreement.discern == 7}">selected</c:if>>会员协议</option>
</select> </select>
</div> </div>
</div> </div>

View File

@@ -77,7 +77,28 @@
</div> </div>
</div> </div>
<%-- <div class="layui-form-item">--%>
<%-- <div class="layui-inline">--%>
<%-- <label class="layui-form-label">规格选择:</label>--%>
<%-- <div class="layui-input-inline">--%>
<%-- <select lay-filter="typeSelect1" id="typeSelect1" class="layui-select" autocomplete="off">--%>
<%-- <option value="">请选择</option>--%>
<%-- <c:forEach items="${list1}" var="item">--%>
<%--&lt;%&ndash; <option value="${dict.code}" ${dict.code == entity.code ? 'selected' : ''}>${dict.name}</option>&ndash;%&gt;--%>
<%-- <option value="${item.id}" ${item.id == entity.id ? 'selected' : ''}>${item.specName}</option>--%>
<%-- </c:forEach>--%>
<%-- </select>--%>
<%-- </div>--%>
<%-- <div class="layui-form-mid layui-word-aux">--%>
<%-- <span style="color: red">* 若需添加规格的商品,可以在编码和名称中自定义</span>--%>
<%-- </div>--%>
<%-- </div>--%>
<%-- </div>--%>
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">分类标签:</label> <label class="layui-form-label">分类标签:</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
@@ -328,6 +349,17 @@
} else { } else {
$("input[name = 'codeName']").val(""); $("input[name = 'codeName']").val("");
} }
});
form.on("select(typeSelect1)", function(data) {
console.log("aaaaa");
console.log(data.othis);
console.log(data.value);
$("input[name = 'code']").val(data.value);
if (data.value != "") {
$("input[name = 'codeName']").val(data.elem[data.elem.selectedIndex].text);
} else {
$("input[name = 'codeName']").val("");
}
}) })
}); });

View File

@@ -64,8 +64,8 @@ public class DeviceMerchantBuyDTO {
public Map<String, String> convert(String orderNo) { public Map<String, String> convert(String orderNo) {
Map<String, String> result = new HashMap<String, String>(16); Map<String, String> result = new HashMap<String, String>(16);
result.put("body", "收银商品订单支付"); result.put("body", "快银收银商品订单支付");
result.put("subject", "收银商品订单支付"); result.put("subject", "快银收银商品订单支付");
result.put("outTradeNo", orderNo); result.put("outTradeNo", orderNo);
result.put("totalAmount", orderAmount + ""); result.put("totalAmount", orderAmount + "");
return result; return result;

View File

@@ -88,6 +88,7 @@ public class MerChantOrderDTO {
private MerchantMemberCode mercMenberCode; private MerchantMemberCode mercMenberCode;
private String MercOrderNo;
/** /**
* 参数转换 * 参数转换

View File

@@ -0,0 +1,54 @@
package cn.pluss.platform.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* CREATE TABLE `tb_pluss_access_channel_cipher_code` (
* `id` int(11) NOT NULL AUTO_INCREMENT,
* `orgId` varchar(50) DEFAULT NULL COMMENT '机构号id',
* `priKey` longtext COMMENT '私钥,用于返回(回调)数据签名;以及渠道数据解密',
* `pubKey` longtext COMMENT '公钥加密,给到渠道接口数据加密',
* `orgPubKey` longtext COMMENT '机构公钥',
* `orgPriKey` longtext COMMENT '机构私钥,测试使用字段',
* `createTime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
* PRIMARY KEY (`id`) USING BTREE,
* KEY `uniq` (`orgId`) USING BTREE
* ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='接入渠道秘钥表';
*/
@Setter
@Getter
public class AccessChannelCipherCode {
@TableId
private Long id;
private String orgId;
/**
* 平台私钥
*/
private String priKey;
/**
* 平台公钥
*/
private String pubKey;
/**
* 机构公钥
*/
private String orgPubKey;
/**
* 机构私钥
*/
private String orgPriKey;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@@ -225,6 +225,8 @@ public class MerchantOrder {
*/ */
private BigDecimal mercFee; private BigDecimal mercFee;
private String thirdSendNo;
/** /**
* 节约金额 * 节约金额
*/ */

View File

@@ -0,0 +1,15 @@
package cn.pluss.platform.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@TableName("tb_pluss_merchant_lkl")
@Data
public class PlussMerchantLklEntity {
@TableField("merchantId")
private String merchantId;
@TableField("merchantlkl")
private String merchantlkl;
@TableField("type")
private String type;
}

View File

@@ -0,0 +1,28 @@
package cn.pluss.platform.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@TableName("tb_lkl_region_bank_info")
@Data
public class TbLklRegionBankInfoEntity {
@TableField("s_code")
private String sCode;
@TableField("s_name")
private String sName;
@TableField("r_code")
private String rCode;
@TableField("r_name")
private String rName;
@TableField("clear_no")
private String clearNo;
@TableField("area_code")
private String areaCode;
@TableField("branch_bank_no")
private String branchBankNo;
@TableField("branch_bank_name")
private String branchBankName;
@TableField("bank_no")
private String bankNo;
}

View File

@@ -0,0 +1,28 @@
package cn.pluss.platform.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("tb_pluss_bank_branch_lkl")
public class TbPlussBankBranchLklEntity {
@TableField("id")
private String id;
@TableField("create_time")
private String createTime;
@TableField("optimistic")
private String optimistic;
@TableField("update_time")
private String updateTime;
@TableField("area_code")
private String areaCode;
@TableField("bank_no")
private String bankNo;
@TableField("branch_bank_name")
private String branchBankName;
@TableField("branch_bank_no")
private String branchBankNo;
@TableField("clear_no")
private String clearNo;
}

View File

@@ -0,0 +1,24 @@
package cn.pluss.platform.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("tb_pluss_bank_region_lkl")
public class TbPlussBankRegionLklEntity {
@TableField("id")
private String id;
@TableField("create_time")
private String createTime;
@TableField("optimistic")
private String optimistic;
@TableField("update_time")
private String updateTime;
@TableField("code")
private String code;
@TableField("name")
private String name;
@TableField("parent_code")
private String parentCode;
}

View File

@@ -0,0 +1,23 @@
package cn.pluss.platform.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@TableName("tb_pluss_business_small_lkl")
@Data
public class TbPlussBusinessSmallLklEntity {
@TableField("id")
private String id;
@TableField("create_time")
private String createTime;
@TableField("optimistic")
private String optimistic;
@TableField("update_time")
private String updateTime;
@TableField("code")
private String code;
@TableField("name")
private String name;
@TableField("parent_code")
private String parentCode;
}

View File

@@ -0,0 +1,24 @@
package cn.pluss.platform.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("tb_pluss_region_lkl")
public class TbPlussRegionLklEntity {
@TableField("id")
private String id;
@TableField("create_time")
private String createTime;
@TableField("optimistic")
private String optimistic;
@TableField("update_time")
private String updateTime;
@TableField("code")
private String code;
@TableField("name")
private String name;
@TableField("parent_code")
private String parentCode;
}

View File

@@ -13,8 +13,9 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum LogisticProvider { public enum LogisticProvider {
YTO("YTO","圆通快递"); YTO("YTO","圆通快递"),
STO("STO", "申通快递"),
HTKY("HTKY", "百世快递");
private String code; private String code;
private String desc; private String desc;

View File

@@ -32,7 +32,7 @@ public class DeviceOperateInfoVO extends DeviceOperateInfo {
public String getDesc() { public String getDesc() {
String type = this.getType(); String type = this.getType();
if(DeviceOperateType.IN.getCode().equals(type)){ if(DeviceOperateType.IN.getCode().equals(type)){
this.desc = "收银设备入库"; this.desc = "快银收银设备入库";
} }
if(DeviceOperateType.TRANSFER.getCode().equals(type)){ if(DeviceOperateType.TRANSFER.getCode().equals(type)){
this.desc = this.getRemark(); this.desc = this.getRemark();

View File

@@ -50,7 +50,7 @@ public class DeviceTransferVO extends DeviceTransfer {
public String getUserName() { public String getUserName() {
if(StringUtil.isEmpty(this.userName)){ if(StringUtil.isEmpty(this.userName)){
this.userName = "收银"; this.userName = "快银收银";
} }
return userName; return userName;
} }

View File

@@ -0,0 +1,26 @@
package cn.pluss.platform.vo;
import lombok.Getter;
import lombok.Setter;
/**
* @author lyf
*/
@Getter
@Setter
public class MerchantOrderPosVO {
/**
* sxfPay0 支付宝支付, sxfPay1 微信支付
*/
private String payTypeCode;
/**
* 消费金额
*/
private Double consumeFee;
/**
* 交易状态 0:交易失败 1:交易成功 2退款成功 3退款失败 4退款中 5:待付款 6部分退款 7:待确认
*/
private String status;
}

View File

@@ -0,0 +1,37 @@
package cn.pluss.platform.converter;
import cn.pluss.platform.dto.BankInfoDTO;
import cn.pluss.platform.entity.BankCard;
import javax.annotation.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-05-04T16:00:25+0800",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_191 (Oracle Corporation)"
)
public class BankCardConverterImpl implements BankCardConverter {
@Override
public BankCard dto2Domain(BankInfoDTO bankInfoDTO) {
if ( bankInfoDTO == null ) {
return null;
}
BankCard bankCard = new BankCard();
bankCard.setUserId( bankInfoDTO.getUserId() );
bankCard.setBankCardNo( bankInfoDTO.getBankCardNo() );
bankCard.setBankName( bankInfoDTO.getBankName() );
bankCard.setBranchName( bankInfoDTO.getBranchName() );
bankCard.setAccountType( bankInfoDTO.getAccountType() );
bankCard.setContactLine( bankInfoDTO.getContactLine() );
bankCard.setBranchProvince( bankInfoDTO.getBranchProvince() );
bankCard.setBranchCity( bankInfoDTO.getBranchCity() );
bankCard.setBranchArea( bankInfoDTO.getBranchArea() );
bankCard.setBankAddressNo( bankInfoDTO.getBankAddressNo() );
bankCard.setPhone( bankInfoDTO.getPhone() );
bankCard.setImgUrl( bankInfoDTO.getImgUrl() );
return bankCard;
}
}

View File

@@ -0,0 +1,43 @@
package cn.pluss.platform.converter;
import cn.pluss.platform.entity.MerchantImage;
import javax.annotation.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-05-04T16:00:25+0800",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_191 (Oracle Corporation)"
)
public class ImgConverterImpl implements ImgConverter {
@Override
public MerchantImage imgCopy(MerchantImage merchantImage) {
if ( merchantImage == null ) {
return null;
}
MerchantImage merchantImage1 = new MerchantImage();
merchantImage1.setId( merchantImage.getId() );
merchantImage1.setMerchantCode( merchantImage.getMerchantCode() );
merchantImage1.setPhotoType( merchantImage.getPhotoType() );
merchantImage1.setPhotoUrl( merchantImage.getPhotoUrl() );
merchantImage1.setPicUrl( merchantImage.getPicUrl() );
merchantImage1.setPicUrl1( merchantImage.getPicUrl1() );
merchantImage1.setPicUrl2( merchantImage.getPicUrl2() );
merchantImage1.setPicUrl3( merchantImage.getPicUrl3() );
merchantImage1.setPicUrl6( merchantImage.getPicUrl6() );
merchantImage1.setPicUrl7( merchantImage.getPicUrl7() );
merchantImage1.setPicUrl8( merchantImage.getPicUrl8() );
merchantImage1.setPicUrl9( merchantImage.getPicUrl9() );
merchantImage1.setPicUrl999( merchantImage.getPicUrl999() );
merchantImage1.setPicUrl101( merchantImage.getPicUrl101() );
merchantImage1.setPicUrl102( merchantImage.getPicUrl102() );
merchantImage1.setPicUrl11( merchantImage.getPicUrl11() );
merchantImage1.setCreateDt( merchantImage.getCreateDt() );
merchantImage1.setUpdateDt( merchantImage.getUpdateDt() );
merchantImage1.setAisleSwitch( merchantImage.getAisleSwitch() );
return merchantImage1;
}
}

View File

@@ -0,0 +1,314 @@
package cn.pluss.platform.converter;
import cn.pluss.platform.dto.MerchantBaseInfoDTO;
import cn.pluss.platform.entity.MerchantBaseInfo;
import cn.pluss.platform.entity.MerchantStore;
import cn.pluss.platform.entity.UserApp;
import cn.pluss.platform.vo.MerchantBaseInfoVO;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-05-04T16:00:26+0800",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_191 (Oracle Corporation)"
)
public class MerchantBaseInfoConverterImpl implements MerchantBaseInfoConverter {
@Override
public MerchantBaseInfoDTO domain2dto(MerchantBaseInfo entity) {
if ( entity == null ) {
return null;
}
MerchantBaseInfoDTO merchantBaseInfoDTO = new MerchantBaseInfoDTO();
merchantBaseInfoDTO.setId( entity.getId() );
merchantBaseInfoDTO.setUserId( entity.getUserId() );
merchantBaseInfoDTO.setMerchantName( entity.getMerchantName() );
merchantBaseInfoDTO.setMerchantType( entity.getMerchantType() );
merchantBaseInfoDTO.setAlias( entity.getAlias() );
merchantBaseInfoDTO.setMcc( entity.getMcc() );
merchantBaseInfoDTO.setMccName( entity.getMccName() );
merchantBaseInfoDTO.setAliAccount( entity.getAliAccount() );
merchantBaseInfoDTO.setProductDesc( entity.getProductDesc() );
merchantBaseInfoDTO.setAddressNo( entity.getAddressNo() );
merchantBaseInfoDTO.setMerchantAddress( entity.getMerchantAddress() );
merchantBaseInfoDTO.setAddress( entity.getAddress() );
merchantBaseInfoDTO.setContactMobile( entity.getContactMobile() );
merchantBaseInfoDTO.setContactName( entity.getContactName() );
merchantBaseInfoDTO.setEmail( entity.getEmail() );
merchantBaseInfoDTO.setStoreHeadPic( entity.getStoreHeadPic() );
merchantBaseInfoDTO.setStoreInsidePic( entity.getStoreInsidePic() );
merchantBaseInfoDTO.setCashPic( entity.getCashPic() );
merchantBaseInfoDTO.setUserPhone( entity.getUserPhone() );
return merchantBaseInfoDTO;
}
@Override
public MerchantBaseInfoVO domain2VO(MerchantBaseInfo entity) {
if ( entity == null ) {
return null;
}
MerchantBaseInfoVO merchantBaseInfoVO = new MerchantBaseInfoVO();
merchantBaseInfoVO.setId( entity.getId() );
merchantBaseInfoVO.setBindingCode( entity.getBindingCode() );
merchantBaseInfoVO.setUserId( entity.getUserId() );
merchantBaseInfoVO.setAliAccount( entity.getAliAccount() );
merchantBaseInfoVO.setMerchantCode( entity.getMerchantCode() );
merchantBaseInfoVO.setMerchantName( entity.getMerchantName() );
merchantBaseInfoVO.setMerchantType( entity.getMerchantType() );
merchantBaseInfoVO.setProductDesc( entity.getProductDesc() );
merchantBaseInfoVO.setAliMcc( entity.getAliMcc() );
merchantBaseInfoVO.setMcc( entity.getMcc() );
merchantBaseInfoVO.setMccName( entity.getMccName() );
merchantBaseInfoVO.setAlias( entity.getAlias() );
merchantBaseInfoVO.setContactMobile( entity.getContactMobile() );
merchantBaseInfoVO.setContactName( entity.getContactName() );
merchantBaseInfoVO.setAddressNo( entity.getAddressNo() );
merchantBaseInfoVO.setProvince( entity.getProvince() );
merchantBaseInfoVO.setCity( entity.getCity() );
merchantBaseInfoVO.setDistrict( entity.getDistrict() );
merchantBaseInfoVO.setAddress( entity.getAddress() );
merchantBaseInfoVO.setEmail( entity.getEmail() );
merchantBaseInfoVO.setPrincipalMobile( entity.getPrincipalMobile() );
merchantBaseInfoVO.setPrincipalCertType( entity.getPrincipalCertType() );
merchantBaseInfoVO.setPrincipalCertNo( entity.getPrincipalCertNo() );
merchantBaseInfoVO.setPrincipalPerson( entity.getPrincipalPerson() );
merchantBaseInfoVO.setBussAuthName( entity.getBussAuthName() );
merchantBaseInfoVO.setBussAuthNum( entity.getBussAuthNum() );
merchantBaseInfoVO.setBussAuthAddress( entity.getBussAuthAddress() );
merchantBaseInfoVO.setBussAuthStartTime( entity.getBussAuthStartTime() );
merchantBaseInfoVO.setBussAuthEndTime( entity.getBussAuthEndTime() );
merchantBaseInfoVO.setAllowBankLarge( entity.getAllowBankLarge() );
merchantBaseInfoVO.setWxCertStatus( entity.getWxCertStatus() );
merchantBaseInfoVO.setCreateDt( entity.getCreateDt() );
merchantBaseInfoVO.setUpdateDt( entity.getUpdateDt() );
merchantBaseInfoVO.setBuslicType( entity.getBuslicType() );
merchantBaseInfoVO.setIsVoice( entity.getIsVoice() );
merchantBaseInfoVO.setIsPushWxMessage( entity.getIsPushWxMessage() );
merchantBaseInfoVO.setIsUnionPay( entity.getIsUnionPay() );
merchantBaseInfoVO.setMd5Key( entity.getMd5Key() );
merchantBaseInfoVO.setLimitPay( entity.getLimitPay() );
merchantBaseInfoVO.setSubAppId( entity.getSubAppId() );
merchantBaseInfoVO.setAppid( entity.getAppid() );
merchantBaseInfoVO.setStatus( entity.getStatus() );
merchantBaseInfoVO.setMerchantAddress( entity.getMerchantAddress() );
merchantBaseInfoVO.setStoreHeadPic( entity.getStoreHeadPic() );
merchantBaseInfoVO.setStoreInsidePic( entity.getStoreInsidePic() );
merchantBaseInfoVO.setCashPic( entity.getCashPic() );
merchantBaseInfoVO.setLiteralPic( entity.getLiteralPic() );
merchantBaseInfoVO.setWarrantyPic( entity.getWarrantyPic() );
merchantBaseInfoVO.setDealPic( entity.getDealPic() );
merchantBaseInfoVO.setAffilatePic( entity.getAffilatePic() );
merchantBaseInfoVO.setHandPic( entity.getHandPic() );
merchantBaseInfoVO.setMerchantAuditStatus( entity.getMerchantAuditStatus() );
merchantBaseInfoVO.setStartTime( entity.getStartTime() );
merchantBaseInfoVO.setEndTime( entity.getEndTime() );
merchantBaseInfoVO.setImgUrl( entity.getImgUrl() );
merchantBaseInfoVO.setLoginName( entity.getLoginName() );
merchantBaseInfoVO.setPassword( entity.getPassword() );
merchantBaseInfoVO.setLogo( entity.getLogo() );
merchantBaseInfoVO.setUserPhone( entity.getUserPhone() );
merchantBaseInfoVO.setUserName( entity.getUserName() );
merchantBaseInfoVO.setBusinessLicensePic( entity.getBusinessLicensePic() );
merchantBaseInfoVO.setLocation( entity.getLocation() );
merchantBaseInfoVO.setFirstTradeTime( entity.getFirstTradeTime() );
merchantBaseInfoVO.setLastTradeTime( entity.getLastTradeTime() );
merchantBaseInfoVO.setSplitFlag( entity.getSplitFlag() );
merchantBaseInfoVO.setValidFlag( entity.getValidFlag() );
return merchantBaseInfoVO;
}
@Override
public MerchantBaseInfo vo2domain(MerchantBaseInfoVO entity) {
if ( entity == null ) {
return null;
}
MerchantBaseInfo merchantBaseInfo = new MerchantBaseInfo();
merchantBaseInfo.setId( entity.getId() );
merchantBaseInfo.setBindingCode( entity.getBindingCode() );
merchantBaseInfo.setUserId( entity.getUserId() );
merchantBaseInfo.setAliAccount( entity.getAliAccount() );
merchantBaseInfo.setMerchantCode( entity.getMerchantCode() );
merchantBaseInfo.setMerchantName( entity.getMerchantName() );
merchantBaseInfo.setMerchantType( entity.getMerchantType() );
merchantBaseInfo.setProductDesc( entity.getProductDesc() );
merchantBaseInfo.setAliMcc( entity.getAliMcc() );
merchantBaseInfo.setMcc( entity.getMcc() );
merchantBaseInfo.setMccName( entity.getMccName() );
merchantBaseInfo.setAlias( entity.getAlias() );
merchantBaseInfo.setContactMobile( entity.getContactMobile() );
merchantBaseInfo.setContactName( entity.getContactName() );
merchantBaseInfo.setAddressNo( entity.getAddressNo() );
merchantBaseInfo.setProvince( entity.getProvince() );
merchantBaseInfo.setCity( entity.getCity() );
merchantBaseInfo.setDistrict( entity.getDistrict() );
merchantBaseInfo.setAddress( entity.getAddress() );
merchantBaseInfo.setEmail( entity.getEmail() );
merchantBaseInfo.setPrincipalMobile( entity.getPrincipalMobile() );
merchantBaseInfo.setPrincipalCertType( entity.getPrincipalCertType() );
merchantBaseInfo.setPrincipalCertNo( entity.getPrincipalCertNo() );
merchantBaseInfo.setPrincipalPerson( entity.getPrincipalPerson() );
merchantBaseInfo.setBussAuthName( entity.getBussAuthName() );
merchantBaseInfo.setBussAuthNum( entity.getBussAuthNum() );
merchantBaseInfo.setBussAuthAddress( entity.getBussAuthAddress() );
merchantBaseInfo.setBussAuthStartTime( entity.getBussAuthStartTime() );
merchantBaseInfo.setBussAuthEndTime( entity.getBussAuthEndTime() );
merchantBaseInfo.setAllowBankLarge( entity.getAllowBankLarge() );
merchantBaseInfo.setWxCertStatus( entity.getWxCertStatus() );
merchantBaseInfo.setCreateDt( entity.getCreateDt() );
merchantBaseInfo.setUpdateDt( entity.getUpdateDt() );
merchantBaseInfo.setBuslicType( entity.getBuslicType() );
merchantBaseInfo.setIsVoice( entity.getIsVoice() );
merchantBaseInfo.setIsPushWxMessage( entity.getIsPushWxMessage() );
merchantBaseInfo.setIsUnionPay( entity.getIsUnionPay() );
merchantBaseInfo.setMd5Key( entity.getMd5Key() );
merchantBaseInfo.setLimitPay( entity.getLimitPay() );
merchantBaseInfo.setSubAppId( entity.getSubAppId() );
merchantBaseInfo.setAppid( entity.getAppid() );
merchantBaseInfo.setStatus( entity.getStatus() );
merchantBaseInfo.setMerchantAddress( entity.getMerchantAddress() );
merchantBaseInfo.setStoreHeadPic( entity.getStoreHeadPic() );
merchantBaseInfo.setStoreInsidePic( entity.getStoreInsidePic() );
merchantBaseInfo.setCashPic( entity.getCashPic() );
merchantBaseInfo.setLiteralPic( entity.getLiteralPic() );
merchantBaseInfo.setWarrantyPic( entity.getWarrantyPic() );
merchantBaseInfo.setDealPic( entity.getDealPic() );
merchantBaseInfo.setAffilatePic( entity.getAffilatePic() );
merchantBaseInfo.setHandPic( entity.getHandPic() );
merchantBaseInfo.setMerchantAuditStatus( entity.getMerchantAuditStatus() );
merchantBaseInfo.setStartTime( entity.getStartTime() );
merchantBaseInfo.setEndTime( entity.getEndTime() );
merchantBaseInfo.setImgUrl( entity.getImgUrl() );
merchantBaseInfo.setLoginName( entity.getLoginName() );
merchantBaseInfo.setPassword( entity.getPassword() );
merchantBaseInfo.setLogo( entity.getLogo() );
merchantBaseInfo.setUserPhone( entity.getUserPhone() );
merchantBaseInfo.setUserName( entity.getUserName() );
merchantBaseInfo.setBusinessLicensePic( entity.getBusinessLicensePic() );
merchantBaseInfo.setLocation( entity.getLocation() );
merchantBaseInfo.setFirstTradeTime( entity.getFirstTradeTime() );
merchantBaseInfo.setLastTradeTime( entity.getLastTradeTime() );
merchantBaseInfo.setSplitFlag( entity.getSplitFlag() );
merchantBaseInfo.setValidFlag( entity.getValidFlag() );
return merchantBaseInfo;
}
@Override
public MerchantBaseInfo dto2Domain(MerchantBaseInfoDTO dto) {
if ( dto == null ) {
return null;
}
MerchantBaseInfo merchantBaseInfo = new MerchantBaseInfo();
merchantBaseInfo.setId( dto.getId() );
merchantBaseInfo.setUserId( dto.getUserId() );
merchantBaseInfo.setAliAccount( dto.getAliAccount() );
merchantBaseInfo.setMerchantName( dto.getMerchantName() );
merchantBaseInfo.setMerchantType( dto.getMerchantType() );
merchantBaseInfo.setProductDesc( dto.getProductDesc() );
merchantBaseInfo.setMcc( dto.getMcc() );
merchantBaseInfo.setMccName( dto.getMccName() );
merchantBaseInfo.setAlias( dto.getAlias() );
merchantBaseInfo.setContactMobile( dto.getContactMobile() );
merchantBaseInfo.setContactName( dto.getContactName() );
merchantBaseInfo.setAddressNo( dto.getAddressNo() );
merchantBaseInfo.setAddress( dto.getAddress() );
merchantBaseInfo.setEmail( dto.getEmail() );
merchantBaseInfo.setMerchantAddress( dto.getMerchantAddress() );
merchantBaseInfo.setStoreHeadPic( dto.getStoreHeadPic() );
merchantBaseInfo.setStoreInsidePic( dto.getStoreInsidePic() );
merchantBaseInfo.setCashPic( dto.getCashPic() );
merchantBaseInfo.setUserPhone( dto.getUserPhone() );
return merchantBaseInfo;
}
@Override
public MerchantStore baseInfo2StoreInfo(MerchantBaseInfo entity) {
if ( entity == null ) {
return null;
}
MerchantStore merchantStore = new MerchantStore();
merchantStore.setStoreName( entity.getAlias() );
merchantStore.setMerchantName( entity.getAlias() );
if ( entity.getId() != null ) {
merchantStore.setId( entity.getId().intValue() );
}
merchantStore.setMerchantCode( entity.getMerchantCode() );
merchantStore.setCreateDt( entity.getCreateDt() );
merchantStore.setStatus( entity.getStatus() );
merchantStore.setEmail( entity.getEmail() );
merchantStore.setStoreHeadPic( entity.getStoreHeadPic() );
merchantStore.setStoreInsidePic( entity.getStoreInsidePic() );
merchantStore.setCashPic( entity.getCashPic() );
merchantStore.setProductDesc( entity.getProductDesc() );
merchantStore.setMerchantType( entity.getMerchantType() );
merchantStore.setStartTime( entity.getStartTime() );
merchantStore.setEndTime( entity.getEndTime() );
merchantStore.setAlias( entity.getAlias() );
return merchantStore;
}
@Override
public UserApp baseInfo2UserApp(MerchantBaseInfo entity) {
if ( entity == null ) {
return null;
}
UserApp userApp = new UserApp();
userApp.setId( entity.getId() );
userApp.setLoginName( entity.getLoginName() );
if ( entity.getUserId() != null ) {
userApp.setUserId( Long.parseLong( entity.getUserId() ) );
}
userApp.setUserName( entity.getUserName() );
userApp.setLogo( entity.getLogo() );
userApp.setCreateDt( entity.getCreateDt() );
userApp.setUpdateDt( entity.getUpdateDt() );
if ( entity.getStatus() != null ) {
userApp.setStatus( Integer.parseInt( entity.getStatus() ) );
}
userApp.setMerchantCode( entity.getMerchantCode() );
userApp.setMerchantName( entity.getMerchantName() );
userApp.setContactName( entity.getContactName() );
userApp.setProductDesc( entity.getProductDesc() );
userApp.setBussAuthNum( entity.getBussAuthNum() );
userApp.setIsVoice( entity.getIsVoice() );
userApp.setIsUnionPay( entity.getIsUnionPay() );
userApp.setPassword( entity.getPassword() );
userApp.setMerchantType( entity.getMerchantType() );
userApp.setAlias( entity.getAlias() );
userApp.setMerchantAuditStatus( entity.getMerchantAuditStatus() );
return userApp;
}
@Override
public List<MerchantBaseInfoDTO> domain2dto(List<MerchantBaseInfo> entityList) {
if ( entityList == null ) {
return null;
}
List<MerchantBaseInfoDTO> list = new ArrayList<MerchantBaseInfoDTO>( entityList.size() );
for ( MerchantBaseInfo merchantBaseInfo : entityList ) {
list.add( domain2dto( merchantBaseInfo ) );
}
return list;
}
}

View File

@@ -0,0 +1,33 @@
package cn.pluss.platform.converter;
import cn.pluss.platform.entity.MerchantCashPlace;
import cn.pluss.platform.vo.MerchantCashPlaceVO;
import javax.annotation.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-05-04T16:00:25+0800",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_191 (Oracle Corporation)"
)
public class MerchantCashPlaceConverterImpl implements MerchantCashPlaceConverter {
@Override
public MerchantCashPlaceVO entity2VO(MerchantCashPlace merchantCashPlace) {
if ( merchantCashPlace == null ) {
return null;
}
MerchantCashPlaceVO merchantCashPlaceVO = new MerchantCashPlaceVO();
merchantCashPlaceVO.setId( merchantCashPlace.getId() );
merchantCashPlaceVO.setUserId( merchantCashPlace.getUserId() );
merchantCashPlaceVO.setName( merchantCashPlace.getName() );
merchantCashPlaceVO.setCode( merchantCashPlace.getCode() );
merchantCashPlaceVO.setAddress( merchantCashPlace.getAddress() );
merchantCashPlaceVO.setRemark( merchantCashPlace.getRemark() );
merchantCashPlaceVO.setCreateTime( merchantCashPlace.getCreateTime() );
merchantCashPlaceVO.setUpdateTime( merchantCashPlace.getUpdateTime() );
return merchantCashPlaceVO;
}
}

View File

@@ -0,0 +1,30 @@
package cn.pluss.platform.converter;
import cn.pluss.platform.dto.MerchantStaffDTO;
import cn.pluss.platform.entity.UserInfo;
import javax.annotation.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-05-04T16:00:25+0800",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_191 (Oracle Corporation)"
)
public class MerchantStaffConverterImpl implements MerchantStaffConverter {
@Override
public UserInfo toUserInfo(MerchantStaffDTO merchantStaffDTO) {
if ( merchantStaffDTO == null ) {
return null;
}
UserInfo userInfo = new UserInfo();
userInfo.setId( merchantStaffDTO.getUserId() );
userInfo.setLoginName( merchantStaffDTO.getLoginName() );
userInfo.setPhone( merchantStaffDTO.getPhone() );
userInfo.setPassword( merchantStaffDTO.getPassword() );
userInfo.setMerchantCode( merchantStaffDTO.getMerchantCode() );
return userInfo;
}
}

View File

@@ -0,0 +1,151 @@
package cn.pluss.platform.converter;
import cn.pluss.platform.entity.MerchantBaseInfo;
import cn.pluss.platform.entity.MerchantStore;
import cn.pluss.platform.entity.UserApp;
import cn.pluss.platform.entity.UserInfo;
import java.text.SimpleDateFormat;
import javax.annotation.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-05-04T16:00:25+0800",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_191 (Oracle Corporation)"
)
public class UserAppConverterImpl implements UserAppConverter {
@Override
public void copyProperties(MerchantStore merchantStore, UserApp userApp) {
if ( merchantStore == null ) {
return;
}
if ( merchantStore.getId() != null ) {
userApp.setStoreId2( String.valueOf( merchantStore.getId() ) );
}
if ( merchantStore.getCreateDt() != null ) {
userApp.setCreateDt( merchantStore.getCreateDt() );
}
if ( merchantStore.getMerchantCode() != null ) {
userApp.setMerchantCode( merchantStore.getMerchantCode() );
}
if ( merchantStore.getMerchantName() != null ) {
userApp.setMerchantName( merchantStore.getMerchantName() );
}
if ( merchantStore.getStoreName() != null ) {
userApp.setStoreName( merchantStore.getStoreName() );
}
if ( merchantStore.getStoreId() != null ) {
userApp.setStoreId( merchantStore.getStoreId() );
}
if ( merchantStore.getProductDesc() != null ) {
userApp.setProductDesc( merchantStore.getProductDesc() );
}
if ( merchantStore.getPayEcdemicSwitch() != null ) {
userApp.setPayEcdemicSwitch( merchantStore.getPayEcdemicSwitch() );
}
if ( merchantStore.getIsMarket() != null ) {
userApp.setIsMarket( merchantStore.getIsMarket() );
}
if ( merchantStore.getMerchantType() != null ) {
userApp.setMerchantType( merchantStore.getMerchantType() );
}
if ( merchantStore.getAlias() != null ) {
userApp.setAlias( merchantStore.getAlias() );
}
if ( merchantStore.getMcsStatus() != null ) {
userApp.setMcsStatus( merchantStore.getMcsStatus() );
}
}
@Override
public void copyProperties(MerchantBaseInfo merchantBaseInfo, UserApp userApp) {
if ( merchantBaseInfo == null ) {
return;
}
if ( merchantBaseInfo.getAlias() != null ) {
userApp.setMerchantName( merchantBaseInfo.getAlias() );
}
if ( merchantBaseInfo.getId() != null ) {
userApp.setMercId( merchantBaseInfo.getId() );
}
if ( merchantBaseInfo.getLoginName() != null ) {
userApp.setLoginName( merchantBaseInfo.getLoginName() );
}
if ( merchantBaseInfo.getUserId() != null ) {
userApp.setUserId( Long.parseLong( merchantBaseInfo.getUserId() ) );
}
if ( merchantBaseInfo.getUserName() != null ) {
userApp.setUserName( merchantBaseInfo.getUserName() );
}
if ( merchantBaseInfo.getLogo() != null ) {
userApp.setLogo( merchantBaseInfo.getLogo() );
}
if ( merchantBaseInfo.getCreateDt() != null ) {
userApp.setCreateDt( merchantBaseInfo.getCreateDt() );
}
if ( merchantBaseInfo.getUpdateDt() != null ) {
userApp.setUpdateDt( merchantBaseInfo.getUpdateDt() );
}
if ( merchantBaseInfo.getMerchantCode() != null ) {
userApp.setMerchantCode( merchantBaseInfo.getMerchantCode() );
}
if ( merchantBaseInfo.getContactName() != null ) {
userApp.setContactName( merchantBaseInfo.getContactName() );
}
if ( merchantBaseInfo.getProductDesc() != null ) {
userApp.setProductDesc( merchantBaseInfo.getProductDesc() );
}
if ( merchantBaseInfo.getBussAuthNum() != null ) {
userApp.setBussAuthNum( merchantBaseInfo.getBussAuthNum() );
}
if ( merchantBaseInfo.getIsVoice() != null ) {
userApp.setIsVoice( merchantBaseInfo.getIsVoice() );
}
if ( merchantBaseInfo.getIsUnionPay() != null ) {
userApp.setIsUnionPay( merchantBaseInfo.getIsUnionPay() );
}
if ( merchantBaseInfo.getPassword() != null ) {
userApp.setPassword( merchantBaseInfo.getPassword() );
}
if ( merchantBaseInfo.getMerchantType() != null ) {
userApp.setMerchantType( merchantBaseInfo.getMerchantType() );
}
if ( merchantBaseInfo.getAlias() != null ) {
userApp.setAlias( merchantBaseInfo.getAlias() );
}
if ( merchantBaseInfo.getMerchantAuditStatus() != null ) {
userApp.setMerchantAuditStatus( merchantBaseInfo.getMerchantAuditStatus() );
}
}
@Override
public UserApp toUserApp(UserInfo userInfo) {
if ( userInfo == null ) {
return null;
}
UserApp userApp = new UserApp();
userApp.setCreateDt( userInfo.getCreateTime() );
userApp.setUserId( userInfo.getId() );
userApp.setLoginName( userInfo.getLoginName() );
userApp.setStatus( userInfo.getStatus() );
if ( userInfo.getParentId() != null ) {
userApp.setParentId( userInfo.getParentId().longValue() );
}
userApp.setPhone( userInfo.getPhone() );
userApp.setMerchantCode( userInfo.getMerchantCode() );
userApp.setStoreId( userInfo.getStoreId() );
userApp.setPassword( userInfo.getPassword() );
if ( userInfo.getUpdateTime() != null ) {
userApp.setUpdateTime( new SimpleDateFormat().format( userInfo.getUpdateTime() ) );
}
userApp.setPayPassword( userInfo.getPayPassword() );
userApp.setFaceCert( userInfo.getFaceCert() );
userApp.setFaceCompare( userInfo.getFaceCompare() );
return userApp;
}
}

View File

@@ -0,0 +1,12 @@
package cn.pluss.platform.access;
import cn.pluss.platform.access.domain.ReqEntity;
import cn.pluss.platform.access.domain.RespEntity;
public interface AccessService {
boolean checkSign(ReqEntity reqEntity);
void addSign(RespEntity respEntity);
}

View File

@@ -0,0 +1,33 @@
package cn.pluss.platform.access.domain;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum CodeEnum {
SUCCESS("0000", "操作成功"),
PARAM_ERROR("0001", "参数不正确"),
SIGN_ERROR("0002", "签名校验异常"),
ORG_ID_NOT_FOUND("0003", "缺少机构ID"),
STORE_NOT_FOUND("1001", "未找到机具"),
ORDER_NOT_FOUND("2001", "未找到订单"),
ORDER_REFUND_ERROR("2002", "订单退款异常"),
REFUND_ORDER_NOT_FOUND("2003", "未找到退款订单"),
PASSWORD_NOT_INIT("2011", "安全密码未初始化请前往收银呗APP进行初始化"),
PASSWORD_ERROR("2021", "安全密码错误若忘记密码可前往收银呗APP进行重置"),
;
private final String val;
private final String desc;
}

View File

@@ -0,0 +1,44 @@
package cn.pluss.platform.access.domain;
import cn.pluss.platform.access.exception.AccessException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class ReqEntity {
private String orgId;
private String requestId;
private String version;
private String timestamp;
private String reqData;
public JSONObject initJSONData() {
if (reqData == null) {
throw new AccessException(CodeEnum.PARAM_ERROR);
}
return JSON.parseObject(reqData);
}
private String signType;
private String sign;
public static String getSignContent(ReqEntity entity) {
return "orgId=" + entity.getOrgId() + "&" +
"reqData=" + entity.getReqData() + "&" +
"requestId=" + entity.getRequestId() + "&" +
"signType=" + entity.getSignType() + "&" +
"timestamp=" + entity.getTimestamp() + "&" +
"version=" + entity.getVersion();
}
}

View File

@@ -0,0 +1,94 @@
package cn.pluss.platform.access.domain;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.ValueFilter;
import lombok.Getter;
import lombok.Setter;
import org.springframework.util.ObjectUtils;
import java.math.BigDecimal;
@Getter
@Setter
public class RespEntity {
private String code;
private String msg;
private String respData;
private String sign;
private String signType;
private String orgId;
private String requestId;
public RespEntity(String orgId, CodeEnum codeEnum, Object respData, String requestId) {
this(orgId, codeEnum, respData, requestId, null);
}
public RespEntity(String orgId, String code, Object respData, String requestId) {
this(orgId, code, respData, requestId, null);
}
public RespEntity(String orgId, CodeEnum codeEnum, Object respData, String requestId, String msg) {
this.code = codeEnum.getVal();
this.requestId = requestId;
if (!ObjectUtils.isEmpty(msg)) {
this.msg = msg;
} else {
this.msg = codeEnum.getDesc();
}
this.signType = "RSA";
this.respData = JSON.toJSONString(respData, (ValueFilter) (object, name, value) -> {
if (value instanceof BigDecimal) {
return ((BigDecimal) value).toPlainString();
}
if (value instanceof Double || value instanceof Float) {
return String.valueOf(value);
}
return value;
});
this.orgId = orgId;
}
public RespEntity(String orgId, String code, Object respData, String requestId, String msg) {
this.code = code;
this.requestId = requestId;
this.msg = msg;
this.signType = "RSA";
this.respData = JSON.toJSONString(respData, (ValueFilter) (object, name, value) -> {
if (value instanceof BigDecimal) {
return ((BigDecimal) value).toPlainString();
}
if (value instanceof Double || value instanceof Float) {
return String.valueOf(value);
}
return value;
});
this.orgId = orgId;
}
public static String getSignContent(RespEntity entity) {
String signContent = "code=" + entity.getCode() + "&"
+ "msg=" + entity.getMsg() + "&"
+ "orgId=" + entity.getOrgId() + "&"
+ "requestId=" + entity.getRequestId() + "&";
if (entity.getRespData() != null) {
signContent += "respData=" + entity.getRespData() + "&";
}
signContent += "signType=" + entity.getSignType();
return signContent;
}
}

View File

@@ -0,0 +1,24 @@
package cn.pluss.platform.access.exception;
import cn.pluss.platform.access.domain.CodeEnum;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.util.ObjectUtils;
@NoArgsConstructor
@Getter
@Setter
public class AccessException extends RuntimeException {
private String code;
public AccessException(CodeEnum codeEnum, String msg) {
super(ObjectUtils.isEmpty(msg)? codeEnum.getDesc(): msg);
this.code = codeEnum.getVal();
}
public AccessException(CodeEnum codeEnum) {
this(codeEnum, null);
}
}

View File

@@ -0,0 +1,23 @@
package cn.pluss.platform.access.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
public interface AccessBizService {
Object machineStoreInfo(String snNo);
Object scanPay(JSONObject param);
Object orderStatus(String orderNum, String mercOrderNo);
Object refund(JSONObject param);
<T> List<T> refundList(JSONObject param);
Page<Object> orderList(JSONObject param);
Object dataAnalysis(JSONObject param);
}

View File

@@ -0,0 +1,504 @@
package cn.pluss.platform.access.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.pluss.platform.access.domain.CodeEnum;
import cn.pluss.platform.access.exception.AccessException;
import cn.pluss.platform.access.service.AccessBizService;
import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.deviceStock.DeviceStockService;
import cn.pluss.platform.dto.MerChantOrderDTO;
import cn.pluss.platform.entity.*;
import cn.pluss.platform.mapper.MerchantChannelStatusMapper;
import cn.pluss.platform.merchant.MerchantBaseInfoService;
import cn.pluss.platform.merchantOrder.MerchantOrderService;
import cn.pluss.platform.merchantStore.MerchantStoreService;
import cn.pluss.platform.pay.ApiPayService;
import cn.pluss.platform.pay.PayService;
import cn.pluss.platform.refundOrder.MerchantRefundOrderService;
import cn.pluss.platform.ryx.pay.RyxPayService;
import cn.pluss.platform.sxf.pay.SxfPayService;
import cn.pluss.platform.userInfo.UserInfoService;
import cn.pluss.platform.util.StringUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class AccessBizServiceImpl implements AccessBizService {
@Autowired
private DeviceStockService deviceStockService;
@Autowired
private MerchantBaseInfoService mbiService;
@Autowired
private MerchantOrderService orderService;
@Autowired
private MerchantStoreService merchantStoreService;
@Resource
private MerchantChannelStatusMapper mcsMapper;
@Autowired
private SxfPayService sxfPayService;
@Autowired
private RyxPayService ryxPayService;
@Autowired
@Qualifier("ysPayOldService")
private PayService ysPayOldService;
@Autowired
private ApiPayService apiPayService;
@Autowired
private UserInfoService userInfoService;
@Autowired
private MerchantRefundOrderService refundOrderService;
@Autowired
private HttpServletRequest request;
private MerchantBaseInfo getByDeviceNo(String deviceNo) {
DeviceStock deviceStock = deviceStockService.getDevicebyNo(deviceNo);
if (deviceStock == null) {
deviceStock = deviceStockService.getDeviceBySnNo(deviceNo);
}
if (deviceStock == null || !"3".equals(deviceStock.getStatus())) {
throw new AccessException(CodeEnum.STORE_NOT_FOUND);
}
MerchantBaseInfo mbi = mbiService.getById(deviceStock.getActMercId());
if (mbi == null) {
throw new AccessException(CodeEnum.STORE_NOT_FOUND);
}
return mbi;
}
@Override
public Object machineStoreInfo(String deviceNo) {
JSONObject result = new JSONObject();
DeviceStock deviceStock = deviceStockService.getDevicebyNo(deviceNo);
if (deviceStock == null) {
deviceStock = deviceStockService.getDeviceBySnNo(deviceNo);
}
// 未入库
result.put("status", "-3");
result.put("remark", "机具未入库");
if (deviceStock == null) {
return result;
}
// 未绑定商户
result.put("status", "-2");
result.put("remark", "未绑定商户");
if (!"3".equals(deviceStock.getStatus())) {
return result;
} else {
result.put("status", "-1");
result.put("remark", "未获取到商户信息");
}
String actMercId = deviceStock.getActMercId();
if (ObjectUtils.isEmpty(actMercId)) {
return result;
}
MerchantBaseInfo mbi = mbiService.getById(actMercId);
if (mbi == null) {
return result;
}
// 已绑定商户
result.put("status", "1");
result.put("remark", "商户信息获取成功");
result.put("merchantName", mbi.getMerchantName());
result.put("alias", mbi.getAlias());
return result;
}
@Override
public Object scanPay(JSONObject param) {
String authCode = param.getString("authCode");
BigDecimal consumeFee = param.getBigDecimal("consumeFee");
String type = param.getString("type");
String deviceNo = param.getString("deviceNo");
String remark = param.getString("remark");
String mercOrderNo = param.getString("mercOrderNo");
// 必传参数
if (ObjectUtils.isEmpty(authCode)
|| ObjectUtils.isEmpty(consumeFee)
|| ObjectUtils.isEmpty(type)
|| ObjectUtils.isEmpty(deviceNo)) {
throw new AccessException(CodeEnum.PARAM_ERROR);
}
MerchantBaseInfo mbi = getByDeviceNo(deviceNo);
MerchantStore merchantStore = merchantStoreService.getStoreByMerchantCode(mbi.getMerchantCode());
MerChantOrderDTO dto = new MerChantOrderDTO();
dto.setType(type);
dto.setConsumeFee(consumeFee.doubleValue());
dto.setAuthCode(authCode);
dto.setUserId(mbi.getUserId());
dto.setDeviceNo(deviceNo);
dto.setStoreId(merchantStore.getStoreId());
dto.setMerchantCode(mbi.getMerchantCode());
dto.setRemark(remark);
dto.setMercOrderNo(mercOrderNo);
return orderService.toActivePayV2(dto, request);
}
@Override
public Object orderStatus(String orderNum, String mercOrderNo) {
// 校验参数是否完整
if (ObjectUtils.isEmpty(orderNum) && ObjectUtils.isEmpty(mercOrderNo)) {
return ResultGenerator.genFailResult("订单号不能为空");
}
QueryWrapper<MerchantOrder> queryWrapper = new QueryWrapper<MerchantOrder>()
.eq(!ObjectUtils.isEmpty(orderNum), "orderNumber", orderNum)
.eq(!ObjectUtils.isEmpty(mercOrderNo), "mercOrderNo", mercOrderNo);
MerchantOrder order = orderService.getOne(queryWrapper);
if (order == null) {
throw new AccessException(CodeEnum.ORDER_NOT_FOUND);
}
//支付成功
if ("1".equals(order.getStatus())) {
JSONObject result = new JSONObject();
result.put("status", "1");
result.put("orderNumber", order.getOrderNumber());
result.put("mercOrderNo", order.getMercOrderNo());
result.put("transTime", DateUtil.format(order.getCreateDt(), DatePattern.NORM_DATETIME_FORMAT));
result.put("consumeFee", order.getConsumeFee());
result.put("payType", order.getPayTypeCode());
return result;
}
String aisleSwitch = order.getAisleSwitch();
MerchantChannelStatus channel = null;
switch (aisleSwitch) {
case "2":
channel = mcsMapper.getByMerchantCode(order.getMerchantCode(), 1);
break;
default:
channel = mcsMapper.getByMerchantCode(order.getMerchantCode(), Integer.valueOf(aisleSwitch));
break;
}
if (channel != null) {
JSONObject result = null;
switch (channel.getChannel()) {
case 1:
result = sxfPayService.tradeQuery(order, channel.getMerchantId());
break;
case 3:
result = ryxPayService.tradeQuery(order, channel.getMerchantId());
break;
case 4:
result = ysPayOldService.tradeQuery(order, channel.getMerchantId());
break;
}
if (result != null) {
orderService.updateOrderStatus(result, order);
String status = result.getString("payStatus");
if ("1".equals(status)) {
order.setStatus("1");
}
}
}
JSONObject result = new JSONObject();
result.put("status", order.getStatus());
result.put("orderNumber", order.getOrderNumber());
result.put("mercOrderNo", order.getMercOrderNo());
result.put("transTime", DateUtil.format(order.getCreateDt(), DatePattern.NORM_DATETIME_FORMAT));
result.put("consumeFee", order.getConsumeFee());
result.put("payType", order.getPayTypeCode());
return result;
}
@Override
public Object refund(JSONObject param) {
String deviceNo = param.getString("deviceNo");
String orderNumber = param.getString("orderNumber");
param.put("thirdSendNo", param.getString("channelTransNo"));
BigDecimal refundAmt = param.getBigDecimal("refundAmt");
String refundFlag = param.getString("refundFlag");
// String pwd = param.getString("pwd");
MerchantBaseInfo mbi = getByDeviceNo(deviceNo);
// UserInfo userInfo = userInfoService.getById(mbi.getUserId());
// if (ObjectUtils.isEmpty(pwd)) {
// throw new AccessException(CodeEnum.PARAM_ERROR, "安全密码不能为空");
// }
// String payPassword = userInfo.getPayPassword();
// if (payPassword == null) {
// throw new AccessException(CodeEnum.PASSWORD_NOT_INIT);
// }
//
// if (!payPassword.equalsIgnoreCase(MD5Util.MD5Encode(pwd, "utf-8"))) {
// throw new AccessException(CodeEnum.PASSWORD_ERROR);
// }
param.put("merchant", mbi);
if (!"1".equals(refundFlag)) {
if (ObjectUtils.isEmpty(refundAmt)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "未选择全额退款时,退款金额不能为空");
}
if (!StringUtil.isNumber(param.getString("refundAmt"))) {
throw new AccessException(CodeEnum.PARAM_ERROR, "退款金额格式有误,小数点保留后两位");
}
}
try {
JSONObject jsonObject = apiPayService.apiRefundPay(param);
jsonObject.remove("sign");
return jsonObject;
} catch (Exception e) {
e.printStackTrace();
throw new AccessException(CodeEnum.ORDER_REFUND_ERROR, e.getMessage());
}
}
@Override
public List<JSONObject> refundList(JSONObject param) {
String deviceNo = param.getString("deviceNo");
String orderNumber = param.getString("orderNumber");
String mercOrderNo = param.getString("mercOrderNo");
String thirdTransNo = param.getString("thirdTransNo");
String channelTransNo = param.getString("channelTransNo");
String refundNo = param.getString("refundNo");
String mercRefundNo = param.getString("mercRefundNo");
if (ObjectUtils.isEmpty(deviceNo)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "缺少设备编号");
}
if (ObjectUtils.isEmpty(orderNumber)
&& ObjectUtils.isEmpty(mercOrderNo)
&& ObjectUtils.isEmpty(thirdTransNo)
&& ObjectUtils.isEmpty(channelTransNo)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "缺少原交易订单号");
}
MerchantBaseInfo mbi = getByDeviceNo(deviceNo);
LambdaQueryWrapper<MerchantRefundOrder> qWrapper = Wrappers.lambdaQuery();
qWrapper.eq(!ObjectUtils.isEmpty(orderNumber), MerchantRefundOrder::getOrderNumber, orderNumber);
qWrapper.eq(!ObjectUtils.isEmpty(refundNo), MerchantRefundOrder::getRefundNo, refundNo);
qWrapper.eq(MerchantRefundOrder::getMerchantCode, mbi.getMerchantCode());
qWrapper.eq(!ObjectUtils.isEmpty(mercRefundNo), MerchantRefundOrder::getMercRefundNo, mercRefundNo);
qWrapper.orderByDesc(MerchantRefundOrder::getRefundTime);
List<MerchantRefundOrder> refundOrderList = refundOrderService.list(qWrapper);
if (CollectionUtil.isEmpty(refundOrderList)) {
throw new AccessException(CodeEnum.REFUND_ORDER_NOT_FOUND);
}
List<JSONObject> result = new ArrayList<>();
for (MerchantRefundOrder item : refundOrderList) {
JSONObject jsonItem = new JSONObject();
jsonItem.put("orderNumber", item.getOrderNumber());
jsonItem.put("refundNo", item.getRefundNo());
jsonItem.put("mercRefundNo", item.getMercRefundNo());
jsonItem.put("refundTime", DateUtil.format(item.getRefundTime(), DatePattern.NORM_DATETIME_PATTERN));
jsonItem.put("status", item.getStatus());
jsonItem.put("oPayAmt", item.getPayAmt());
jsonItem.put("refundAmt", item.getRefundAmt());
jsonItem.put("payType", item.getPayTypeCode());
result.add(jsonItem);
}
return result;
}
@Override
public Page<Object> orderList(JSONObject param) {
String deviceNo = param.getString("deviceNo");
Integer page = param.getInteger("page");
Integer size = param.getInteger("size");
String date = param.getString("date");
// 1: 日; 2: 月
String type = param.getString("type");
Map<String, Object> condition = new HashMap<>();
condition.put("createDate", date);
condition.put("snNo", deviceNo);
List<String> statusList = CollectionUtil.list(false, "1", "2", "6");
IPage<MerchantOrder> pageInfo = new Page<>(page, size);
if (ObjectUtils.isEmpty(type)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "类型不能为空");
}
if (!ArrayUtil.contains(new String[]{"1", "2"}, type)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "类型只能为1(日)或者2(月)");
}
if (ObjectUtils.isEmpty(date)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "日期不能为空");
}
if (ObjectUtils.isEmpty(page)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "页码不能为空");
}
if (ObjectUtils.isEmpty(size)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "页长不能为空");
}
if (size > 1000) {
throw new AccessException(CodeEnum.PARAM_ERROR, "查询单次不能超过1000条");
}
MerchantBaseInfo mbi = getByDeviceNo(deviceNo);
condition.put("merchantCode", mbi.getMerchantCode());
orderService.pageData(pageInfo, condition, statusList);
Page<Object> resultPage = new Page<>(page, size);
resultPage.setTotal(pageInfo.getTotal());
List<Object> result = new ArrayList<>();
for (MerchantOrder item : pageInfo.getRecords()) {
JSONObject orderItem = new JSONObject();
orderItem.put("orderNumber", item.getOrderNumber());
orderItem.put("consumeFee", item.getConsumeFee());
orderItem.put("status", item.getStatus());
orderItem.put("alias", item.getMerchantName());
orderItem.put("channelTransNo", item.getThirdSendNo());
orderItem.put("thirdTransNo", item.getThirdTransNo());
orderItem.put("transTime", DateUtil.format(item.getTransDt(), DatePattern.NORM_DATETIME_FORMAT));
if (item.getStatus().equals("2")) {
orderItem.put("refundAmt", item.getRefundAmt());
orderItem.put("refundTime", DateUtil.format(item.getUpdateTime(), DatePattern.NORM_DATETIME_FORMAT));
}
orderItem.put("payType", item.getPayTypeCode());
result.add(orderItem);
}
resultPage.setPages(pageInfo.getPages());
resultPage.setRecords(result);
return resultPage;
}
@Override
public Object dataAnalysis(JSONObject param) {
String deviceNo = param.getString("deviceNo");
MerchantBaseInfo mbi = getByDeviceNo(deviceNo);
String type = param.getString("type");
String date = param.getString("date");
JSONObject result = new JSONObject();
if (ObjectUtils.isEmpty(type)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "类型不能为空");
}
if (!ArrayUtil.contains(new String[]{"1", "2"}, type)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "类型只能为1(日)或者2(月)");
}
if (ObjectUtils.isEmpty(date)) {
throw new AccessException(CodeEnum.PARAM_ERROR, "日期不能为空");
}
LambdaQueryWrapper<MerchantOrder> qWrapper = Wrappers.lambdaQuery();
qWrapper.likeRight(MerchantOrder::getCreateDate, date)
.eq(MerchantOrder::getMerchantCode, mbi.getMerchantCode())
.eq(MerchantOrder::getSnNo, deviceNo)
.eq(MerchantOrder::getStatus, "1");
int transCount = orderService.count(qWrapper);
result.put("transCount", transCount);
qWrapper.clear();
qWrapper.likeRight(MerchantOrder::getCreateDate, date)
.eq(MerchantOrder::getMerchantCode, mbi.getMerchantCode())
.eq(MerchantOrder::getSnNo, deviceNo)
.eq(MerchantOrder::getStatus, "2");
int refundCount = orderService.count(qWrapper);
result.put("refundCount", refundCount);
QueryWrapper<MerchantOrder> qWrapper2 = Wrappers.query();
qWrapper2.likeRight("createDate", date)
.eq("merchantCode", mbi.getMerchantCode())
.eq("snNo", deviceNo)
.eq("status", "1")
.select("SUM(consumeFee) transFee");
BigDecimal transFee = orderService.getObj(qWrapper2, (SFunction<Object, BigDecimal>) o -> {
if (o == null) {
return BigDecimal.ZERO;
}
if (o instanceof BigDecimal) {
return (BigDecimal) o;
}
return new BigDecimal(o.toString());
});
if (transFee == null) {
transFee = BigDecimal.ZERO;
}
result.put("transFee", transFee);
BigDecimal refundFee = orderService.getRefundAmt(mbi.getMerchantCode(), deviceNo, date);
if (refundFee == null) {
refundFee = BigDecimal.ZERO;
}
result.put("refundFee", refundFee);
return result;
}
}

View File

@@ -0,0 +1,43 @@
package cn.pluss.platform.access.service.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.SignUtil;
import cn.hutool.crypto.asymmetric.Sign;
import cn.hutool.crypto.asymmetric.SignAlgorithm;
import cn.pluss.platform.access.AccessService;
import cn.pluss.platform.access.domain.ReqEntity;
import cn.pluss.platform.access.domain.RespEntity;
import cn.pluss.platform.entity.AccessChannelCipherCode;
import cn.pluss.platform.mapper.AccessChannelCipherCodeMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
@Service
public class AccessServiceImpl implements AccessService {
@Resource
private AccessChannelCipherCodeMapper acccMapper;
@Override
public boolean checkSign(ReqEntity reqEntity) {
AccessChannelCipherCode accc = acccMapper.selectAllByOrgId(reqEntity.getOrgId());
String orgPubKey = accc.getOrgPubKey();
Sign sign = SignUtil.sign(SignAlgorithm.SHA256withRSA, null, orgPubKey);
String signContent = ReqEntity.getSignContent(reqEntity);
return sign.verify(signContent.getBytes(StandardCharsets.UTF_8), Base64.decode(reqEntity.getSign()));
}
@Override
public void addSign(RespEntity respEntity) {
String signContent = RespEntity.getSignContent(respEntity);
AccessChannelCipherCode accc = acccMapper.selectAllByOrgId(respEntity.getOrgId());
Sign sign = SignUtil.sign(SignAlgorithm.SHA256withRSA, accc.getPriKey(), null);
byte[] signBytes = sign.sign(signContent);
respEntity.setSign(Base64.encode(signBytes));
}
}

View File

@@ -31,6 +31,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -65,6 +66,9 @@ public class AliScanCodeDeviceServiceImpl implements AliDeviceService {
@Resource @Resource
private MerchantChannelStatusService channelService; private MerchantChannelStatusService channelService;
@Resource
private HttpServletRequest request;
@Override @Override
public RespDeviceEntity getDeviceStatusV1(String deviceNo) { public RespDeviceEntity getDeviceStatusV1(String deviceNo) {
if(StringUtil.isEmpty(deviceNo)){ if(StringUtil.isEmpty(deviceNo)){
@@ -139,7 +143,7 @@ public class AliScanCodeDeviceServiceImpl implements AliDeviceService {
dto.setDeviceNo(entity.getCode()); dto.setDeviceNo(entity.getCode());
dto.setRemark(entity.getRemark()); dto.setRemark(entity.getRemark());
try { try {
Result<Object> mapResult = merchantOrderService.toActivePay(dto); Result<Object> mapResult = merchantOrderService.toActivePay(dto, request);
Object data = mapResult.getData(); Object data = mapResult.getData();
if (ResultCode.TRANSUNKNOW.code() == mapResult.getCode()) { if (ResultCode.TRANSUNKNOW.code() == mapResult.getCode()) {
return RespDeviceEntity.await(mapResult.getMessage(),((Map)data).get("orderNumber")); return RespDeviceEntity.await(mapResult.getMessage(),((Map)data).get("orderNumber"));

View File

@@ -92,7 +92,7 @@ public class CashServiceImpl extends ServiceImpl<CashMapper, Cash> implements Ca
RiskBlacklist entity = rbService.getOne(new QueryWrapper<>(condition)); RiskBlacklist entity = rbService.getOne(new QueryWrapper<>(condition));
if (entity != null) { if (entity != null) {
throw new MsgException("该账户存在重大违规行为,暂不支持提现,请联系收银客服申诉"); throw new MsgException("该账户存在重大违规行为,暂不支持提现,请联系快银收银客服申诉");
} }
} }
@@ -516,7 +516,7 @@ public class CashServiceImpl extends ServiceImpl<CashMapper, Cash> implements Ca
alipayService.remit(accountNo, accountName, cash.getVirRealCashAmt().toString()); alipayService.remit(accountNo, accountName, cash.getVirRealCashAmt().toString());
// 发送分润打款通知 // 发送分润打款通知
generalPushUtil.sendAllPlatByAlias(Collections.singletonList(cash.getUserId() + ""), "收银分润到账通知", "您的分润已结算至支付宝,快去查看哦!", "1"); generalPushUtil.sendAllPlatByAlias(Collections.singletonList(cash.getUserId() + ""), "快银收银分润到账通知", "您的分润已结算至支付宝,快去查看哦!", "1");
} }
@Override @Override

View File

@@ -119,7 +119,7 @@ public class MercAuditListenerImpl implements MercAuditListener {
public void onFail(String userId, MerchantChannelStatus mcs, String msg) { public void onFail(String userId, MerchantChannelStatus mcs, String msg) {
MerchantBaseInfo mbi = mbiMapper.queryByMerchantCode(mcs.getMerchantCode()); MerchantBaseInfo mbi = mbiMapper.queryByMerchantCode(mcs.getMerchantCode());
String title2 = "收银审核通知"; String title2 = "快银收银审核通知";
String msg2; String msg2;
@@ -141,7 +141,7 @@ public class MercAuditListenerImpl implements MercAuditListener {
public void onSuccess(String userId, MerchantChannelStatus mcs) { public void onSuccess(String userId, MerchantChannelStatus mcs) {
MerchantBaseInfo mbi = mbiMapper.queryByMerchantCode(mcs.getMerchantCode() + ""); MerchantBaseInfo mbi = mbiMapper.queryByMerchantCode(mcs.getMerchantCode() + "");
String title = "收银审核通知"; String title = "快银收银审核通知";
String msg; String msg;
if (Objects.equals(mcs.getChannel(), 4)) { if (Objects.equals(mcs.getChannel(), 4)) {
msg = "商户D0进件通过完成支付宝及微信认证后即可支持相应渠道收款"; msg = "商户D0进件通过完成支付宝及微信认证后即可支持相应渠道收款";

View File

@@ -24,4 +24,9 @@ public interface YSAuditServiceV3 {
void auditResult(String userId); void auditResult(String userId);
void openOnlinePay(MerchantChannelStatus mcs); void openOnlinePay(MerchantChannelStatus mcs);
void report(MerchantChannelStatus mcs);
void reportAgain(MerchantChannelStatus mcs);
} }

View File

@@ -285,7 +285,7 @@ public class AliyunServiceImpl implements AliyunService {
if ("403".equals(verifyBankElementResponse.getBody().getCode())){ if ("403".equals(verifyBankElementResponse.getBody().getCode())){
throw new MsgException("24小时内重复查询相同信息超过10次已锁定请在12小时后重试。"); throw new MsgException("24小时内重复查询相同信息超过10次已锁定请在12小时后重试。");
} }
if ("428".equals(verifyBankElementResponse.getBody().getCode())){ if ("428".equals(verifyBankElementResponse.getBody().getCode()) || "437".equals(verifyBankElementResponse.getBody().getCode())){
throw new MsgException("请正确输入相关信息"); throw new MsgException("请正确输入相关信息");
} }

View File

@@ -1,6 +1,7 @@
package cn.pluss.platform.device; package cn.pluss.platform.device;
import cn.pluss.platform.entity.MercOrderExpress; import cn.pluss.platform.entity.MercOrderExpress;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
public interface MercOrderExpressService extends IService<MercOrderExpress> { public interface MercOrderExpressService extends IService<MercOrderExpress> {
@@ -8,4 +9,6 @@ public interface MercOrderExpressService extends IService<MercOrderExpress> {
MercOrderExpress getByLogistNo(String logistNo); MercOrderExpress getByLogistNo(String logistNo);
MercOrderExpress getByExpressNo(String expressNo); MercOrderExpress getByExpressNo(String expressNo);
JSONObject getExpressInfo(String expressNo) throws Exception;
} }

View File

@@ -17,6 +17,7 @@ import cn.pluss.platform.mapper.*;
import cn.pluss.platform.openAccount.OpenAccountRecordService; import cn.pluss.platform.openAccount.OpenAccountRecordService;
import cn.pluss.platform.pay.PayService; import cn.pluss.platform.pay.PayService;
import cn.pluss.platform.phoneValidateCode.PhoneValidateCodeService; import cn.pluss.platform.phoneValidateCode.PhoneValidateCodeService;
import cn.pluss.platform.sxf.pay.SxfPayService;
import cn.pluss.platform.util.DateUtils; import cn.pluss.platform.util.DateUtils;
import cn.pluss.platform.util.StringUtil; import cn.pluss.platform.util.StringUtil;
import cn.pluss.platform.util.ValidateCodeUtil; import cn.pluss.platform.util.ValidateCodeUtil;
@@ -25,6 +26,9 @@ import cn.pluss.platform.yt.YtLogistHandler;
import cn.pluss.platform.yt.YtStatusEnum; import cn.pluss.platform.yt.YtStatusEnum;
import cn.pluss.platform.yt.constant.YtConstant; import cn.pluss.platform.yt.constant.YtConstant;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -35,6 +39,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.Setter; import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -91,30 +96,46 @@ public class MercOrderDetailServiceImpl extends ServiceImpl<MercOrderDetailMappe
@Resource @Resource
private OpenAccountRecordService openAccountRecordService; private OpenAccountRecordService openAccountRecordService;
@Resource
private SxfPayService sxfPayService;
/**
* 阿里云key
*/
@Value("${aliyun.keyid}")
private String ACCESSKEYID;
/**
* 阿里云secret
*/
@Value("${aliyun.keysecret}")
private String ACCESSKEYSECRET;
@Override @Override
public void receiving(Long id) { public void receiving(Long id) {
MercOrderDetail detail = baseMapper.selectById(id); MercOrderDetail detail = baseMapper.selectById(id);
MsgException.checkNull(detail,"订单数据异常"); MsgException.checkNull(detail, "订单数据异常");
detail.setStatus(DeviceOrderStatus.COMPLETED.getStatus()); detail.setStatus(DeviceOrderStatus.COMPLETED.getStatus());
baseMapper.updateById(detail); baseMapper.updateById(detail);
} }
/** /**
* 查看物流信息 * 查看物流信息
*
* @param id * @param id
* @return * @return
*/ */
@Override @Override
public MercOrderExpressVO getOrderExpressInfo(Long id) { public MercOrderExpressVO getOrderExpressInfo(Long id) {
MercOrderDetail detail = baseMapper.selectById(id); MercOrderDetail detail = baseMapper.selectById(id);
MsgException.checkNull(detail,"订单详情数据异常"); MsgException.checkNull(detail, "订单详情数据异常");
MercOrderExpressVO vo = moeMapper.getByExpressNo(detail.getExpressNo()); MercOrderExpressVO vo = moeMapper.getByExpressNo(detail.getExpressNo());
if(vo != null){ if (vo != null) {
vo.setServiceTelephone(YtConstant.YT_CUSTOMER_TELEPHONE); vo.setServiceTelephone(YtConstant.YT_CUSTOMER_TELEPHONE);
List<MercOrderExpressDetail> list = moedMapper.getByExpressNo(detail.getExpressNo()); List<MercOrderExpressDetail> list = moedMapper.getByExpressNo(detail.getExpressNo());
vo.setExpressDetailList(list); vo.setExpressDetailList(list);
if(!list.isEmpty()){ if (!list.isEmpty()) {
vo.setLogisticProvider(list.get(0).getLogisticProvider()); vo.setLogisticProvider(list.get(0).getLogisticProvider());
} }
} }
@@ -123,23 +144,24 @@ public class MercOrderDetailServiceImpl extends ServiceImpl<MercOrderDetailMappe
/** /**
* 根据订单号查询订单详情 * 根据订单号查询订单详情
*
* @param orderNo * @param orderNo
* @return * @return
*/ */
@Override @Override
public List<MercOrderDetail> getDetailByOrderNo(String orderNo,String status) { public List<MercOrderDetail> getDetailByOrderNo(String orderNo, String status) {
QueryWrapper<MercOrderDetail> queryWrapper = new QueryWrapper<MercOrderDetail>() QueryWrapper<MercOrderDetail> queryWrapper = new QueryWrapper<MercOrderDetail>()
.eq("orderNo",orderNo).orderByDesc("id"); .eq("orderNo", orderNo).orderByDesc("id");
if(StringUtil.isNotEmpty(status) && !"-1".equals(status)){ if (StringUtil.isNotEmpty(status) && !"-1".equals(status)) {
switch (status){ switch (status) {
case "1": case "1":
queryWrapper.eq("status",DeviceOrderStatus.COMPLETED.getStatus()); queryWrapper.eq("status", DeviceOrderStatus.COMPLETED.getStatus());
break; break;
case "2": case "2":
queryWrapper.eq("status",DeviceOrderStatus.RECEIV_ING.getStatus()); queryWrapper.eq("status", DeviceOrderStatus.RECEIV_ING.getStatus());
break; break;
case "3": case "3":
queryWrapper.in("status",DeviceOrderStatus.REFUND_ING.getStatus(),DeviceOrderStatus.REFUND_SUCC.getStatus(),DeviceOrderStatus.REFUND_FAIL.getStatus()); queryWrapper.in("status", DeviceOrderStatus.REFUND_ING.getStatus(), DeviceOrderStatus.REFUND_SUCC.getStatus(), DeviceOrderStatus.REFUND_FAIL.getStatus());
break; break;
} }
} }
@@ -148,40 +170,41 @@ public class MercOrderDetailServiceImpl extends ServiceImpl<MercOrderDetailMappe
/** /**
* 设备订单退款 * 设备订单退款
*
* @param dto * @param dto
*/ */
@Override @Override
public void refund(MercOrderDetailDTO dto) { public void refund(MercOrderDetailDTO dto) {
MsgException.checkNull(dto.getId(),"退款详情订单ID为空"); MsgException.checkNull(dto.getId(), "退款详情订单ID为空");
MsgException.checkNull(dto.getRefundAmt(),"退款金额不能为空"); MsgException.checkNull(dto.getRefundAmt(), "退款金额不能为空");
MsgException.checkBlank(dto.getRefundReason(),"退款原因不能为空"); MsgException.checkBlank(dto.getRefundReason(), "退款原因不能为空");
if(dto.getPicList() == null || dto.getPicList().size() == 0){ if (dto.getPicList() == null || dto.getPicList().size() == 0) {
MsgException.throwException("请先上传图片"); MsgException.throwException("请先上传图片");
} }
MercOrderDetail detail = baseMapper.selectById(dto.getId()); MercOrderDetail detail = baseMapper.selectById(dto.getId());
MsgException.checkNull(detail,"订单数据异常"); MsgException.checkNull(detail, "订单数据异常");
//暂无物流信息 可以直接退款 //暂无物流信息 可以直接退款
BigDecimal totalAmt = detail.getPrice().multiply(BigDecimal.valueOf(detail.getNum())); BigDecimal totalAmt = detail.getPrice().multiply(BigDecimal.valueOf(detail.getNum()));
if(StringUtil.isEmpty(detail.getExpressNo())){ if (StringUtil.isEmpty(detail.getExpressNo())) {
totalAmt = totalAmt.add(detail.getPostage()); totalAmt = totalAmt.add(detail.getPostage());
}else{ } else {
MercOrderExpressVO express = moeMapper.getByExpressNo(detail.getExpressNo()); MercOrderExpressVO express = moeMapper.getByExpressNo(detail.getExpressNo());
if(express == null){ if (express == null) {
totalAmt = totalAmt.add(detail.getPostage()); totalAmt = totalAmt.add(detail.getPostage());
}else{ } else {
if(YtStatusEnum.ACCEPT.getValue().equals(express.getStatus()) || YtStatusEnum.WAIT.getValue().equals(express.getStatus())){ if (YtStatusEnum.ACCEPT.getValue().equals(express.getStatus()) || YtStatusEnum.WAIT.getValue().equals(express.getStatus())) {
totalAmt = totalAmt.add(detail.getPostage()); totalAmt = totalAmt.add(detail.getPostage());
} }
} }
} }
MsgException.check(dto.getRefundAmt().compareTo(totalAmt) > 0,"退款金额超出商品金额"); MsgException.check(dto.getRefundAmt().compareTo(totalAmt) > 0, "退款金额超出商品金额");
if(DeviceOrderStatus.SUCC_PAY.getStatus().equals(detail.getStatus()) if (DeviceOrderStatus.SUCC_PAY.getStatus().equals(detail.getStatus())
|| DeviceOrderStatus.RECEIV_ING.getStatus().equals(detail.getStatus()) || DeviceOrderStatus.RECEIV_ING.getStatus().equals(detail.getStatus())
|| DeviceOrderStatus.REFUND_FAIL.getStatus().equals(detail.getStatus()) || DeviceOrderStatus.REFUND_FAIL.getStatus().equals(detail.getStatus())
|| DeviceOrderStatus.COMPLETED.getStatus().equals(detail.getStatus())){ || DeviceOrderStatus.COMPLETED.getStatus().equals(detail.getStatus())) {
List<MercDeviceRefundImage> list = new ArrayList<>(16); List<MercDeviceRefundImage> list = new ArrayList<>(16);
for (String picUrl:dto.getPicList()) { for (String picUrl : dto.getPicList()) {
MercDeviceRefundImage image = new MercDeviceRefundImage(detail,picUrl); MercDeviceRefundImage image = new MercDeviceRefundImage(detail, picUrl);
list.add(image); list.add(image);
} }
mdriService.saveBatch(list); mdriService.saveBatch(list);
@@ -198,72 +221,78 @@ public class MercOrderDetailServiceImpl extends ServiceImpl<MercOrderDetailMappe
/** /**
* 设置退款单号 * 设置退款单号
*
* @param dto * @param dto
*/ */
@Override @Override
public void setRefundExpressNo(MercOrderDetailDTO dto) { public void setRefundExpressNo(MercOrderDetailDTO dto) {
MsgException.checkNull(dto.getId(),"退款详情订单ID为空"); MsgException.checkNull(dto.getId(), "退款详情订单ID为空");
MsgException.checkBlank(dto.getRefundExpressNo(),"退款物流单号不能为空"); MsgException.checkBlank(dto.getRefundExpressNo(), "退款物流单号不能为空");
dto.setStatus(MercOrderDetail.STATUS_REFUND_AGREE); dto.setStatus(MercOrderDetail.STATUS_REFUND_AGREE);
baseMapper.updateById(dto); baseMapper.updateById(dto);
} }
/** /**
* 审核退款 * 审核退款
*
* @param orderDetail * @param orderDetail
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<Object> auditRefund(MercOrderDetail orderDetail) { public Result<Object> auditRefund(MercOrderDetail orderDetail) {
MsgException.checkNull(orderDetail.getId(),"退款详情订单ID为空"); MsgException.checkNull(orderDetail.getId(), "退款详情订单ID为空");
MsgException.checkBlank(orderDetail.getStatus(),"状态不能为空"); MsgException.checkBlank(orderDetail.getStatus(), "状态不能为空");
MsgException.checkNull(orderDetail.getRefundAmt(),"退款金额不能为空"); MsgException.checkNull(orderDetail.getRefundAmt(), "退款金额不能为空");
if(MercOrderDetail.STATUS_REFUND_FAIL.equals(orderDetail.getStatus())){ if (MercOrderDetail.STATUS_REFUND_FAIL.equals(orderDetail.getStatus())) {
MsgException.checkBlank(orderDetail.getRejectRemark(),"退款驳回,驳回原因不能为空!"); MsgException.checkBlank(orderDetail.getRejectRemark(), "退款驳回,驳回原因不能为空!");
} }
MercOrderDetail detail = baseMapper.selectById(orderDetail.getId()); MercOrderDetail detail = baseMapper.selectById(orderDetail.getId());
MsgException.checkNull(detail,"退款详情ID有误"); MsgException.checkNull(detail, "退款详情ID有误");
// MsgException.check(!MercOrderDetail.STATUS_REFUND_AGREE.equals(detail.getStatus()),"只能处理退货退款中的订单!"); // MsgException.check(!MercOrderDetail.STATUS_REFUND_AGREE.equals(detail.getStatus()),"只能处理退货退款中的订单!");
BigDecimal useRefundAmt = baseMapper.getUseRefundAmtByOrderNo(detail.getOrderNo()); BigDecimal useRefundAmt = baseMapper.getUseRefundAmtByOrderNo(detail.getOrderNo());
BigDecimal totalOrderAmt = detail.getPrice().multiply(BigDecimal.valueOf(detail.getNum())).add(detail.getPostage()); BigDecimal totalOrderAmt = detail.getPrice().multiply(BigDecimal.valueOf(detail.getNum())).add(detail.getPostage());
if(orderDetail.getRefundAmt().add(useRefundAmt).compareTo(totalOrderAmt) > 0){ if (orderDetail.getRefundAmt().add(useRefundAmt).compareTo(totalOrderAmt) > 0) {
MsgException.throwException("退款金额超出当前订单可退款总额"); MsgException.throwException("退款金额超出当前订单可退款总额");
} }
if(MercOrderDetail.STATUS_REFUND_SUCCESS.equals(orderDetail.getStatus())){ if (MercOrderDetail.STATUS_REFUND_SUCCESS.equals(orderDetail.getStatus())) {
phoneValidateCodeService.checkSmsVerifyCode(orderDetail.getPhone(),orderDetail.getVerifyCode()); phoneValidateCodeService.checkSmsVerifyCode(orderDetail.getPhone(), orderDetail.getVerifyCode());
MercOrderNew orderByNo = mercOrderNewMapper.getOrderByNo(detail.getOrderNo()); MercOrderNew orderByNo = mercOrderNewMapper.getOrderByNo(detail.getOrderNo());
MsgException.checkNull(orderByNo,"订单有误!"); MsgException.checkNull(orderByNo, "订单有误!");
Integer channel = orderByNo.getChannel(); Integer channel = orderByNo.getChannel();
MsgException.checkNull(channel,"通道未知,退款失败"); MsgException.checkNull(channel, "通道未知,退款失败");
Map<String, Object> result = null; Map<String, Object> result = null;
MerchantOrder order = new MerchantOrder(); MerchantOrder order = new MerchantOrder();
order.convert(orderByNo,orderDetail.getRefundAmt(), SettleTypeEnum.D1.getValue(), detail.getRefundReason()); order.convert(orderByNo, orderDetail.getRefundAmt(), SettleTypeEnum.D1.getValue(), detail.getRefundReason());
switch (channel){ switch (channel) {
case 1: case 1:
MerchantChannelStatus channelInfo = merchantChannelStatusMapper.getByMerchantCode(orderByNo.getMerchantCode(), 1);
MsgException.checkNull(channelInfo, "收款商户通道信息异常!");
result = sxfPayService.refundPay(order, channelInfo.getMerchantId());
break;
case 2: case 2:
case 3: case 3:
MsgException.throwException("当前订单所属通道不支持退款"); MsgException.throwException("当前订单所属通道不支持退款");
break; break;
case 4: case 4:
//银盛退款 /* //银盛退款
MerchantChannelStatus channelInfo = merchantChannelStatusMapper.getByMerchantCode(orderByNo.getMerchantCode(), 4); MerchantChannelStatus channelInfo = merchantChannelStatusMapper.getByMerchantCode(orderByNo.getMerchantCode(), 4);
MsgException.checkNull(channelInfo,"收款商户通道信息异常!"); MsgException.checkNull(channelInfo, "收款商户通道信息异常!");
result = ysPayOldService.refundPay(order, channelInfo.getMerchantId()); result = ysPayOldService.refundPay(order, channelInfo.getMerchantId());
break; break;*/
case 5: case 5:
//原生通道退款 TODO 不支持微信支付 因为微信支付走对公账户 所以这里加一个验证 //原生通道退款 TODO 不支持微信支付 因为微信支付走对公账户 所以这里加一个验证
MsgException.check(!Constant.PAY_TYPE_ALIPAY.equals(orderByNo.getPayType()),"当前订单支付方式不支持退款!"); MsgException.check(!Constant.PAY_TYPE_ALIPAY.equals(orderByNo.getPayType()), "当前订单支付方式不支持退款!");
result = aliService.refundV2(detail); result = aliService.refundV2(detail);
break; break;
default: default:
MsgException.throwException("未知通道"); MsgException.throwException("未知通道");
break; break;
} }
int code = (int)result.get("code"); int code = (int) result.get("code");
String msg = (String) result.get("msg"); String msg = (String) result.get("msg");
String refundNo = (String) result.get("refundNo"); String refundNo = (String) result.get("refundNo");
if(code != ResultCode.SUCCESS.code()){ if (code != ResultCode.SUCCESS.code()) {
return ResultGenerator.genFailResult(msg); return ResultGenerator.genFailResult(msg);
} }
detail.setRefundTime(DateUtils.currentDate()); detail.setRefundTime(DateUtils.currentDate());
@@ -277,74 +306,111 @@ public class MercOrderDetailServiceImpl extends ServiceImpl<MercOrderDetailMappe
detail.setStatus(orderDetail.getStatus()); detail.setStatus(orderDetail.getStatus());
detail.setRejectRemark(orderDetail.getRejectRemark()); detail.setRejectRemark(orderDetail.getRejectRemark());
baseMapper.updateById(detail); baseMapper.updateById(detail);
return ResultGenerator.genSuccessResult("处理成功",null); return ResultGenerator.genSuccessResult("处理成功", null);
} }
@Override @Override
public Result<Object> getVerifyCode(PhoneValidateCode phoneValidateCode) { public Result<Object> getVerifyCode(PhoneValidateCode phoneValidateCode) {
MsgException.checkBlank(phoneValidateCode.getPhone(),"获取失败,手机号为空"); MsgException.checkBlank(phoneValidateCode.getPhone(), "获取失败,手机号为空");
String checkCode = StringUtil.random(4); String checkCode = StringUtil.random(6);
phoneValidateCode.setCode(checkCode); phoneValidateCode.setCode(checkCode);
JSONObject result = validateCodeUtil.requestManageValidateCode(phoneValidateCode.getPhone(),checkCode); //JSONObject result = validateCodeUtil.requestManageValidateCode(phoneValidateCode.getPhone(), checkCode);
if(result.getIntValue("code") != ResultCode.SUCCESS.code()){ /*if (result.getIntValue("code") != ResultCode.SUCCESS.code()) {
return ResultGenerator.genFailResult(result.getString("msg")); return ResultGenerator.genFailResult(result.getString("msg"));
}*/
Client client = null;
try {
client = createClient();
// 1.发送短信
com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
.setSignName("超掌柜")
.setTemplateCode("SMS_244665149")
.setTemplateParam("{\"code\":" + "'" + checkCode + "'" + "}")
.setPhoneNumbers(phoneValidateCode.getPhone());
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
if (sendSmsResponse.getStatusCode() != 200) {
return ResultGenerator.genFailResult(sendSmsResponse.getBody().getMessage());
}
} catch (Exception e) {
e.printStackTrace();
} }
phoneValidateCode.setSendDt(DateUtils.currentDate()); phoneValidateCode.setSendDt(DateUtils.currentDate());
phoneValidateCode.setStatus("1"); phoneValidateCode.setStatus("1");
phoneValidateCodeService.savePhoneValidateCode(phoneValidateCode); phoneValidateCodeService.savePhoneValidateCode(phoneValidateCode);
return ResultGenerator.genSuccessResult("获取成功",null); return ResultGenerator.genSuccessResult("获取成功", null);
}
/**
* 发送短信(阿里云)
*
* @return
* @throws Exception
*/
public Client createClient() throws Exception {
Config config = new Config();
config.accessKeyId = ACCESSKEYID;
config.accessKeySecret = ACCESSKEYSECRET;
return new com.aliyun.dysmsapi20170525.Client(config);
} }
/** /**
* 推送物流信息 * 推送物流信息
*
* @param ids * @param ids
* @return * @return
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public Result<Object> printLogistInfo(List<Long> ids) { public Result<Object> printLogistInfo(List<Long> ids) {
MsgException.check(ids.isEmpty(),"未选中订单数据!"); MsgException.check(ids.isEmpty(), "未选中订单数据!");
List<MercOrderDetail> list = baseMapper.selectBatchIds(ids); List<MercOrderDetail> list = baseMapper.selectBatchIds(ids);
MsgException.check(list.isEmpty(),"订单数据异常!"); MsgException.check(list.isEmpty(), "订单数据异常!");
boolean flag = false; boolean flag = false;
for (MercOrderDetail detail:list) { for (MercOrderDetail detail : list) {
if(!MercOrderDetail.STATUS_PAYED.equals(detail.getStatus())){ if (!MercOrderDetail.STATUS_PAYED.equals(detail.getStatus())) {
flag = true; flag = true;
break; break;
} }
} }
MsgException.check(flag,"只能处理已支付的订单!"); MsgException.check(flag, "只能处理已支付的订单!");
MercOrderDetail detail = list.get(0); MercOrderDetail detail = list.get(0);
MercOrderNew order = mercOrderNewMapper.getOrderByNo(detail.getOrderNo()); MercOrderNew order = mercOrderNewMapper.getOrderByNo(detail.getOrderNo());
MsgException.checkNull(order,"订单数据异常!"); MsgException.checkNull(order, "订单数据异常!");
JSONObject result = ytLogistHandler.createYtOrderV2(list,order); JSONObject result = ytLogistHandler.createYtOrderV2(list, order);
if(result.getIntValue("code") != ResultCode.SUCCESS.code()){ if (result.getIntValue("code") != ResultCode.SUCCESS.code()) {
MsgException.throwException(result.getString("message")); MsgException.throwException(result.getString("message"));
} }
JSONObject data = result.getJSONObject("data"); JSONObject data = result.getJSONObject("data");
UpdateWrapper<MercOrderDetail> updateWrapper = new UpdateWrapper<MercOrderDetail>().in("id",ids) UpdateWrapper<MercOrderDetail> updateWrapper = new UpdateWrapper<MercOrderDetail>().in("id", ids)
.set("logistNo",data.getString("logistNo")).set("expressNo",data.getString("expressNo")) .set("logistNo", data.getString("logistNo")).set("expressNo", data.getString("expressNo"))
.set("status",MercOrderDetail.STATUS_UN_RECEIVED); .set("status", MercOrderDetail.STATUS_UN_RECEIVED);
update(updateWrapper); update(updateWrapper);
MercOrderExpress orderExpress = new MercOrderExpress(); MercOrderExpress orderExpress = new MercOrderExpress();
orderExpress.setOrderNo(order.getOrderNo()); orderExpress.setOrderNo(order.getOrderNo());
orderExpress.setLogistNo(data.getString("logistNo")); orderExpress.setLogistNo(data.getString("logistNo"));
orderExpress.setExpressNo(data.getString("expressNo")); orderExpress.setExpressNo(data.getString("expressNo"));
orderExpress.setType(MercOrderExpress.EXPRESS_TYPE_HAIR); orderExpress.setType(MercOrderExpress.EXPRESS_TYPE_HAIR);
orderExpress.setStatus(YtStatusEnum.ACCEPT.getValue()); orderExpress.setStatus(YtStatusEnum.ACCEPT.getValue());
mercOrderExpressService.save(orderExpress); mercOrderExpressService.save(orderExpress);
return ResultGenerator.genSuccessResult("处理成功",null); return ResultGenerator.genSuccessResult("处理成功", null);
} }
/** /**
* 分页查询 * 分页查询
*
* @param page * @param page
* @param condition * @param condition
* @return * @return
*/ */
@Override @Override
public Page<MercOrderDetail> pageInfo(Page<MercOrderDetail> page, MercOrderDetail condition) { public Page<MercOrderDetail> pageInfo(Page<MercOrderDetail> page, MercOrderDetail condition) {
return baseMapper.pageInfo(page,condition); return baseMapper.pageInfo(page, condition);
} }
@Override @Override
@@ -364,22 +430,23 @@ public class MercOrderDetailServiceImpl extends ServiceImpl<MercOrderDetailMappe
/** /**
* 填写快递单号 * 填写快递单号
*
* @param id * @param id
* @param expressNo * @param expressNo
* @return * @return
*/ */
@Override @Override
public Result<Object> inputExpressNo(Long id, String expressNo) { public Result<Object> inputExpressNo(Long id, String expressNo) {
MsgException.checkNull(id,"订单ID不能为空!"); MsgException.checkNull(id, "订单ID不能为空!");
MsgException.checkBlank(expressNo,"快递单号不能为空!"); MsgException.checkBlank(expressNo, "快递单号不能为空!");
MercOrderDetail detail = baseMapper.selectById(id); MercOrderDetail detail = baseMapper.selectById(id);
MsgException.checkNull(detail,"订单数据异常!"); MsgException.checkNull(detail, "订单数据异常!");
MsgException.check(!MercOrderDetail.STATUS_PAYED.equals(detail.getStatus()),"只能处理已支付的订单数据"); MsgException.check(!MercOrderDetail.STATUS_PAYED.equals(detail.getStatus()), "只能处理已支付的订单数据");
MsgException.check(StringUtil.isNotEmpty(detail.getExpressNo()),"当前订单已存在物流单号,请勿重复填写"); MsgException.check(StringUtil.isNotEmpty(detail.getExpressNo()), "当前订单已存在物流单号,请勿重复填写");
detail.setStatus(MercOrderDetail.STATUS_UN_RECEIVED); detail.setStatus(MercOrderDetail.STATUS_UN_RECEIVED);
detail.setExpressNo(expressNo); detail.setExpressNo(expressNo);
MercOrderExpress express = mercOrderExpressService.getByExpressNo(expressNo); MercOrderExpress express = mercOrderExpressService.getByExpressNo(expressNo);
if(express == null){ if (express == null) {
express = new MercOrderExpress(); express = new MercOrderExpress();
express.setLogistNo(detail.getLogistNo()); express.setLogistNo(detail.getLogistNo());
express.setOrderNo(detail.getOrderNo()); express.setOrderNo(detail.getOrderNo());
@@ -389,17 +456,18 @@ public class MercOrderDetailServiceImpl extends ServiceImpl<MercOrderDetailMappe
mercOrderExpressService.save(express); mercOrderExpressService.save(express);
} }
baseMapper.updateById(detail); baseMapper.updateById(detail);
return ResultGenerator.genSuccessResult("操作成功",null); return ResultGenerator.genSuccessResult("操作成功", null);
} }
/** /**
* 根据订单号和code查询订单信息 * 根据订单号和code查询订单信息
*
* @param orderNo * @param orderNo
* @param code * @param code
* @return * @return
*/ */
@Override @Override
public List<MercOrderDetail> listByOrderNoAndCode(String orderNo, String code) { public List<MercOrderDetail> listByOrderNoAndCode(String orderNo, String code) {
return baseMapper.listByOrderNoAndCode(orderNo,code); return baseMapper.listByOrderNoAndCode(orderNo, code);
} }
} }

View File

@@ -2,14 +2,26 @@ package cn.pluss.platform.device.impl;
import cn.pluss.platform.device.MercOrderExpressService; import cn.pluss.platform.device.MercOrderExpressService;
import cn.pluss.platform.entity.MercOrderExpress; import cn.pluss.platform.entity.MercOrderExpress;
import cn.pluss.platform.enums.LogisticProvider;
import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.mapper.MercOrderExpressMapper; import cn.pluss.platform.mapper.MercOrderExpressMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import cn.pluss.platform.util.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Service @Service
public class MercOrderExpressServiceImpl extends ServiceImpl<MercOrderExpressMapper, MercOrderExpress> implements MercOrderExpressService { public class MercOrderExpressServiceImpl extends ServiceImpl<MercOrderExpressMapper, MercOrderExpress> implements MercOrderExpressService {
public static final String CHECK_Express = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
/** /**
* 根据上送物流单号查询商户单号 * 根据上送物流单号查询商户单号
* @param logistNo * @param logistNo
@@ -24,4 +36,57 @@ public class MercOrderExpressServiceImpl extends ServiceImpl<MercOrderExpressMap
public MercOrderExpress getByExpressNo(String expressNo) { public MercOrderExpress getByExpressNo(String expressNo) {
return baseMapper.getByExpressNo(expressNo); return baseMapper.getByExpressNo(expressNo);
} }
@Override
public JSONObject getExpressInfo(String expressNo) throws Exception {
if (expressNo.isEmpty()){
throw new MsgException("暂无相应的快递单号");
}
JSONObject reqData = new JSONObject();
String subThree = expressNo.substring(0, 3);
if ("268".equals(subThree) || "368".equals(subThree) || "468".equals(subThree)|| "334".equals(subThree)
|| "888".equals(subThree) || "77".equals(expressNo.substring(0,2))){
reqData.put("ShipperCode", LogisticProvider.STO.getCode());
} else if ("YT".equals(expressNo.substring(0,2))){
reqData.put("ShipperCode", LogisticProvider.YTO.getCode());
} else if ("55".equals(expressNo.substring(0,2))){
reqData.put("ShipperCode", LogisticProvider.HTKY.getCode());
}else {
return new JSONObject();
}
reqData.put("LogisticCode", expressNo);
JSONObject jsonObject = reqJsonData(reqData);
if (!(Boolean) jsonObject.get("Success")){
log.info("快递查询错误===========>",jsonObject.get("Reason"));
throw new MsgException("快递查询失败");
}
return jsonObject;
}
public JSONObject reqJsonData(JSONObject requestData)throws Exception{
Map<String, Object> hashMap = new HashMap<>(16);
hashMap.put("RequestData", requestData);
hashMap.put("EBusinessID", ParametersUtil.USERID);
hashMap.put("RequestType", "1002");
hashMap.put("DataSign", dataSign(requestData));
hashMap.put("DataType", "2");
HttpResult httpResult = HttpUtil.doPost(CHECK_Express, hashMap);
JSONObject jsonObject = JSON.parseObject(httpResult.getBody());
return jsonObject;
}
private String dataSign(JSONObject requestData)throws Exception{
String sign = requestData.toString()+ParametersUtil.APIKEY;
//首先再进行MD5
String lowerMD5 = MD5Util.md5(sign).toLowerCase();
//然后再进行Base64
final byte[] lowerMD5Bytes = lowerMD5.getBytes(StandardCharsets.UTF_8);
String base64= Base64.getEncoder().encodeToString(lowerMD5Bytes);
//再进行base64URL编码
return URLEncoder.encode(base64, "UTF-8");
}
} }

View File

@@ -16,6 +16,7 @@ import cn.pluss.platform.mapper.*;
import cn.pluss.platform.openAccount.OpenAccountRecordService; import cn.pluss.platform.openAccount.OpenAccountRecordService;
import cn.pluss.platform.pay.PayService; import cn.pluss.platform.pay.PayService;
import cn.pluss.platform.postageConfig.PostageConfigService; import cn.pluss.platform.postageConfig.PostageConfigService;
import cn.pluss.platform.sxf.pay.SxfPayService;
import cn.pluss.platform.systemConfig.SystemConfigService; import cn.pluss.platform.systemConfig.SystemConfigService;
import cn.pluss.platform.userAddress.UserAddressService; import cn.pluss.platform.userAddress.UserAddressService;
import cn.pluss.platform.userApp.UserAppService; import cn.pluss.platform.userApp.UserAppService;
@@ -108,6 +109,9 @@ public class MercOrderNewServiceImpl extends ServiceImpl<MercOrderNewMapper, Mer
@Resource @Resource
private MerchantStoreMapper merchantStoreMapper; private MerchantStoreMapper merchantStoreMapper;
@Resource
private SxfPayService sxfPayService;
/** /**
* 设备订单分页查询 * 设备订单分页查询
* *
@@ -446,13 +450,13 @@ public class MercOrderNewServiceImpl extends ServiceImpl<MercOrderNewMapper, Mer
Integer channel = order.getChannel(); Integer channel = order.getChannel();
MsgException.checkNull(channel, "未知通道"); MsgException.checkNull(channel, "未知通道");
switch (channel) { switch (channel) {
case 4: case 1:
//银盛通道 //银盛通道
MerchantChannelStatus channelStatus = mcsMapper.getByMerchantCode(order.getMerchantCode(), channel); MerchantChannelStatus channelStatus = mcsMapper.getByMerchantCode(order.getMerchantCode(), channel);
MsgException.checkNull(channelStatus, "当前通道信息异常!"); MsgException.checkNull(channelStatus, "当前通道信息异常!");
MerchantOrder mo = new MerchantOrder(); MerchantOrder mo = new MerchantOrder();
order.convert(mo, null); order.convert(mo, null);
JSONObject resp = ysPayOldService.tradeQuery(mo, channelStatus.getMerchantId()); JSONObject resp = sxfPayService.tradeQuery(mo, channelStatus.getMerchantId());
if (ResultCode.FAIL.code() == resp.getIntValue("code")) { if (ResultCode.FAIL.code() == resp.getIntValue("code")) {
MsgException.throwException("查询失败:失败原因:" + resp.getString("msg")); MsgException.throwException("查询失败:失败原因:" + resp.getString("msg"));
} }

View File

@@ -101,4 +101,6 @@ public interface DeviceStockService extends IService<DeviceStock> {
void bindDevcieV2(DeviceStockDTO dto); void bindDevcieV2(DeviceStockDTO dto);
DeviceStock checkBind(String sn); DeviceStock checkBind(String sn);
DeviceStock getDeviceBySnNo(String sn);
} }

View File

@@ -399,6 +399,14 @@ public class DeviceStockServiceImpl extends ServiceImpl<DeviceStockMapper, Devic
return deviceBySnNo; return deviceBySnNo;
} }
@Override
public DeviceStock getDeviceBySnNo(String sn) {
MsgException.checkBlank(sn,"缺失设备SN号");
DeviceStock deviceBySnNo = baseMapper.getDeviceBySnNo(sn);
MsgException.checkBlank(deviceBySnNo.getActMercId(),"未绑定扫码pos");
return deviceBySnNo;
}
@Override @Override
public <E extends IPage<DeviceStock>> E page(E page, Wrapper<DeviceStock> queryWrapper) { public <E extends IPage<DeviceStock>> E page(E page, Wrapper<DeviceStock> queryWrapper) {
DeviceStock deviceStock = queryWrapper.getEntity(); DeviceStock deviceStock = queryWrapper.getEntity();

View File

@@ -46,13 +46,13 @@ public class PushServiceImpl extends ServiceImpl<PushAllMapper, PushAll> impleme
switch (type) { switch (type) {
case MAKE_ORDER: case MAKE_ORDER:
generalPushUtil.sendAllPlatByAlias(alias, "收银", "收银线上店订单来了请及时处理", "3"); generalPushUtil.sendAllPlatByAlias(alias, "快银收银", "快银收银线上店订单来了请及时处理", "3");
break; break;
case URGE_ORDER: case URGE_ORDER:
generalPushUtil.sendAllPlatByAlias(alias, "收银", "您有一笔催单请及时处理", "3"); generalPushUtil.sendAllPlatByAlias(alias, "快银收银", "您有一笔催单请及时处理", "3");
break; break;
case REQUEST_SERVICE: case REQUEST_SERVICE:
generalPushUtil.sendAllPlatByAlias(alias, "收银", "您有一个新的呼叫服务请及时处理", "3"); generalPushUtil.sendAllPlatByAlias(alias, "快银收银", "您有一个新的呼叫服务请及时处理", "3");
break; break;
case REFUND_ORDER: case REFUND_ORDER:
generalPushUtil.sendAllPlatByAlias(alias, "收银呗", "您有一笔未接单的线上店订单,客户已申请退款。", "2"); generalPushUtil.sendAllPlatByAlias(alias, "收银呗", "您有一笔未接单的线上店订单,客户已申请退款。", "2");

View File

@@ -12,7 +12,7 @@ import javax.servlet.http.HttpServletResponse;
/** /**
* <p> * <p>
* 收银缴费通收款单 服务类 * 快银收银缴费通收款单 服务类
* </p> * </p>
* *
* @author crystal * @author crystal

View File

@@ -0,0 +1,56 @@
package cn.pluss.platform.klk;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
public class LaKaLaUtility {
// static String pubKey ="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp5aV3ZiXG2R8Yd8Nxocv+cF7VAUHBc0TF4MNne7mI8wM2yEP2QgI+rK1qDf6G7\n" +
// "ZFPhutpIHKQchpolbSuC0vgaHpSjO9OUs1fpnK/JjZq9o8DatUsA0n4Fccec9NBbV5dy5yrwro7xmDpsevp1\n" +
// "/IeiIssi1+iD+nBWqqVFx7GVQIDAQAB";
//测试公钥
private static String pubKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvO9EN9W6OG7y72VUWZili4m8DlD+TMofgIl96OPX9fRBS7Icg3oIqxmU20xFbiswJ2cCU6I1gbE7GDM14CihLQd26xW5T/8TmHCaVFFy1b9AWHNK7sW3aNd2KK1PI3h4gS38ND8jqvdr/8YZSCNF2KOoOe3F17FqVecBdq+1VZQIDAQAB";
public static void main(String[] args) throws Exception {
String data="TOykml1JtGtrNL8rS+Aj/FOaq87eERTCUt9uZJk/ObFvuX5TRstQSl9fP3J2UTjSPO0b/p3Sh8Sxi1w9a6YuDQL9rrZ9orpWpEU+vg8H99fVZnvFjozB4HJf7NE5S9z7Mah93zW7TY1TFS55pIDv4go/fOtGTUcReUY0uFpZQote41m9KHvcjv5HiyCKaT/4cOoSMzHrsRiThwsU+rCDTzI4C32obwrXDOiaMd45wU4GL9/YMfHSpPOqgcsRZIWSBi2Pgt4nJX/s4uxVLzzKG00A8Jxa+yo0JZEgWRuHkOgcrV2Mxg8WmnXug8KeZBSeqYyvPXG9hy32q2phEwd1c6AYEOAKRu3QVhXEyDWjXkn86nvPimn8aohxYaAjky4E66LTnNIPNKOkwC5KVG27H9Fv27ZgqpDzRpYvaRExBT3RjJxXssLBRQ/eejOf7uuq0RgDUqFfwqOICqIUb8qbos6qu+QIsY2tvkbsMB1ZmD3s1SviHmvxWisD0VE/ZTDVQwDLUiORTwaMExirkc0s5bcB51FHHs2TFDa1raa/kSQwL/ADS0yAWNctiQGQtymErEmiD9iFdGXMvgjbqJ7KsDTAotKuYh9VzIA/RuAy+lpajvCIG6NOy428VHHin+RcXe/Ztx1UUHVk3xrHWNYG2aI4yyTLcz0EbG7rcOgWFwI=";
// String data ="hplFXwPU1gbHYwraQM/fKEcoIkBfHD07VSH99OnKTZk9HJRFAvZyOm9nsdeSi8t/UdGPn+LXldrjZ7wiY+F5MzGlIdEma7agKZyHJ+UO6CrDJfYFMwlPUOgO+Pq5ljg6QOdZBxBLEHkRMkQnC/CTv9vQnPDqeCv4MvAbHJspADGRRPvmjxtzf0J4OQgP3hj9+ZqH+btsuX+W+YZRXRMYL+uOQkSJhMUv31hc9MAC/1Sp0C9cBcHKxr+idS+0CCjvD8WzLbXv2QuOSQccIKQw+Je8RMeuKs8f64MibCkf+RkilTCVCEd5apL1MkhYJZoUVzqPXmDBLjaJgr987X1wBAzQMS8+F34Vl/BonKPuJ4RRwdE/M3WJ+ZfM2WiLawpU7ZqUQdVY2bwJO801TcmFCswLoz2qxHHsBsjXtQPqMOj3pw3Kvz3WH3oWmcFRZjHKIbDSy9Jh2STEFRbvVWarjksBVjXkcbletDtOtY0T8XCdiiNoQNlVNj5kH5QkAWmt";
String decrypt = LaKaLaUtility.decrypt(data);
System.out.println("解密结果:" + decrypt);
}
/**
* 公钥解密
* @param
* @param data Base64 数据
* @return 解密字符串
* @throws Exception 解密异常
*/
public static String decrypt(String data){
try {
Base64.Decoder decoder = Base64.getDecoder();
byte[] keyBytes = decoder.decode(pubKey.getBytes());
byte[] dataBytes = decoder.decode(data.getBytes());
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE,
KeyFactory.getInstance("RSA").generatePublic(new
X509EncodedKeySpec(keyBytes)));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] cache;
for (int i = 0, offset = 0, length = dataBytes.length; length -
offset > 0; i++, offset = i * 128) {
if (length - offset > 128) {
cache = cipher.doFinal(dataBytes, offset, 128);
} else {
cache = cipher.doFinal(dataBytes, offset, length - offset);
}
out.write(cache, 0, cache.length);
}
return out.toString();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}

View File

@@ -0,0 +1,196 @@
package cn.pluss.platform.klk.cache;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.*;
/**
* 暂时用jdk的缓存
* */
public class MemoryCache {
//键值对集合
private final static Map<String, Entity> map = new HashMap<>();
//定时器线程池,用于清除过期缓存
private final static ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
/**
* 添加缓存
* 可用 synchronized 加锁
* @param key 键
* @param data 值
*/
public static void put(String key, Object data) {
MemoryCache.put(key, data, 0);
}
/**
* 添加缓存
* 可用 synchronized 加锁
* @param key 键
* @param data 值
* @param expire 过期时间,单位:毫秒, 0表示无限长
*/
public static void put(String key, Object data, long expire) {
//清除原键值对
MemoryCache.remove(key);
//设置过期时间
if (expire > 0) {
Future future = executor.schedule(new Runnable() {
@Override
public void run() {
//过期后清除该键值对
synchronized (MemoryCache.class) {
map.remove(key);
}
}
}, expire, TimeUnit.MILLISECONDS);
map.put(key, new Entity(data, future));
} else {
//不设置过期时间
map.put(key, new Entity(data, null));
}
}
/**
* 读取缓存
* 可用 synchronized 加锁
* @param key 键
* @return
*/
public static Object get(String key) {
Entity entity = map.get(key);
return entity == null ? null : entity.getValue();
}
/**
* 读取缓存
* 可用 synchronized 加锁
* @param key 键
* @param clazz 值类型
* @return
*/
public static <T> T get(String key, Class<T> clazz) {
return clazz.cast(MemoryCache.get(key));
}
/**
* 清除缓存
* 可用 synchronized 加锁
* @param key
* @return
*/
public static Object remove(String key) {
//清除原缓存数据
Entity entity = map.remove(key);
if (entity == null) {
return null;
}
//清除原键值对定时器
Future future = entity.getFuture();
if (future != null) {
future.cancel(true);
}
return entity.getValue();
}
/**
* 查询当前缓存的键值对数量
* 可用 synchronized 加锁
* @return
*/
public static int size() {
return map.size();
}
/**
* 缓存实体类
*/
private static class Entity {
//键值对的value
private Object value;
//定时器Future
private Future future;
public Entity(Object value, Future future) {
this.value = value;
this.future = future;
}
/**
* 获取值
*
* @return
*/
public Object getValue() {
return value;
}
/**
* 获取Future对象
*
* @return
*/
public Future getFuture() {
return future;
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
String key = "id";
//不设置过期时间
System.out.println("***********不设置过期时间**********");
MemoryCache.put(key, 123);
System.out.println("key:" + key + ", value:" + MemoryCache.get(key));
System.out.println("key:" + key + ", value:" + MemoryCache.remove(key));
System.out.println("key:" + key + ", value:" + MemoryCache.get(key));
//设置过期时间
System.out.println("\n***********设置过期时间**********");
MemoryCache.put(key, "123456", 1000);
System.out.println("key:" + key + ", value:" + MemoryCache.get(key));
TimeUnit.MILLISECONDS.sleep(1500);
System.out.println("key:" + key + ", value:" + MemoryCache.get(key));
/******************并发性能测试************/
System.out.println("\n***********并发性能测试************");
//创建有10个线程的线程池将1000000次操作分10次添加到线程池
ExecutorService executorService = Executors.newFixedThreadPool(10);
Future[] futures = new Future[10];
/********添加********/
{
long start = System.currentTimeMillis();
for (int j = 0; j < 10; j++) {
futures[j] = executorService.submit(() -> {
for (int i = 0; i < 100000; i++) {
MemoryCache.put(Thread.currentThread().getId() + key + i, i, 300000);
}
});
}
//等待全部线程执行完成,打印执行时间
for (Future future : futures) {
future.get();
}
System.out.printf("添加耗时:%dms\n", System.currentTimeMillis() - start);
}
/********查询********/
{
long start = System.currentTimeMillis();
for (int j = 0; j < 10; j++) {
futures[j] = executorService.submit(() -> {
for (int i = 0; i < 100000; i++) {
Object obj = MemoryCache.get(Thread.currentThread().getId() + key + i);
System.out.println("cacheObj:" + obj);
}
});
}
//等待全部线程执行完成,打印执行时间
for (Future future : futures) {
future.get();
}
System.out.printf("查询耗时:%dms\n", System.currentTimeMillis() - start);
}
System.out.println("当前缓存容量:" + MemoryCache.size());
}
}

Some files were not shown because too many files have changed in this diff Show More