Browse Source

Merge branch 'release_toaliyun_real_202111' of https://git.malls.iformall.com/server/formallProject into release_toaliyun_real_202111

release_toaliyun_real
xhxu 4 years ago
parent
commit
cefca2e93b
11 changed files with 184 additions and 99 deletions
  1. +14
    -4
      mallinkAdmin/src/main/java/com/iformall/controller/sys/SysConfigController.java
  2. +2
    -0
      mallinkAdmin/src/main/resources/db/migration/V2021112900001__dynamicId.sql
  3. +1
    -1
      mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java
  4. +44
    -44
      mallinkCallback/src/main/java/com/iformall/controller/callback/JinMaoController.java
  5. +6
    -1
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  6. +1
    -0
      mallinkService/src/main/java/com/iformall/common/SysConfigConstant.java
  7. +2
    -0
      mallinkService/src/main/java/com/iformall/service/SysConfigService.java
  8. +3
    -0
      mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java
  9. +22
    -2
      mallinkService/src/main/java/com/iformall/service/impl/SysConfigServiceImpl.java
  10. +85
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java
  11. +4
    -47
      mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java

+ 14
- 4
mallinkAdmin/src/main/java/com/iformall/controller/sys/SysConfigController.java View File

@@ -1,9 +1,14 @@
package com.iformall.controller.sys;

import com.github.pagehelper.PageInfo;
import com.iformall.annotation.SystemControllerLog;
import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.MallRole;
import com.iformall.domain.po.MallRolePermission;
import com.iformall.domain.po.SysConfig;
import com.iformall.domain.po.SysConfigValue;
import com.iformall.domain.po.base.BaseEntity;
import com.iformall.service.SysConfigService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -25,13 +30,18 @@ public class SysConfigController extends BaseController {
@Autowired
private SysConfigService sysConfigService;

@ApiOperation("列表接口")
@ApiOperation("角色列表")
@GetMapping("list")
public ResultData list() {
//@RequiresPermissions("sys:role:list")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
public ResultData list(MallRole sysRole, Integer pageNum, Integer pageSize) {
SysConfig config = new SysConfig();
config.setStatus(0);
List<SysConfig> list = sysConfigService.getList(config, getTenantInfo());
return new ResultData(list);
PageInfo<SysConfig> page = sysConfigService.listAsPage(config, pageNum, pageSize, getTenantInfo());
return new ResultData(page);
}
@ApiOperation("详情接口")


+ 2
- 0
mallinkAdmin/src/main/resources/db/migration/V2021112900001__dynamicId.sql View File

@@ -23,6 +23,8 @@ CREATE TABLE `sys_config_value` (

insert into `sys_config`(`id`,`config_item_key`,`config_item_remark`,`create_date`,`update_date`,`status`) values
(1,'vierfySeconds','核销过期时间,秒','2021-11-29 17:53:23','2021-11-29 17:53:23',0);
insert into `sys_config`(`id`,`config_item_key`,`config_item_remark`,`create_date`,`update_date`,`status`) values
(2,'defaultMerchantBUserId','外部设备核销默认商户员工编号','2021-11-29 17:53:23','2021-11-29 17:53:23',0);

insert into `sys_config_value`(`id`,`config_item_id`,`config_item_value`,`tenant_id`,`parent_tenant_id`,`create_date`,`update_date`) values
(1,1,'60','789',NULL,'2021-11-29 17:54:07','2021-11-29 17:54:07');


+ 1
- 1
mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java View File

@@ -215,7 +215,7 @@ public class WxCouponOrderController extends BaseController {
SysConfig sysConfig = sysConfigService.getByKey(SysConfigConstant.vierfy_seconds_key, getTenantInfo());
if (null == sysConfig || StringUtils.isBlank(sysConfig.getConfigItemValue())) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"系统设置[手动核销超时时间未配置]");
return new ResultData(ErrorCode.SYS_CONFIG_VIERFY_SECODES_UNSET);
}
Map retmap = new HashMap();


+ 44
- 44
mallinkCallback/src/main/java/com/iformall/controller/callback/JinMaoController.java View File

@@ -1,13 +1,23 @@
package com.iformall.controller.callback;


import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.common.SysConfigConstant;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.WxCouponOrderCVo;
import com.iformall.enums.EnumAssignTagsTrigger;
import com.iformall.enums.EnumCouponType;
import com.iformall.enums.EnumCouponValidType;
import com.iformall.enums.EnumCouponVerifyType;
import com.iformall.enums.EnumCreditLockedStatus;
import com.iformall.exception.MallinkException;
import com.iformall.service.*;
import com.iformall.service.tags.jinmao.JinMaoOrderTagsDeveloper;
import com.iformall.service.tags.jinmao.JinMaoUserTagsDeveloper;
import com.iformall.utils.DateUtils;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -56,8 +66,8 @@ public class JinMaoController extends BaseController {
@Autowired
private JinMaoUserTagsDeveloper jinMaoUserTagsDeveloper;
@Autowired
private WxCouponOrderService wxCouponOrderService;
/**
* 金茂东风湖运动公园用户数据推送。
@@ -197,54 +207,44 @@ public class JinMaoController extends BaseController {
}
@RequestMapping(value = "/dfh/verify")
public void dfhVerify(@RequestBody Map param) throws Exception {
public ResultData dfhVerify(@RequestBody Map param) throws Exception {
logger.info("dfh verify:"+param);
try {
String price = param.get("price")==null?"":param.get("price").toString();
Integer payment = 0;
if(StringUtils.isNotBlank(price)) {
payment = new BigDecimal(price)
.multiply(new BigDecimal(100))
.intValue();
}
Integer num = param.get("num")==null?1:Integer.parseInt(param.get("num").toString());
String userPhone = param.get("userPhone")==null?"":param.get("userPhone").toString();
String gymName = param.get("gymName")==null?"":param.get("gymName").toString();
String payWay = param.get("payWay")==null?"":param.get("payWay").toString();
String orderId = param.get("ID")==null?"":param.get("ID").toString();
String timeStr = param.get("time")==null?"":param.get("time").toString();
Date paymentTime = null;
if(StringUtils.isNotBlank(timeStr)){
paymentTime = sdf.parse(timeStr);
String couponOrderIdStr = param.get("couponOrderId")==null?"":param.get("couponOrderId").toString();
if (StringUtils.isBlank(couponOrderIdStr)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
}
String productName = param.get("productName")==null?"":param.get("productName").toString();
if(StringUtils.isNotBlank(userPhone) && userPhone.matches("^1[0-9]{10}$")
&& StringUtils.isNotBlank(orderId)){
WxCUserBasicInfo basicInfo = new WxCUserBasicInfo();
basicInfo.setPhone(userPhone);
wxCUserBasicInfoService.registerJinmao(tenantEntity,basicInfo);

JmSportOrder order = new JmSportOrder();
order.updateTenantInfo(tenantEntity);
order.setOrderId(orderId);
order.setUserPhone(userPhone);
order.setUserId(basicInfo.getId());
order.setProductName(productName);
order.setNum(num);
order.setPrice(price);
order.setPayment(payment);
order.setPaymentTime(paymentTime);
order.setPayWay(payWay);
order.setGymName(gymName);
jmSportOrderService.saveOrUpdate(order);

wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_DEV, basicInfo,tenantEntity,jinMaoOrderTagsDeveloper);

}else{
logger.error("JinMaoController --dfhOrder--订单手机号为空或者订单号为空-userPhone{}"+userPhone+"-orderId{}"+orderId);
String _decodeCouponOrderId = WxCouponOrderCVo.getDecodeExpiredCouponOrderId(couponOrderIdStr);
if (_decodeCouponOrderId.contains(WxCouponOrderCVo.arg)) {
String[] decodeids = _decodeCouponOrderId.split(WxCouponOrderCVo.arg);
couponOrderIdStr = decodeids[0];
String expiredtimeStr = decodeids[1];
Date expiredtime = DateUtils.string2Date(expiredtimeStr).getTime();
if (expiredtime.before(new Date())) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"码已失效,请更新二维码后重试");
}
}
Long couponOrderId = 0L;
try {
couponOrderId = Long.valueOf(couponOrderIdStr);
} catch (NumberFormatException e) {
couponOrderId = 0L;
logger.error("couponOrderId参数不正确: " + param.toString());
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
}

try {
WxCouponOrder couponOrder = wxCouponOrderService.verifyByEquiment(couponOrderId, "1035", "1037", "闸机扫码核销");
return new ResultData(couponOrder);
}catch(Exception e) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getMessage());
}
}catch(Exception e){
logger.error("JinMaoController --dfhOrder",e);
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getMessage());
}

}


+ 6
- 1
mallinkService/src/main/java/com/iformall/common/ErrorCode.java View File

@@ -30,7 +30,12 @@ public enum ErrorCode{
REPORT_TYPE_UNKNOWN(1014, "不支持的报表类型"),
SYS_MCH_NOT_FOUND(1015, "微信商户号未找到"),
SYS_AUTH_ERROR(1016, "该用户没有权限访问"),

/**
* 系统配置
*/
SYS_CONFIG_VIERFY_SECODES_UNSET(1030,"系统设置【核销过期时间】未配置"),
SYS_CONFIG_DEFAULT_MERCHANT_B_USER_UNSET(1031,"系统配置【外部设备核销默认商户员工编号】未配置"),
/**
* 菜单
*/


+ 1
- 0
mallinkService/src/main/java/com/iformall/common/SysConfigConstant.java View File

@@ -3,4 +3,5 @@ package com.iformall.common;
public class SysConfigConstant {

public static final String vierfy_seconds_key="vierfySeconds";
public static final String default_merchant_b_user = "defaultMerchantBUserId";
}

+ 2
- 0
mallinkService/src/main/java/com/iformall/service/SysConfigService.java View File

@@ -8,6 +8,8 @@ import java.util.List;

public interface SysConfigService {

PageInfo<SysConfig> listAsPage(SysConfig record, Integer pageIndex, Integer pageSize,TenantEntity tenantEntity);
/**
* 根据实体查询列表
*


+ 3
- 0
mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java View File

@@ -57,6 +57,9 @@ public interface WxCouponOrderService {
* @param bUser 核销人(登录用户)
*/
WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser, EnumCouponVerifyType couponVerifyType);
WxCouponOrder verifyByEquiment(Long couponOrderId,String tenantId,String parentTenantId,String remark);

/**
* 核销后发送消息


+ 22
- 2
mallinkService/src/main/java/com/iformall/service/impl/SysConfigServiceImpl.java View File

@@ -13,6 +13,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.IdWorker;

@Service
@@ -29,6 +32,25 @@ public class SysConfigServiceImpl implements SysConfigService {
@Qualifier("objectCommonRedisTemplate")
RedisTemplate<String, Object> baseRedisTemplate;

@Override
public PageInfo<SysConfig> listAsPage(SysConfig record, Integer pageIndex, Integer pageSize,TenantEntity tenantEntity) {
PageInfo<SysConfig> page = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> sysConfigMapper.findList(record));
if (null != page && null != page.getList()) {
for (SysConfig config : page.getList()) {
SysConfigValue cvq = new SysConfigValue();
cvq.setConfigItemId(config.getId());
cvq.updateTenantInfo(tenantEntity);
SysConfigValue configValue = sysConfigValueMapper.findByItemId(cvq);
if (null != configValue) {
config.setConfigItemValue(configValue.getConfigItemValue());
}
}
}
return page;
}

@Override
public List<SysConfig> getList(SysConfig record,TenantEntity tenantEntity) {
List<SysConfig> list = sysConfigMapper.findList(record);
@@ -106,7 +128,5 @@ public class SysConfigServiceImpl implements SysConfigService {
RedisCacheUtils.removeCache(baseRedisTemplate, String.format(cache_prex, tenantEntity.getTenantId(),config.getConfigItemKey()));
}

}

+ 85
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java View File

@@ -12,6 +12,7 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.common.SysConfigConstant;
import com.iformall.domain.dto.WxSharingOrderDto;
import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
@@ -163,6 +164,13 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
@Autowired
OrderFactory orderFactory;
@Autowired
WxCUserBasicInfoService wxCUserBasicInfoService;
@Autowired
SysConfigService sysConfigService;
@Autowired
WxMerchantBUserService wxMerchantBUserService;

private final SimpleDateFormat mydateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

@@ -543,6 +551,83 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
couponOrder.setMerchantId(merchantId);
return couponOrder;
}
@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public WxCouponOrder verifyByEquiment(Long couponOrderId,String tenantId,String parentTenantId,String remark) {
TenantEntity tenantEntity = new TenantEntity();
tenantEntity.setTenantId(tenantId);
tenantEntity.setParentTenantId(parentTenantId);
WxCouponOrderCVo wxCouponOrderCVo = this.detailCUserVo(String.valueOf(couponOrderId),tenantEntity);
if (wxCouponOrderCVo == null) {
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL);
}
WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(wxCouponOrderCVo.getcUserId(),wxCouponOrderCVo.getFinalTenantId());
if (wxCUserBasicInfo != null && EnumCreditLockedStatus.CLOSE.getCode().equals(wxCUserBasicInfo.getStatus())) {
throw new MallinkException(ErrorCode.MEMBER_IS_LOCKED);
}
Date now = new Date();
if (wxCouponOrderCVo.getValidType().equals(EnumCouponValidType.BETWEEN_TWO_TIME.getCode())){
// && !wxCouponOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode())) {
if(wxCouponOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode())){
if (wxCouponOrderCVo.getPickStartDate().after(now)) {
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE);
}
if (wxCouponOrderCVo.getPickEndDate().before(now)) {
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_LATER_THAN_VALIDDATE);
}
}else{
if (wxCouponOrderCVo.getValidStartDate().after(now)) {
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE);
}
if (wxCouponOrderCVo.getValidEndDate().before(now)) {
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_LATER_THAN_VALIDDATE);
}
}

} else {
if (wxCouponOrderCVo.getExpiredTime().before(now)) {
throw new MallinkException(ErrorCode.COUPON_IS_EXPIRED);
}
}

WxCouponOrder wxCouponOrder = this.getById(couponOrderId,tenantEntity.getTenantId());
if (wxCouponOrder == null) {
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL);
}

SysConfig sysConfig = sysConfigService.getByKey(SysConfigConstant.default_merchant_b_user, tenantEntity);
if (null == sysConfig) {
throw new MallinkException(ErrorCode.SYS_CONFIG_DEFAULT_MERCHANT_B_USER_UNSET);
}
WxMerchantBUser wxMerchantBUser = wxMerchantBUserService.getById(Long.parseLong(sysConfig.getConfigItemValue()));
if (wxMerchantBUser == null) {
throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "核销员ID不存在");
}
WxCouponOrder couponOrder = null;
try {
wxCouponOrder.setVerifyRemark(remark);
couponOrder = this.verify(wxCouponOrder, wxMerchantBUser, EnumCouponVerifyType.VERIFY_B);
} catch (MallinkException e) {
logger.error("核销异常: " ,e);
throw new MallinkException(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
logger.error("核销异常: " ,e);
throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), e.getMessage());
}

if (couponOrder != null && couponOrder.getMerchantId() != null) {
this.sendInsideCouponVerifyMsg(couponOrder, couponOrderId, couponOrder.getMerchantId());
}
return couponOrder;
}

/**
* B端核销卷增加成长值,积分


+ 4
- 47
mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java View File

@@ -41,8 +41,7 @@ import java.util.Map;
public class HaiKangWeiShiUtil {

public static final String TOKEN_URL = "https://open.hikyun.com/artemis/oauth/token";
public static final String CAR_STOP_INFO = "https://open.hikyun.com/api/pmsc/v1/tempCarInRecords/page";
public static final String GET_FEE = "https://open.hikyun.com/api/pmsc/v1/pay/getVehicleBill";
public static final String GET_FEE = "https://open.hikyun.com/api/pmsc/v1/pay/ quickGetVehicleBill";
public static final String COUPON_USE = "https://open.hikyun.com/api/pmsc/v1/coupon/addition";

@@ -91,58 +90,16 @@ public class HaiKangWeiShiUtil {
}
/**
* 3.5.7 查询临时车停车信息
*/
private JSONObject getCarStopInfo(WxPark wxPark,String carNumber,String token) {
String vendroParams = wxPark.getVendorParams();
JSONObject vp = JSON.parseObject(vendroParams);
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("pageNo", "1"));
list.add(new BasicNameValuePair("pageSize", "1"));
list.add(new BasicNameValuePair("parkId", wxPark.getParkId()));
list.add(new BasicNameValuePair("plateNo", carNumber));//
String carStopInfo = ProcBussiness(CAR_STOP_INFO, list, token);
if (StringUtils.isBlank(carStopInfo)) {
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getCarStopInfo error. has no result");
}
JSONObject carStopInfoResult = JSON.parseObject(carStopInfo);
if (carStopInfoResult.getInteger("code") != 0 ) {
String message = carStopInfoResult.getString("msg");
throw new MallinkException(carStopInfoResult.getInteger("code"), "haikang getCarStopInfo error."+message);
}
JSONObject carStopInfoAttribute = carStopInfoResult.getJSONObject("data");
if (null == carStopInfoAttribute) {
throw new MallinkException(carStopInfoResult.getInteger("code"), "haikang getCarStopInfo error. no result"+carNumber);
}
JSONArray carStopInfoList = carStopInfoResult.getJSONArray("list");
if (null == carStopInfoList || carStopInfoList.size() <= 0 ) {
throw new MallinkException(carStopInfoResult.getInteger("code"), "haikang getCarStopInfo error. no result"+carNumber);
}
return carStopInfoList.getJSONObject(0);
}
/**
* 查询停车费 3.5.3 获取账单接口
* 查询停车费 3.5.5 快速获取账单接口
* @return
*/
public JSONObject getFee(WxPark wxPark,String carNumber,String token) {
JSONObject carStopInfo = getCarStopInfo(wxPark,carNumber,token);
String vendroParams = wxPark.getVendorParams();
JSONObject vp = JSON.parseObject(vendroParams);
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("chargeSource", "THIRD"));//商户编号
Map vehicle = new HashMap();
vehicle.put("parkId", wxPark.getParkId());
vehicle.put("plateNo", carNumber);
vehicle.put("vehicleType", 1);
vehicle.put("plateType", 1);
vehicle.put("groupId", 1);
vehicle.put("freeTime", new Object[] {});
list.add(new BasicNameValuePair("vehicle", "["+JSON.toJSONString(vehicle)+"]") );//商户编号
list.add(new BasicNameValuePair("parkId", wxPark.getParkId()));
list.add(new BasicNameValuePair("plateNo", carNumber));
String retCode= ProcBussiness(GET_FEE, list, token);
if (StringUtils.isBlank(retCode)) {
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getFee error. has no result");


Loading…
Cancel
Save