Browse Source

[卡密/停车][修改]:merge 更改 from dev

release_toaliyun_real
Stormeye Wu 6 years ago
parent
commit
ff33aa3164
18 changed files with 491 additions and 389 deletions
  1. +2
    -2
      mallinkAdmin/src/main/java/com/iformall/controller/car/WxCarController.java
  2. +7
    -6
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPasswordController.java
  3. +2
    -1
      mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java
  4. +2
    -0
      mallinkAdmin/src/main/resources/db/migration/V201909170500__G_COUPON_PASSWORD.sql
  5. +55
    -39
      mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java
  6. +262
    -76
      mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarTJDCallBackController.java
  7. +7
    -1
      mallinkService/src/main/java/com/iformall/domain/po/WxCouponPassword.java
  8. +2
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/WxCouponPasswordCountInfoVO.java
  9. +0
    -4
      mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java
  10. +2
    -4
      mallinkService/src/main/java/com/iformall/service/WxCouponPasswordService.java
  11. +7
    -7
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java
  12. +9
    -6
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponPresentServiceImpl.java
  13. +86
    -62
      mallinkService/src/main/java/com/iformall/utils/car/TJDUtil.java
  14. +18
    -6
      mallinkService/src/main/resources/mapper/WxCouponPasswordMapper.xml
  15. +2
    -2
      mallinkService/src/main/resources/mapper/WxCouponPresentMapper.xml
  16. +1
    -17
      mallinkService/src/main/resources/mapper/WxCreditHistoryMapper.xml
  17. +3
    -2
      mallinkService/src/main/resources/mapper/WxMsgCallbackMapper.xml
  18. +24
    -154
      mallinkSysAdmin/src/main/java/com/iformall/controller/sys/DataInitController.java

+ 2
- 2
mallinkAdmin/src/main/java/com/iformall/controller/car/WxCarController.java View File

@@ -16,7 +16,7 @@ import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxCouponMapper;
import com.iformall.service.*;
import com.iformall.utils.car.ETCPUtil;
import com.iformall.utils.car.TJDCarUtil;
import com.iformall.utils.car.TJDUtil;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@@ -37,7 +37,7 @@ public class WxCarController extends BaseController {

ETCPUtil etcp = new ETCPUtil();

TJDCarUtil tjd = new TJDCarUtil();
TJDUtil tjd = new TJDUtil();

@Autowired
WxParkService wxParkService;


+ 7
- 6
mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPasswordController.java View File

@@ -2,7 +2,6 @@ package com.iformall.controller.market;

import com.github.pagehelper.PageInfo;
import com.iformall.annotation.SystemControllerLog;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.BaseEntity;
@@ -21,8 +20,6 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
* @author gongbiao
*/
@@ -51,11 +48,15 @@ public class WxCouponPasswordController extends BaseController {

@ApiOperation("可发送卡数据")
@GetMapping("/findCouponList")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
@SystemControllerLog(description = "可发送卡数据")
public ResultData findCouponList() {
public ResultData findCouponList(@ModelAttribute WxCouponPassword wxCouponPassword, Integer pageNum, Integer pageSize) {
logger.debug("[" + getIpAddr() + "] WxCouponPasswordController::findCouponList");
List<WxCouponPasswordCountInfoVO> voList = wxCouponPasswordService.findCouponList(getTenantId());
return new ResultData(Result.SUCCESS, "查询成功", voList);
wxCouponPassword.setTenantId(getTenantId());
final PageInfo<WxCouponPasswordCountInfoVO> page = wxCouponPasswordService.findCouponList(wxCouponPassword, pageNum, pageSize);
return new ResultData(page);
}




+ 2
- 1
mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java View File

@@ -129,7 +129,8 @@ public class TenantInfoImpl implements TenantInfo {
return true;
if ("com.iformall.mapper.WxBillPropertyMapper.insertBillAction".equals(ms.getId()))
return true;

if ("com.iformall.mapper.WxCouponPasswordMapper.updateStatus".equals(ms.getId()))
return true;
return false;
}
}

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

@@ -0,0 +1,2 @@
alter table wx_coupon_password
add column present_id bigint(20) default 0 not null comment '发放ID';

+ 55
- 39
mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java View File

@@ -13,7 +13,7 @@ import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.service.*;
import com.iformall.utils.car.ETCPUtil;
import com.iformall.utils.car.TJDCarUtil;
import com.iformall.utils.car.TJDUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -37,7 +37,7 @@ public class WxCarController extends BaseController {

ETCPUtil etcp = new ETCPUtil();

TJDCarUtil tjd = new TJDCarUtil();
TJDUtil tjd = new TJDUtil();

@Autowired
WxParkService wxParkService;
@@ -241,16 +241,7 @@ public class WxCarController extends BaseController {
* @param paramMap
* @return
*/
@ApiOperation(value = "绑车牌", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n" +
"TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}\n返回\n" +
"{\n" +
" \"timestamp\": \"1464235239561\",\n" +
" \"returnCode\": \"T\",\n" +
" \"errorMsg\": \"\",\n" +
" \"returnMsg\": \"OK\",\n" +
" \"isSuccess\": \"0\",\n" +
" \"carId\": \"5836b8b52ada463ebc6199579f029561\"\n" +
"}\n")
@ApiOperation(value = "绑车牌", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}, TJD:={\"carNumber\":\"string\"}")
@PostMapping("/bindCar")
public ResultData bindCar(@RequestBody Map<String, String > paramMap) {
// 1, get mall's park
@@ -258,11 +249,10 @@ public class WxCarController extends BaseController {
// 2. get vendor params
if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
return etcpBindCar(paramMap, park);
} else {
// 内部操作
return bindCar(paramMap, park);
}
else if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()) {
return tjdBindCar(paramMap, park);
}
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "绑车牌失败");
}

private ResultData etcpBindCar(Map<String, String> paramMap, WxPark park) {
@@ -292,7 +282,7 @@ public class WxCarController extends BaseController {
}
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) {
addCarInfoToDB(carNumber);
addCarInfoToDB(carNumber, EnumCarVendor.CAR_ETCP);
JSONObject dataObj = retObj.getJSONObject("data");
return new ResultData(dataObj);
} else {
@@ -302,14 +292,30 @@ public class WxCarController extends BaseController {
}
}

private void addCarInfoToDB(String carNumber) {
private ResultData bindCar(Map<String, String> paramMap, WxPark park) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
try {
addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()));
} catch (MallinkException e) {
return new ResultData(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
return new ResultData(500, e.getMessage());
}
return new ResultData();
}

private void addCarInfoToDB(String carNumber, EnumCarVendor carVendor) {
// 插入车牌
Date curr = new Date();
WxCUserCar userCar = new WxCUserCar();
userCar.setCUserId(getUserId());
userCar.setTenantId(getTenantId());
userCar.setCarNumber(carNumber);
userCar.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
userCar.setVendorType(carVendor.getCode());
userCar.setCreateDate(curr);
userCar.setUpdateDate(curr);
wxCUserCarService.saveOrUpdate(userCar);
@@ -409,26 +415,16 @@ public class WxCarController extends BaseController {
" \"code\": 0,\n" +
" \"message\": \"ok\"" +
"}" +
"TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}\n返回:\n" +
"{\n" +
" \"timestamp\": \"1464235239561\",\n" +
" \"returnCode\": \"T\",\n" +
" \"errorMsg\": \"\",\n" +
" \"returnMsg\": \"OK\",\n" +
" \"isSuccess\": \"0\",\n" +
"}\n")
"TJD:={\"carNumber\":\"string\"}")
@PostMapping("/unbindCar")
public ResultData unbindCar(@RequestBody Map<String, String > paramMap) {
// 1, get mall's park
WxPark park = getCurrentPark(getTenantId());
if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) {
return etcpUnbindCar(paramMap, park);
} else {
return unbindCar(paramMap, park);
}
else if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()) {
ResultData e = tjdUnbindCar(paramMap, park);
if (e != null) return e;
}
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "解绑车牌失败");
}

private ResultData etcpUnbindCar(Map<String, String> paramMap, WxPark park) {
@@ -478,6 +474,26 @@ public class WxCarController extends BaseController {
}
}

private ResultData unbindCar(Map<String, String> paramMap, WxPark park) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
try {
WxCUserCar userCar = new WxCUserCar();
userCar.setTenantId(getTenantId());
userCar.setCUserId(getUserId());
userCar.setCarNumber(carNumber);
wxCUserCarService.deleteByObj(userCar);
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage());
}

return new ResultData();
}

private ResultData tjdUnbindCar(@RequestBody Map<String, String> paramMap, WxPark park) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
@@ -536,7 +552,7 @@ public class WxCarController extends BaseController {
" \"paidFee\": 0,\n" +
" \"verificationInfo\": \"FSED9JvxgAU6XJUd8YRF5YH/LpfQYzCAfcPbAOKPV3BjKSatbgIsh7EBH2JBiRoGBe3btr gzKRMTfIoFuCn1XX7HUsJYlb7JSCBArnNmEVU4JuDLLjzoqB7qhQ8KnP16\"\n" +
" }" +
"TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}\n输出\n{\n" +
"TJD:={\"carNumber\":\"string\"}\n输出\n{\n" +
" \"inDt\": \"20160526112000\",\n" +
" \"timestamp\": \"1464235239561\",\n" +
" \"returnCode\": \"T\",\n" +
@@ -628,13 +644,13 @@ public class WxCarController extends BaseController {
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String partner = objParams.getString("partner");
String key = objParams.getString("key");
String version = objParams.getString("version");
String url = objParams.getString(TJDUtil.TJD_URL);
String partner = objParams.getString(TJDUtil.TJD_ACCOUNT);
String key = objParams.getString(TJDUtil.TJD_ACCOUNT_KEY);
String version = objParams.getString(TJDUtil.TJD_VERSION);
String ret = tjd.infoForFreeMins(url, partner, key, version, carNumber);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString("returnCode").equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
return new ResultData(retObj);
} else {
return new ResultData(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败");


+ 262
- 76
mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarTJDCallBackController.java View File

@@ -2,28 +2,23 @@ package com.iformall.controller.callback;

import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import com.iformall.common.ErrorCode;
import com.iformall.common.Result;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.*;
import com.iformall.enums.EnumCarCmd;
import com.iformall.enums.EnumCarVendor;
import com.iformall.enums.EnumCouponSendSendType;
import com.iformall.enums.EnumETCPCode;
import com.iformall.service.*;
import com.iformall.utils.DateUtils;
import com.iformall.utils.car.TJDCarUtil;
import com.iformall.utils.car.TJDUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
@@ -56,9 +51,7 @@ public class WxCarTJDCallBackController extends BaseController {
@Autowired
WxCUserService wxCUserService;

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

/**
/**
* 注册车牌
* @param paramMap
* @return
@@ -87,73 +80,132 @@ public class WxCarTJDCallBackController extends BaseController {
Map map = new HashMap();
return map;
}
/**
* 进场通知
* {
* "parkId": "f3f11a46f3a14056953aed97944242d4", "parkName": "测试停车场",
* "carNum": "京A12345",
* "carNumColor ": "blue",
* "tradeId": "5836b8b52ada463ebc6199579f029565",
* "outCarId": "",
* "inDt": "20170319202020",
* "payUrl":
* "http://prep.tingjiandan.com/tcweixin/letter/prePay/pagePayInPark?prePayType=16&channel=10001&isShowDetail=true&orderId=5836b8b52ada463ebc6199579f029565&returnUrl=",
* "miniProgram": "{
* \"path\": \"pages/pre_pay/index/main\",
* \"extraData\": {
* \"prePayType\": \"16\",
* \"channel\": \"10001\",
* \"isShowDetail\": \"true\",
* \"orderId\": \"5836b8b52ada463ebc6199579f029565\"
* }}",
* "canFindCar": "0",
* "city": "北京市",
* "district": "海淀区",
* "address": "五道口",
* "lon": "74.000272",
* "lat": "159.768703",
* "wLon": "123.523032",
* "wLat": "35.430735"
* wLon=116.310335,
* lon=116.316813,
* outCarId=,
* parkId=7715622dff834b34a44448b801c27607,
* tradeId=e9e0d5db057f412fa323995fc292f6f7,
* carNumColor=blue,
* canFindCar=0,
* miniProgram={
* "path": "pages/pre_pay/index/main",
* "extraData": {
* "prePayType": "16",
* "channel": "30166",
* "isShowDetail": "true",
* "partnerId": "",
* "orderId": "e9e0d5db057f412fa323995fc292f6f7"}
* },
* city=北京市,
* parkName=开发停车场25,
* address=财智大厦23楼,
* carNum=京YTJD01,
* wLat=39.93609,
* payUrl=https://prep.tingjiandan.com/tcweixin/letter/prePay/pagePayInPark?prePayType=16&channel=30166&isShowDetail=true&partnerId=&orderId=e9e0d5db057f412fa323995fc292f6f7&returnUrl=,
* district=海淀区,
* lat=39.942078,
* inDt=20190920070500
* }
*/
@RequestMapping(value = "/tjdParkInCallback")
public Map tjdParkInCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdParkInCallback: " + paramMap.toString());
Map map = new HashMap();
Date currentDate = new Date();

String parkId = paramMap.get(TJDUtil.TJD_PARK_ID);
String parkName = paramMap.get(TJDUtil.TJD_PARK_NAME);
String carNumber = paramMap.get(TJDUtil.TJD_CAR_NUMBER);
String tradeId = paramMap.get(TJDUtil.TJD_TRADE_ID);
String inDt = paramMap.get(TJDUtil.TJD_IN_DT);

String tjdParkId = paramMap.get("parkId");
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_TJD.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_TJD_CALLBACK_PARK_IN.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);

String tenantId = null;
WxPark parkQ = new WxPark();
parkQ.setVendorType(EnumCarVendor.CAR_TJD.getCode());
parkQ.setParkId(tjdParkId);
parkQ.setParkId(parkId);
WxPark park = wxParkService.getByObj(parkQ);
if (park == null) {
logger.error("tjdParkInCallback: 停简单车场未找到" + tjdParkId);
map.put("isSuccess", "0");
map.put("errorMsg", "停简单车场未找到" + tjdParkId);
logger.error("tjdParkInCallback: 车场未找到" + parkId);
map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_ERR_1);
map.put(TJDUtil.TJD_ERR_MSG, "车场未找到" + parkId);
return map;
} else {
tenantId = park.getTenantId();
wxCarCmdLog.setTenantId(park.getTenantId());
}

Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setTenantId(park.getTenantId());
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_TJD.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_TJD_CALLBACK_PARK_IN.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);
try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdParkInCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_ERR_2);
map.put(TJDUtil.TJD_ERR_MSG, "入库错误" + paramMap.toString());
return map;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
// 停车发券
String phoneStrs = "";
if (StringUtils.isNotBlank(carNumber)) {
// 根据车牌查找用户
WxCUserCar userCarQ = new WxCUserCar();
userCarQ.setTenantId(tenantId);
userCarQ.setCarNumber(carNumber);
userCarQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
// TODO 可能多用户关联同一张车牌
List<WxCUserCar> userCarList = wxCUserCarService.getList(userCarQ);
boolean bFirst = true;
for (WxCUserCar userCar : userCarList) {
wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.CAR_STOP, userCar);
WxCUser cUser = wxCUserService.getById(userCar.getCUserId());
if(cUser != null){
if(bFirst) {
phoneStrs = cUser.getPhone();
bFirst = false;
} else {
phoneStrs += "," + cUser.getPhone();
}
}
}
}

try {
// 保存WxCarPayRecord
WxCarPayRecord record = new WxCarPayRecord();
record.setTenantId(tenantId);
record.setVendorType(wxCarCmdLog.getVendorType());
record.setSynId(tradeId);
record.setParkId(parkId);
record.setParkName(parkName);
record.setPlateNumber(carNumber);
if(StringUtils.isNotBlank(inDt)) {
record.setEntranceTime(TJDUtil.dateOutFormat.parse(inDt));
}
record.setPhone(phoneStrs);
WxCarPayRecord query = new WxCarPayRecord();
query.setTenantId(tenantId);
query.setParkId(parkId);
query.setSynId(tradeId);
PageInfo<WxCarPayRecord> page = wxCarPayRecordService.findCarPayListByPage(query,1,1);
if(page != null && CollectionUtils.isNotEmpty(page.getList())){
record.setId(page.getList().get(0).getId());
}
wxCarPayRecordService.saveOrUpdate(record);
} catch (Exception e) {
logger.error("WxCarPayRecord: 入库错误 "+e.getMessage()+"," + paramMap.toString());
}

map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_SUC);
return map;
}

@@ -174,13 +226,18 @@ public class WxCarTJDCallBackController extends BaseController {
* "wLat": "35.430735"
* }
*/
@RequestMapping(value = "/tjdParkoutCallback")
@RequestMapping(value = "/tjdParkOutCallback")
public Map tjdParkOutCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdParkoutCallback: " + paramMap.toString());
logger.info("["+getIpAddr()+"tjdParkOutCallback: " + paramMap.toString());
Map map = new HashMap();


String tradeId = paramMap.get("tradeId");
String parkId = paramMap.get(TJDUtil.TJD_PARK_ID);
String parkName = paramMap.get(TJDUtil.TJD_PARK_NAME);
String carNumber = paramMap.get(TJDUtil.TJD_CAR_NUMBER);
String tradeId = paramMap.get(TJDUtil.TJD_TRADE_ID);
String inDt = paramMap.get(TJDUtil.TJD_IN_DT);
String outDt = paramMap.get(TJDUtil.TJD_OUT_DT);
String stopFee = paramMap.get(TJDUtil.TJD_PARK_AMT);

Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
@@ -189,17 +246,65 @@ public class WxCarTJDCallBackController extends BaseController {
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);

String tenantId = null;
WxPark parkQ = new WxPark();
parkQ.setVendorType(EnumCarVendor.CAR_TJD.getCode());
parkQ.setParkId(parkId);
WxPark park = wxParkService.getByObj(parkQ);
if (park == null) {
logger.error("tjdParkOutCallback: 车场未找到" + parkId);
map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_ERR_1);
map.put(TJDUtil.TJD_ERR_MSG, "车场未找到" + parkId);
return map;
} else {
tenantId = park.getTenantId();
wxCarCmdLog.setTenantId(tenantId);
}

try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdParkoutCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
logger.error("tjdParkOutCallback: 入库错误" + paramMap.toString());
map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_ERR_2);
map.put(TJDUtil.TJD_ERR_MSG, "入库错误" + paramMap.toString());
return map;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
try {
// 保存WxCarPayRecord
WxCarPayRecord record = new WxCarPayRecord();
record.setTenantId(tenantId);
record.setVendorType(wxCarCmdLog.getVendorType());
record.setParkId(parkId);
record.setParkName(parkName);
record.setPlateNumber(carNumber);
record.setSynId(tradeId);
if(StringUtils.isNotBlank(inDt)) {
record.setEntranceTime(TJDUtil.dateOutFormat.parse(inDt));
}
if(StringUtils.isNotBlank(outDt)) {
record.setExitTime(TJDUtil.dateOutFormat.parse(outDt));
Long stayedTime = (record.getExitTime().getTime() - record.getEntranceTime().getTime())/ 1000;
record.setStayedTime(stayedTime);
}
if (StringUtils.isNotBlank(stopFee)) {
record.setFee(stopFee);
}
WxCarPayRecord query = new WxCarPayRecord();
query.setTenantId(tenantId);
query.setParkId(parkId);
query.setSynId(tradeId);
PageInfo<WxCarPayRecord> page = wxCarPayRecordService.findCarPayListByPage(query,1,1);
if(page != null && CollectionUtils.isNotEmpty(page.getList())){
record.setId(page.getList().get(0).getId());
}
wxCarPayRecordService.saveOrUpdate(record);
} catch (Exception e) {
logger.error("WxCarPayRecord: 出场更新错误 " +e.getMessage()+", " +paramMap.toString());
}

map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_SUC);
return map;
}

@@ -222,29 +327,94 @@ public class WxCarTJDCallBackController extends BaseController {
@RequestMapping(value = "/tjdPaidCallback")
public Map tjdPaidCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdPaidCallback: " + paramMap.toString());
Date currentDate = new Date();
Map map = new HashMap();

String parkId = paramMap.get(TJDUtil.TJD_PARK_ID);
String parkName = paramMap.get(TJDUtil.TJD_PARK_NAME);
String carNumber = paramMap.get(TJDUtil.TJD_CAR_NUMBER);
String tradeId = paramMap.get(TJDUtil.TJD_TRADE_ID);
String stopFee = paramMap.get(TJDUtil.TJD_PAY_AMT);
String stopFeeTime = paramMap.get(TJDUtil.TJD_PAY_DT);

String tradeId = paramMap.get("tradeId");

Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_TJD_CALLBACK_PAID.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);

String tenantId = null;
WxPark parkQ = new WxPark();
parkQ.setVendorType(EnumCarVendor.CAR_TJD.getCode());
parkQ.setParkId(parkId);
WxPark park = wxParkService.getByObj(parkQ);
if (park == null) {
logger.error("tjdPaidCallback: 车场未找到" + parkId);
map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_ERR_1);
map.put(TJDUtil.TJD_ERR_MSG, "车场未找到" + parkId);
return map;
} else {
tenantId = park.getTenantId();
wxCarCmdLog.setTenantId(tenantId);
}

try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdParkoutCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
logger.error("tjdPaidCallback: 入库错误" + paramMap.toString());
map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_ERR_2);
map.put(TJDUtil.TJD_ERR_MSG, "入库错误" + paramMap.toString());
return map;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
try {
// 保存WxCarPayRecord
WxCarPayRecord record = new WxCarPayRecord();
record.setTenantId(tenantId);
record.setVendorType(wxCarCmdLog.getVendorType());
record.setParkId(parkId);
record.setParkName(parkName);
record.setPlateNumber(carNumber);
record.setSynId(tradeId);
record.setFee(stopFee);
if (StringUtils.isNotBlank(stopFeeTime)) {
record.setFeeTime(TJDUtil.dateOutFormat.parse(stopFeeTime));
}

WxCarPayRecord query = new WxCarPayRecord();
record.setTenantId(tenantId);
record.setParkId(parkId);
record.setPlateNumber(carNumber);
query.setSynId(tradeId);
PageInfo<WxCarPayRecord> page = wxCarPayRecordService.findCarPayListByPage(query,1,2);
if(page != null && page.getList().size() > 0){

if(page.getList().size() >= 2){
wxCarPayRecordService.saveOrUpdate(record);
} else {
WxCarPayRecord r = page.getList().get(0);
if(r.getFeeTime() == null) {
// 无缴费信息, 更新
record.setId(r.getId());
wxCarPayRecordService.saveOrUpdate(record);
} else {
// 缴费时间在15分钟以内,更新之前的数据, ETCP会把之前的缴费自动退款
if(DateUtils.isInDate15Mins(record.getFeeTime(), r.getFeeTime())) {
record.setId(r.getId());
}
wxCarPayRecordService.saveOrUpdate(record);
}
}
} else {
wxCarPayRecordService.saveOrUpdate(record);
}
} catch (Exception e) {
logger.error("WxCarPayRecord: 缴费更新错误 " +e.getMessage()+", "+ paramMap.toString());
//return new Result(ErrorCode.DB_FAIL.getCode(), "入库错误" + paramMap.toString());
}

map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_SUC);
return map;
}

@@ -267,29 +437,45 @@ public class WxCarTJDCallBackController extends BaseController {
@RequestMapping(value = "/tjdRefundCallback")
public Map tjdRefundCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdRefundCallback: " + paramMap.toString());
Date currentDate = new Date();
Map map = new HashMap();

String tjdParkId = paramMap.get(TJDUtil.TJD_PARK_ID);
String carNumber = paramMap.get(TJDUtil.TJD_CAR_NUMBER);
String tradeId = paramMap.get(TJDUtil.TJD_TRADE_ID);

String tradeId = paramMap.get("tradeId");

Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_TJD_CALLBACK_REFUND.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);

String tenantId = null;
WxPark parkQ = new WxPark();
parkQ.setVendorType(EnumCarVendor.CAR_TJD.getCode());
parkQ.setParkId(tjdParkId);
WxPark park = wxParkService.getByObj(parkQ);
if (park == null) {
logger.error("tjdRefundCallback: 停简单车场未找到" + tjdParkId);
map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_ERR_1);
map.put(TJDUtil.TJD_ERR_MSG, "车场未找到" + tjdParkId);
return map;
} else {
tenantId = park.getTenantId();
wxCarCmdLog.setTenantId(tenantId);
}

try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdRefundCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_ERR_2);
map.put(TJDUtil.TJD_ERR_MSG, "入库错误" + paramMap.toString());
return map;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
map.put(TJDUtil.TJD_IS_SUC, TJDUtil.TJD_SUC);
return map;
}



+ 7
- 1
mallinkService/src/main/java/com/iformall/domain/po/WxCouponPassword.java View File

@@ -24,8 +24,10 @@ public class WxCouponPassword extends BaseEntity {
@Excel(name = "兑换码", width = 20, orderNum = "1")
@io.swagger.annotations.ApiModelProperty(value="商户名称",name="password")
private String password;
@io.swagger.annotations.ApiModelProperty(value="卡密状态: 0初始1信息发出中2信息已发出3已使用",name="status")
@Excel(name = "状态", width = 20, replace = {"初始_0", "发送中_1", "已发出_2", "已使用_3", "不可用_4"}, orderNum = "3")
@io.swagger.annotations.ApiModelProperty(value="卡密状态: 0初始1信息发出中2信息已发出3已使用4已过期",name="status")
private Integer status;
@Excel(name = "发送手机", width = 20, orderNum = "4")
@io.swagger.annotations.ApiModelProperty(value="卡密发送到手机",name="sendedPhone")
private String sendedPhone;
@io.swagger.annotations.ApiModelProperty(value="卡包ID(coupon_order_id/card_id)",name="cardId")
@@ -34,9 +36,13 @@ public class WxCouponPassword extends BaseEntity {
private Date createDate;
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate")
private Date updateDate;
@Excel(name="过期时间",width = 20,format="yyyy-MM-dd", orderNum = "2")
@io.swagger.annotations.ApiModelProperty(value="过期时间",name="expireDate")
private Date expireDate;

@io.swagger.annotations.ApiModelProperty(value = "发放ID", name = "presentId")
private Long presentId;

@TableField(exist = false)
private String statusStr;



+ 2
- 0
mallinkService/src/main/java/com/iformall/domain/vo/WxCouponPasswordCountInfoVO.java View File

@@ -11,4 +11,6 @@ public class WxCouponPasswordCountInfoVO {
private Long couponId;
private String couponName;
private Long couponCount;
private String price;

}

+ 0
- 4
mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java View File

@@ -30,8 +30,4 @@ public interface WxCreditHistoryMapper extends CommonMapper<WxCreditHistory, Lon
long getDecrementCreditAmount(WxCreditHistory wxCreditHistory);

long getPeopleCount(WxCreditHistory wxCreditHistory);

List<WxCreditHistory> findListAfter(Integer creditType, String dateTime);

List<WxCreditHistory> findListByIds(@Param("userIds") List<Long> userIds);
}

+ 2
- 4
mallinkService/src/main/java/com/iformall/service/WxCouponPasswordService.java View File

@@ -6,7 +6,6 @@ import com.iformall.domain.vo.WxCouponPasswordCountInfoVO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface WxCouponPasswordService {

@@ -58,9 +57,6 @@ public interface WxCouponPasswordService {
*/
void mkPasswords(String tenantId, Long couponId, Integer inventory);


List<WxCouponPasswordCountInfoVO> findCouponList(String tenantId);

/**
* 导出兑换码
* @param request
@@ -69,4 +65,6 @@ public interface WxCouponPasswordService {
*/
void exportData(HttpServletRequest request, HttpServletResponse response, WxCouponPassword couponPassword);

PageInfo<WxCouponPasswordCountInfoVO> findCouponList(WxCouponPassword wxCouponPassword, Integer pageNum, Integer pageSize);

}

+ 7
- 7
mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java View File

@@ -11,6 +11,7 @@ import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxCouponPasswordMapper;
import com.iformall.service.ExcelService;
import com.iformall.service.WxCouponPasswordService;
import com.iformall.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -91,13 +92,6 @@ public class WxCouponPasswordServiceImpl implements WxCouponPasswordService {
wxCouponPasswordMapper.deleteById(id);
}

@Override
public List<WxCouponPasswordCountInfoVO> findCouponList(String tenantId) {
WxCouponPassword wxCouponPassword = new WxCouponPassword();
wxCouponPassword.setTenantId(tenantId);
return wxCouponPasswordMapper.findCouponCountInfo(wxCouponPassword);
}

@Override
public void mkPasswords(String tenantId, Long couponId, Integer inventory) {
String strAll = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
@@ -146,6 +140,7 @@ public class WxCouponPasswordServiceImpl implements WxCouponPasswordService {
newOne.setStatus(EnumCouponPasswordStatus.INIT.getCode());
newOne.setCreateDate(curDate);
newOne.setUpdateDate(curDate);
newOne.setExpireDate(DateUtils.getTimeAfterDays(30, curDate));
couponPasswords.add(newOne);
}
wxCouponPasswordMapper.insertCouponPasswds(couponPasswords);
@@ -161,6 +156,11 @@ public class WxCouponPasswordServiceImpl implements WxCouponPasswordService {

}

@Override
public PageInfo<WxCouponPasswordCountInfoVO> findCouponList(WxCouponPassword record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponPasswordMapper.findCouponCountInfo(record));
}

/*
public static void main(String[] args) {
WxCouponPasswordServiceImpl ll = new WxCouponPasswordServiceImpl();


+ 9
- 6
mallinkService/src/main/java/com/iformall/service/impl/WxCouponPresentServiceImpl.java View File

@@ -101,13 +101,14 @@ public class WxCouponPresentServiceImpl implements WxCouponPresentService {
}
//添加记录
final IdWorker idWorker = IdWorker.get();
record.setId(idWorker.nextId());
long id = idWorker.nextId();
record.setId(id);
record.setCouponName(wxCoupon.getTitle());
record.setSendAmount(phoneSet.size());
wxCouponPresentMapper.insert(record);
//小程序
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(tenantId);
String priceStr = wxCoupon.getPriceStr();
String title = wxCoupon.getTitle();
String name = appInfo.getName();
List<WxCouponPassword> tempList = wxCouponPasswordMapper.findList(wxCouponPassword);
//循环发送
@@ -115,8 +116,9 @@ public class WxCouponPresentServiceImpl implements WxCouponPresentService {
for (String phone : phoneSet) {
WxCouponPassword couponPassword = list.get(i);
//发送
sendMsg(tenantId, phone, priceStr, name, couponPassword.getPassword());
sendMsg(tenantId, phone, title, name, couponPassword.getPassword(), couponPassword.getId().toString());
//记录发送数据便于更新状态
couponPassword.setPresentId(id);
couponPassword.setSendedPhone(phone);
tempList.add(couponPassword);
i++;
@@ -126,14 +128,15 @@ public class WxCouponPresentServiceImpl implements WxCouponPresentService {
return new ResultData();
}

private void sendMsg(String tenantId, String phone, String money, String appName, String password) {
private void sendMsg(String tenantId, String phone, String title, String appName, String password, String id) {
logger.info("》》》》》》》》》》》");
logger.info("系统发卡发送短信开始");
logger.info("》》》》》》》》》》》");
Map<String, String> msgReplaceMap = new HashMap();
msgReplaceMap.put("id", id);
msgReplaceMap.put("app", appName);
msgReplaceMap.put("money", money);
msgReplaceMap.put("password", password);
msgReplaceMap.put("title", title);
msgReplaceMap.put("pw", password);
WxMsgRecord wxMsgRecord = new WxMsgRecord();
wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode());
wxMsgRecord.setModelType(EnumMsgModel.COUPON_CARD_SEND.getCode());


mallinkService/src/main/java/com/iformall/utils/car/TJDCarUtil.java → mallinkService/src/main/java/com/iformall/utils/car/TJDUtil.java View File

@@ -28,18 +28,53 @@ import java.util.Map;
* 停简单 停车管理
*/
@Component
public class TJDCarUtil {
public class TJDUtil {

private final static Logger logger = LoggerFactory.getLogger(TJDCarUtil.class);
public static final String TJD_URL = "url";
public static final String TJD_ACCOUNT = "partner";
public static final String TJD_ACCOUNT_KEY = "key";
public static final String TJD_VERSION = "version";

public static final String TJD_CHARSET = "charset";

public static final String TJD_RETURN_CODE = "returnCode";
public static final String TJD_RETURN_SUCC = "T";
public static final String TJD_RETURN_FAIL = "F";

public static final String TJD_IS_SUC = "isSuccess";
public static final String TJD_ERR_MSG = "errorMSG";
public static final String TJD_SUC = "0";
public static final String TJD_ERR_1 = "1"; // 业务级失败(不进行重发)
public static final String TJD_ERR_2 = "2"; // 系统级失败(有重发机制)
public static final String TJD_PARK_ID = "parkId";
public static final String TJD_PARK_NAME = "parkName";
public static final String TJD_CAR_NUMBER = "carNum";
public static final String TJD_TRADE_ID = "tradeId";
public static final String TJD_IN_DT = "inDt";
public static final String TJD_OUT_DT = "outDt";
public static final String TJD_PARK_AMT = "parkAmount";
public static final String TJD_PAY_AMT = "payAmount";
public static final String TJD_PAY_DT = "payDt";
public static final String TJD_FREE_MINS = "freeMins";

public static final SimpleDateFormat dateInFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static final SimpleDateFormat dateOutFormat = new SimpleDateFormat("yyyyMMddHHmmss");


private final static Logger logger = LoggerFactory.getLogger(TJDUtil.class);

private static String baseurl = "http://prep.tingjiandan.com/openapi/gateway";

private static String partner = "7dbc8ec9037d403b822cb60addfdc681";
private static String key = "f356cb1bf5a74fb7a564e86128d2c49f";
private static String partner = "fb21a5b2f7064ff5afb8288d5bb48ca8";
private static String key = "bc2f09be8f5b4227898346cf6fe451c2";
private static String version = "1.0";

//
// {"url":"http://prep.tingjiandan.com/openapi/gateway","partnerId":"fb21a5b2f7064ff5afb8288d5bb48ca8","key":"bc2f09be8f5b4227898346cf6fe451c2","parkId":"7715622dff834b34a44448b801c27607", "version":"1.0.0"}
//

public static void main(String[] args) throws Exception {
String carNumber = "京HLTT01";
String carNumber = "京XAZMF1";

String result = infoForFreeMins(baseurl, partner, key, version, carNumber);

@@ -51,9 +86,9 @@ public class TJDCarUtil {
paramMap1.put("deductionAmount", obj.getString("totalAmount"));
paramMap1.put("outTradeNo", "utf-8");
paramMap1.put("accountId", obj.getString("accountId"));
paramMap1.put("charset", "utf-8");
paramMap1.put("partner", partner);
paramMap1.put("version", version);
paramMap1.put(TJD_CHARSET, "utf-8");
paramMap1.put(TJD_ACCOUNT, partner);
paramMap1.put(TJD_VERSION, version);

deductionNotSettle(baseurl, key, paramMap1);
*/
@@ -85,8 +120,7 @@ public class TJDCarUtil {
*/
public static String getCurrentDate() {
Date currentDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timestamp = sdf.format(currentDate);
String timestamp = dateInFormat.format(currentDate);
return timestamp;
}

@@ -135,7 +169,7 @@ public class TJDCarUtil {
String service = "parkhub.car.register";

Map<String, String> paramMap = MapUtil.getOrderMap();
paramMap.put("carNum", carNum);
paramMap.put(TJD_CAR_NUMBER, carNum);
paramMap.put("carNumColor", carNumColor);
if (phone != null) {
paramMap.put("phone", phone);
@@ -143,9 +177,9 @@ public class TJDCarUtil {
if (outCarId != null) {
paramMap.put("outCardId", outCarId);
}
paramMap.put("charset", "utf-8");
paramMap.put("partner", partner);
paramMap.put("version", version);
paramMap.put(TJD_CHARSET, "utf-8");
paramMap.put(TJD_ACCOUNT, partner);
paramMap.put(TJD_VERSION, version);

String result = Proc(url, key, service, paramMap);

@@ -186,9 +220,9 @@ public class TJDCarUtil {

Map<String, String> paramMap = MapUtil.getOrderMap();
paramMap.put("carId", carId);
paramMap.put("charset", "utf-8");
paramMap.put("partner", partner);
paramMap.put("version", version);
paramMap.put(TJD_CHARSET, "utf-8");
paramMap.put(TJD_ACCOUNT, partner);
paramMap.put(TJD_VERSION, version);

String result = Proc(url, key, service, paramMap);

@@ -228,42 +262,32 @@ public class TJDCarUtil {
String freeMins = "0";

Map<String, String> paramMap = MapUtil.getOrderMap();
paramMap.put("carNum", carNum);
paramMap.put(TJD_CAR_NUMBER, carNum);
//paramMap.put("carNumColor", "");
//paramMap.put("pmParkId", "");
paramMap.put("freeMins", freeMins);
paramMap.put(TJD_FREE_MINS, freeMins);
//paramMap.put("tradeId", "");
paramMap.put("charset", "utf-8");
paramMap.put("partner", partner);
paramMap.put("version", version);
paramMap.put(TJD_CHARSET, "utf-8");
paramMap.put(TJD_ACCOUNT, partner);
paramMap.put(TJD_VERSION, version);

String result = Proc(url, key, service, paramMap);

/*
"{
\"wLon\":\"116.310335\",
\"returnCode\":\"T\",
\"lon\":\"116.316819\",
\"accountId\":\"5b3c15e15235486eba9abae41ae3f820\",
\"freeThroughTime\":\"30\",
\"customerServicePhone\":\"400-001-0606\",
\"tradeId\":\"3a3475c501f8464cbb3ff1b6670690d6\",
\"returnMsg\":\"OK\",
\"outDt\":\"20180609164753\",
\"isSuccess\":\"0\",
\"pmParkId\":\"7715622dff834b34a44448b801c27607\",
\"unPayAmount\":\"12.00\",
\"timestamp\":\"1528534070691\",
\"errorMSG\":\"\",
\"parkTime\":\"107273\",
\"wLat\":\"39.93609\",
\"totalAmount\":\"12.00\",
\"paidAmount\":\"0.00\",
\"freeMinsAmount\":\"0\",
\"payUrl\":\"https://prep.tingjiandan.com/tcweixin/letter/prePay/payInPark.html?prePayType=16&channel=30040&isShowDetail=true&orderId=3a3475c501f8464cbb3ff1b6670690d6\",
\"lat\":\"39.942078\",
\"inDt\":\"20180608110000\"
}\n";
{
"wLon":"116.310335",
"returnCode":"T",
"lon":"116.316813",
"accountId":"818a6ac865e841119ec9aab21c5e5a24",
"freeThroughTime":"10",
"customerServicePhone":"400-001-0606",
"tradeId":"2ae003431584495081014428c90173ab",
"returnMsg":"OK",
"outDt":"20190920110443",
"isSuccess":"0",
"miniProgram":"{\"path\": \"pages/pre_pay/index/main\",\"extraData\": {\"prePayType\": \"16\",\"channel\": \"30166\",\"isShowDetail\": \"true\",\"partnerId\": \"956ca31ac8464cf7b6a876e8887912f3\",\"orderId\": \"2ae003431584495081014428c90173ab\"}}","pmParkId":"7715622dff834b34a44448b801c27607","unPayAmount":"88.12","timestamp":"1568948681580","errorMSG":"","parkTime":"81629","wLat":"39.93609","totalAmount":"88.12","paidAmount":"0.00","freeMinsAmount":"0.00","payUrl":"https://prep.tingjiandan.com/tcweixin/letter/prePay/pagePayInPark?prePayType=16&channel=30166&isShowDetail=true&partnerId=&orderId=2ae003431584495081014428c90173ab&returnUrl=",
"lat":"39.942078",
"inDt":"20190919122414"}
*/
return result;
}
@@ -304,13 +328,13 @@ public class TJDCarUtil {
// 为指定订单抵扣停车费,如果此时车辆已经出场,返回isSuccess错误码为3,停简单系统不再接收此笔抵扣信息,对方系统 需要给用户发起退款。
String service = "parkhub.order.deductionNotSettle";
Map<String, String> paramMap = MapUtil.getOrderMap();
paramMap.put("tradeId", tradeId);
paramMap.put(TJD_TRADE_ID, tradeId);
paramMap.put("deductionAmount", deductionAmount);
paramMap.put("outTradeNo", outTradeNo);
paramMap.put("accountId", accountId);
paramMap.put("charset", "utf-8");
paramMap.put("partner", partner);
paramMap.put("version", version);
paramMap.put(TJD_CHARSET, "utf-8");
paramMap.put(TJD_ACCOUNT, partner);
paramMap.put(TJD_VERSION, version);

String result = Proc(url, key, service, paramMap);
/*
@@ -356,9 +380,9 @@ public class TJDCarUtil {
paramMap.put("deductionAmount", deductionAmount);
paramMap.put("outTradeNo", outTradeNo);
paramMap.put("accountId", accountId);
paramMap.put("charset", "utf-8");
paramMap.put("partner", partner);
paramMap.put("version", version);
paramMap.put(TJD_CHARSET, "utf-8");
paramMap.put(TJD_ACCOUNT, partner);
paramMap.put(TJD_VERSION, version);

String result = Proc(url, key, service, paramMap);
/*
@@ -407,9 +431,9 @@ public class TJDCarUtil {
paramMap.put("prePayType", prePayType);
paramMap.put("minutes", minutes);
paramMap.put("memo", memo);
paramMap.put("charset", "utf-8");
paramMap.put("partner", partner);
paramMap.put("version", version);
paramMap.put(TJD_CHARSET, "utf-8");
paramMap.put(TJD_ACCOUNT, partner);
paramMap.put(TJD_VERSION, version);

String result = Proc(url, key, service, paramMap);
/*{
@@ -463,9 +487,9 @@ public class TJDCarUtil {
paramMap.put("EndDt", EndDt);
paramMap.put("expireDt", expireDt);
paramMap.put("memo", memo);
paramMap.put("charset", "utf-8");
paramMap.put("partner", partner);
paramMap.put("version", version);
paramMap.put(TJD_CHARSET, "utf-8");
paramMap.put(TJD_ACCOUNT, partner);
paramMap.put(TJD_VERSION, version);

String result = Proc(url, key, service, paramMap);
/*{
@@ -506,9 +530,9 @@ public class TJDCarUtil {
Map<String, String> paramMap = MapUtil.getOrderMap();
paramMap.put("tradeId", tradeId);
paramMap.put("ticketid", ticketid);
paramMap.put("charset", "utf-8");
paramMap.put("partner", partner);
paramMap.put("version", version);
paramMap.put(TJD_CHARSET, "utf-8");
paramMap.put(TJD_ACCOUNT, partner);
paramMap.put(TJD_VERSION, version);

String result = Proc(url, key, service, paramMap);
/*{

+ 18
- 6
mallinkService/src/main/resources/mapper/WxCouponPasswordMapper.xml View File

@@ -13,10 +13,12 @@
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
<result column="expire_date" jdbcType="TIMESTAMP" property="expireDate" />
<result column="present_id" jdbcType="TIMESTAMP" property="presentId"/>
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`coupon_id`,`coupon_short`,`password`,`status`,`sended_phone`,`card_id`,`create_date`,`update_date`,`expire_date`
`id`,`tenant_id`,`coupon_id`,`coupon_short`,`password`,`status`,`sended_phone`,`card_id`,`create_date`,`update_date`,`expire_date`,`present_id`
</sql>

<sql id="dynamicWhereConditions">
@@ -54,6 +56,11 @@
<if test=" null != expireDate ">
and `expire_date` > #{expireDate}
</if>
<if test=" null != presentId ">
and `present_id` = #{presentId}
</if>
<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
@@ -77,7 +84,7 @@
<select id="findAvaPasswordListByCouponId" parameterType="com.iformall.domain.po.WxCouponPassword" resultMap="BaseResultMap">
select <include refid="allColumns" />
from wx_coupon_password
<where> `status` not in (3,4)
<where>
<if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
</if>
@@ -119,24 +126,29 @@
<result column="coupon_count" jdbcType="BIGINT" property="couponCount"/>
<result column="title" jdbcType="VARCHAR" property="couponName"/>
<result column="coupon_id" jdbcType="BIGINT" property="couponId"/>
<result column="price" jdbcType="VARCHAR" property="price"/>
</resultMap>
<select id="findCouponCountInfo" parameterType="com.iformall.domain.po.WxCouponPassword"
resultMap="CouponCountInfoMap">
select cp.coupon_id,c.title,cp.coupon_count from
select cp.coupon_id,c.title,c.price,cp.coupon_count from
(select count(*) as coupon_count,coupon_id from wx_coupon_password
where tenant_id#{tenantId} and status=0) cp
where tenant_id=#{tenantId} and status=0 group by coupon_id) cp
inner join wx_coupon c on cp.coupon_id = c.id
where c.tenant_id=#{tenantId} and c.status=1
where c.tenant_id=#{tenantId} and c.status=0
<if test=" null != couponId ">
and cp.`coupon_id` = #{couponId}
</if>
group by cp.coupon_id
order by c.create_date desc
</select>
<update id="updateStatus" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update wx_coupon_password set status=1,send_phone=#{sendPhone},update_date=now() where id = ${item.id}
update wx_coupon_password set
status=1,sended_phone=#{item.sendedPhone},update_date=now(),expire_date=date_add(now(),interval 30 DAY),
present_id=#{item.presentId}
where id = #{item.id}
</foreach>
</update>



+ 2
- 2
mallinkService/src/main/resources/mapper/WxCouponPresentMapper.xml View File

@@ -34,10 +34,10 @@
and `phones` like concat('%', #{phones},'%')
</if>
<if test=" null != sendTimeStart and null!=sendTimeEnd ">
and `create_date` between #{sendTimeStart} and #{sendTimeEnd}
and `create_time` between #{sendTimeStart} and #{sendTimeEnd}
</if>
<if test=" null != updateTime ">
and `update_date` = #{updateTime}
and `update_time` = #{updateTime}
</if>
<if test=" null != ids ">
and id in


+ 1
- 17
mallinkService/src/main/resources/mapper/WxCreditHistoryMapper.xml View File

@@ -210,10 +210,7 @@
<select id="getTotalCreditAmount" parameterType="com.iformall.domain.po.WxCreditHistory"
resultType="java.lang.Long">
select ifnull(sum(credit.amount),0) amount from (
select credit.credit_amount as amount,credit.c_user_id from wx_credit_history credit
INNER join (select max(create_date) create_date,credit.c_user_id
from wx_credit_history credit group by credit.c_user_id) credit_max_id
on credit.create_date=credit_max_id.create_date and credit.c_user_id=credit_max_id.c_user_id
select basic.credit as amount,credit.c_user_id from wx_credit_history credit
INNER JOIN wx_c_user_basic_info basic ON basic.id = credit.c_user_id
LEFT JOIN wx_merchant merchant ON credit.merchant_id = merchant.id
<include refid="customWhereConditions"/>
@@ -249,17 +246,4 @@
) credit
</select>

<select id="findListAfter" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_credit_history where create_date > #{dateTime} and credit_type = #{creditType}
</select>

<select id="findListByIds" parameterType="java.util.List" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_credit_history
where c_user_id in
<foreach collection="userIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
order by create_date desc
</select>

</mapper>

+ 3
- 2
mallinkService/src/main/resources/mapper/WxMsgCallbackMapper.xml View File

@@ -15,11 +15,12 @@
<result column="updatetime" jdbcType="TIMESTAMP" property="updatetime" />
<result column="callback_id" jdbcType="BIGINT" property="callbackId" />
<result column="msg_id" jdbcType="BIGINT" property="msgId" />
<result column="business_id" jdbcType="BIGINT" property="businessId"/>
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`batch_no`,`phone`,`begintime`,`endtime`,`status`,`status_msg`,`sign`,`createtime`,`updatetime`,`msg_id`,`callback_id`
`id`,`tenant_id`,`batch_no`,`phone`,`begintime`,`endtime`,`status`,`status_msg`,`sign`,`createtime`,`updatetime`,`msg_id`,`callback_id`,`business_id`
</sql>

<sql id="dynamicWhereConditions">


+ 24
- 154
mallinkSysAdmin/src/main/java/com/iformall/controller/sys/DataInitController.java View File

@@ -1,8 +1,6 @@
package com.iformall.controller.sys;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.base.Function;
import com.google.common.collect.*;
import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.common.ResultData;
@@ -11,22 +9,18 @@ import com.iformall.domain.po.*;
import com.iformall.enums.EnumMsgModel;
import com.iformall.enums.EnumScoreType;
import com.iformall.enums.EnumUserType;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.*;
import com.iformall.service.WxCreditHistoryService;
import com.iformall.utils.DateUtils;
import io.swagger.annotations.ApiImplicitParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

/**
@@ -41,8 +35,6 @@ public class DataInitController extends BaseController {
@Resource
private WxMallMapper mallMapper;
@Resource
private WxMsgSignatureMapper signatureMapper;
@Resource
private WxMsgValidationcodeModelMapper modelMapper;
@Resource
private WxCreditHistoryMapper creditHistoryMapper;
@@ -63,9 +55,23 @@ public class DataInitController extends BaseController {
@Resource
private WxMerchantBUserMapper merchantBUserMapper;

@Resource
private WxMerchantMapper wxMerchantMapper;

@PostMapping("/createMsgModel")
@ApiImplicitParam(name = "content", value = "content", dataType = "Long", paramType = "query", required = true)
public ResultData createMsgModel(String content) {
try {
MallUserInfo userInfo = getUser();
if (userInfo.isFmSuperAdmin()) {
addMsgModel(content);
return new ResultData();
}
} catch (Exception e) {
log.error("DataInitController::createMsgModel error ", e);
return new ResultData(ErrorCode.MSG_METHOD_REQUEST_ERROR, e.getMessage());
}

return new ResultData();
}

@GetMapping("/init")
public ResultData init() {
@@ -84,49 +90,6 @@ public class DataInitController extends BaseController {
return new ResultData();
}

/**
* 积分数据修复
*
* @return
*/
@GetMapping("/fixCredit")
public ResultData fixCredit() {
try {
MallUserInfo userInfo = getUser();
if(userInfo.isFmSuperAdmin()) {
doFixCredit();
return new ResultData();
}
} catch (Exception e) {
log.error("DataInitController::fixCredit error ", e);
return new ResultData(ErrorCode.MSG_METHOD_REQUEST_ERROR, e.getMessage());
}

return new ResultData();
}


/**
* 修复wx_c_user_basic_info积分数据
*
* @return
*/
@GetMapping("/fixCredit4CUserBasic")
public ResultData fixCredit4CUserBasic() {
try {
MallUserInfo userInfo = getUser();
if (userInfo.isFmSuperAdmin()) {
doFixCredit4CUserBasic();
return new ResultData();
}
} catch (Exception e) {
log.error("DataInitController::fixCredit4CUserBasic error ", e);
return new ResultData(ErrorCode.MSG_METHOD_REQUEST_ERROR, e.getMessage());
}

return new ResultData();
}

/**
* 核销积分数据修复
*
@@ -148,105 +111,6 @@ public class DataInitController extends BaseController {
return new ResultData();
}

@Transactional(rollbackFor = Exception.class)
public void doFixCredit4CUserBasic() {
log.debug("cUserBasic积分更新, begin --------------》");
// 1 查找c_user_basic中c_user不存在且积分为null的用户用户
List<WxCUserBasicInfo> userBasicInfoList = cUserBasicInfoMapper.selectNotCUserList();
List<Long> ids = userBasicInfoList.stream().map(WxCUserBasicInfo::getId).collect(Collectors.toList());
//log.debug("ids {}", JSON.toJSONString(ids));

// 2 获取对应用户的积分记录
List<WxCreditHistory> creditList = creditHistoryMapper.findListByIds(ids);
ImmutableListMultimap<Long, WxCreditHistory> userCreditHistory = Multimaps.index(creditList, new Function<WxCreditHistory, Long>() {
@Nullable
@Override
public Long apply(@Nullable WxCreditHistory input) {
return input.getCUserId();
}
});

//3 将历史记录最好积分重设积分
AtomicInteger count = new AtomicInteger(0);
userBasicInfoList.forEach(wxCUserBasicInfo -> {
ImmutableList<WxCreditHistory> historyList = userCreditHistory.get(wxCUserBasicInfo.getId());
WxCUserBasicInfo toUpdateUser = new WxCUserBasicInfo();
toUpdateUser.setId(wxCUserBasicInfo.getId());
//用户积分不存在,跳过
if (CollectionUtils.isEmpty(historyList)) {
//log.debug("cUserBasic积分更新,id: {} 积分记录不存在", wxCUserBasicInfo.getId());
return;
}
//积分记录存在,使用最新的总积分重新赋值
WxCreditHistory wxCreditHistory = historyList.get(0);
toUpdateUser.setCredit(wxCreditHistory.getCreditAmount());
cUserBasicInfoMapper.updateById(toUpdateUser);
log.debug("cUserBasic积分更新,id: {},原积分: {},新积分: {}, 积分时间: {}", wxCUserBasicInfo.getId(), wxCUserBasicInfo.getCredit(), toUpdateUser.getCredit(), DateUtils.format(wxCreditHistory.getCreateDate()));
count.getAndIncrement();
});

log.debug("cUserBasic积分更新,更新用户 {}", count.intValue());
log.debug("cUserBasic积分更新, end --------------》");
}

@Transactional(rollbackFor = Exception.class)
public void doFixCredit() {
// 1 获取积分记录
List<WxCreditHistory> creditList = creditHistoryMapper.findListAfter(10, "2019-09-16 22:00:00");
// 2 重新计算积分,比较是否需要修复
creditList.forEach(wxCreditHistory -> {
WxCUser cUser = cUserMapper.selectById(wxCreditHistory.getCUserId());
WxCUserBasicInfo userBasicInfo = cUserBasicInfoMapper.selectById(wxCreditHistory.getCUserId());
//排查不存在的用户
if (Objects.isNull(cUser) && Objects.isNull(userBasicInfo)) {
log.debug("用户不存在 id: {}", wxCreditHistory.getId());
return;
}

WxMerchant wxMerchant = new WxMerchant();
wxMerchant.setStatus(1);
wxMerchant.setId(wxCreditHistory.getMerchantId());
List<WxMerchant> wxMerchantList = wxMerchantMapper.findList(wxMerchant);
if (wxMerchantList == null || wxMerchantList.size() == 0) {
log.debug(ErrorCode.MERCHANT_INFO_NOT_FOUND.getMessage());
return;
}
//根据商户id和花费金额计算需要新增的积分
Map<String, Integer> result = creditHistoryService.findByMerchantIdAndSpend(wxCreditHistory.getMerchantId(), String.valueOf(new BigDecimal(wxCreditHistory.getSpend()/100)), wxCreditHistory.getCUserId(),wxCreditHistory.getTenantId());

//Map<String, Integer> result = creditHistoryService.findByMerchantIdAndSpend(wxCreditHistory.getMerchantId(), String.valueOf(wxCreditHistory.getSpend()), wxCreditHistory.getCUserId(), wxCreditHistory.getTenantId());
Integer creditDB = wxCreditHistory.getCreditNum();
Integer credit = result.get("credit");
if (Objects.equals(credit, creditDB)) {
log.debug("本次积分计算:正确, id: {},原积分: {},重新计算积分: {}, 积分时间: {}", wxCreditHistory.getId(), creditDB, credit, DateUtils.format(wxCreditHistory.getCreateDate()));
} else {
log.debug("本次积分计算:错误, id: {},原积分: {},重新计算积分: {}, 积分时间: {}", wxCreditHistory.getId(), creditDB, credit, DateUtils.format(wxCreditHistory.getCreateDate()));
// 3 重新计算积分
//用户新积分
Integer newCredit = wxCreditHistory.getCreditAmount() - creditDB + credit;

// 4 更新积分
WxCUser toUpdateCUser = new WxCUser();
toUpdateCUser.setId(wxCreditHistory.getCUserId());
toUpdateCUser.setCredit(newCredit);
toUpdateCUser.setUpdateDate(new Date());
cUserMapper.updateById(toUpdateCUser);

WxCUserBasicInfo toUpdateBasicInfo = new WxCUserBasicInfo();
toUpdateBasicInfo.setId(wxCreditHistory.getCUserId());
toUpdateBasicInfo.setCredit(newCredit);
toUpdateBasicInfo.setUpdateDate(new Date());
cUserBasicInfoMapper.updateById(toUpdateBasicInfo);

WxCreditHistory toUpdateCreditHistory = new WxCreditHistory();
toUpdateCreditHistory.setId(wxCreditHistory.getId());
toUpdateCreditHistory.setCreditNum(credit);
toUpdateCreditHistory.setCreditAmount(newCredit);
creditHistoryMapper.updateById(toUpdateCreditHistory);
}
});
}

@Transactional(rollbackFor = Exception.class)
public void doFixVerifyCredit() {
// 1 获取券码
@@ -298,6 +162,12 @@ public class DataInitController extends BaseController {
});
}

@Transactional(rollbackFor = Exception.class)
public void addMsgModel(String context) {
IdWorker idWorker = IdWorker.get();
addBirthDayMsgModelToMall(EnumMsgModel.COUPON_BIRTHDAY_OPENED, idWorker, context);
}

/**
* 增加会员生日短信模板
*/


Loading…
Cancel
Save