记得上下班打卡 | git大法好,push需谨慎

Commit 9ed12908 authored by jiangxiulong's avatar jiangxiulong

Merge branch 'jxl_1115_refund' into dev_freight

# Conflicts:
#	liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/constant/KylinRedisConst.java
#	liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/kylin/utils/DataUtils.java
parents d81fbc12 85ab2117
......@@ -10,9 +10,12 @@ create table stone_score_logs
overdue_at datetime comment '过期时间',
created_at datetime ,
updated_at datetime ,
comment text
comment text,
KEY `stone_score_logs_uid_index` (`uid`),
KEY `stone_score_logs_logsId_index` (`logs_id`)
) engine = InnoDB comment '积分日志表';
drop table if exists stone_score_items;
create table stone_score_items
(
......@@ -34,7 +37,10 @@ create table stone_score_items
end_time datetime NULL COMMENT '定时下架-时间',
created_at datetime ,
updated_at datetime ,
comment text
comment text,
KEY `stone_score_items_item_id_index` (`item_id`),
KEY `stone_score_items_target_id_index` (`target_id`),
KEY `stone_score_items_status_index` (`status`)
) engine = InnoDB comment '积分物品表';
drop table if exists stone_score_user;
......@@ -46,7 +52,8 @@ create table stone_score_user
status int default 1 comment '状态[1-正常|2-冻结]',
created_at datetime ,
updated_at datetime ,
comment text
comment text,
KEY `stone_score_user_uid_index` (`uid`)
) engine = InnoDB comment '积分用户表';
drop table if exists stone_score_order;
......@@ -74,7 +81,9 @@ create table stone_score_order
pay_status tinyint NOT NULL DEFAULT 0 COMMENT '支付状态[0-未支付|1-已支付|2-支付失败]',
created_at datetime ,
updated_at datetime ,
comment text
comment text,
KEY `stone_score_order_uid_index` (`uid`),
KEY `stone_score_order_status_index` (`status`),
) engine = InnoDB comment '积分订单表';
......
......@@ -39,9 +39,9 @@ public class ChimeUserInfoVo {
@ApiModelProperty(position = 11, value = "不喜欢操作")
private long disLikeCount;
@ApiModelProperty(position = 10, value = "点击喜欢操作")
private long ClickLikeCount;
private long clickLikeCount;
@ApiModelProperty(position = 11, value = "点击不喜欢操作")
private long ClickDisLikeCount;
private long clickDisLikeCount;
private static final ChimeUserInfoVo obj = new ChimeUserInfoVo();
public static ChimeUserInfoVo getNew() {
......
......@@ -66,4 +66,6 @@ public class KylinRedisConst {
public static final String RETURN_ADDRESS_CODE = "kylin:address:code";//退货地址
public static final String EXPRESS_TYPE = "express:type";//退货地址
public static final String KYLIN_EXPRESS_MODULES = "kylin:express:modules";
}
package com.liquidnet.service.kylin.dto.param.admin;
import com.liquidnet.service.kylin.entity.KylinExpressModule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* <p>
* ExpressModuleFromParam
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
@Data
@ApiModel(value = "ExpressModuleFromParam", description = "快递模版创建、编辑入参")
public class ExpressModuleFromParam implements Serializable, Cloneable {
private static final long serialVersionUID = -5031042101093959654L;
@ApiModelProperty(value = "快递模版id[创建不传] 编辑必须要传", example = "429803743878963206506461")
private String moduleId;
@ApiModelProperty(value = "快件产品名称", example = "标快")
@NotBlank(message = "快件产品名称不能为空")
private String title;
@ApiModelProperty(value = "产品编码", example = "255")
@NotNull(message = "产品编码不能为空")
private Integer productCode;
@ApiModelProperty(value = "时效类型", example = "T4")
@NotBlank(message = "时效类型不能为空")
private String agingType;
@ApiModelProperty(value = "快递预估价格", example = "10")
@NotNull(message = "快递预估价格不能为空mim")
private BigDecimal estimatePriceMin;
@ApiModelProperty(value = "快递预估价格", example = "30")
@NotNull(message = "快递预估价格不能为空max")
private BigDecimal estimatePriceMax;
@ApiModelProperty(value = "是否上线 1未上线 2已上线", example = "429803743878963206506461")
@NotNull(message = "是否上线不能为空") @Min(value = 1, message = "isOnline无效") @Max(value = 2, message = "isOnline无效")
private Integer isOnline;
private static final ExpressModuleFromParam obj = new ExpressModuleFromParam();
public static ExpressModuleFromParam getNew() {
try {
return (ExpressModuleFromParam) obj.clone();
} catch (CloneNotSupportedException e) {
return new ExpressModuleFromParam();
}
}
public KylinExpressModule copy(ExpressModuleFromParam source) {
KylinExpressModule expressModule = KylinExpressModule.getNew();
if (null == source) return null;
expressModule.setTitle(source.getTitle());
expressModule.setProductCode(source.getProductCode());
expressModule.setAgingType(source.getAgingType());
expressModule.setEstimatePriceMin(source.getEstimatePriceMin());
expressModule.setEstimatePriceMax(source.getEstimatePriceMax());
expressModule.setIsOnline(source.getIsOnline());
return expressModule;
}
}
\ No newline at end of file
package com.liquidnet.service.kylin.dto.vo;
import com.liquidnet.service.kylin.entity.KylinExpressModule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
* 快递模版vo
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
@Data
@ApiModel
public class KylinExpressModuleVo implements Serializable {
private static final long serialVersionUID = 2171590423135769848L;
@ApiModelProperty(value = "快递模版id")
private String moduleId;
@ApiModelProperty(value = "快件产品名称")
private String title;
@ApiModelProperty(value = "产品编码")
private Integer productCode;
@ApiModelProperty(value = "时效类型")
private String agingType;
@ApiModelProperty(value = "快递预估价格小")
private BigDecimal estimatePriceMin;
@ApiModelProperty(value = "快递预估价格大")
private BigDecimal estimatePriceMax;
@ApiModelProperty(value = "是否上线 1未上线 2已上线")
private Integer isOnline;
@ApiModelProperty(value = "创建时间")
private LocalDateTime createdAt;
@ApiModelProperty(value = "更新时间")
private LocalDateTime updatedAt;
private static final KylinExpressModuleVo obj = new KylinExpressModuleVo();
public static KylinExpressModuleVo getNew() {
try {
return (KylinExpressModuleVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinExpressModuleVo();
}
}
public KylinExpressModuleVo copy(KylinExpressModule source) {
KylinExpressModuleVo expressModuleVo = KylinExpressModuleVo.getNew();
if (null == source) return null;
expressModuleVo.setModuleId(source.getModuleId());
expressModuleVo.setTitle(source.getTitle());
expressModuleVo.setProductCode(source.getProductCode());
expressModuleVo.setAgingType(source.getAgingType());
expressModuleVo.setEstimatePriceMin(source.getEstimatePriceMin());
expressModuleVo.setEstimatePriceMax(source.getEstimatePriceMax());
expressModuleVo.setIsOnline(source.getIsOnline());
expressModuleVo.setCreatedAt(source.getCreatedAt());
expressModuleVo.setUpdatedAt(source.getUpdatedAt());
return expressModuleVo;
}
}
......@@ -17,6 +17,7 @@ public class PerformanceRefundConfigVo {
private Integer isRefundPoundage;
private Integer isRefundVoucher;
private Integer isRefundExpress;
private Integer isBackPaperTicket;
private OrderRefundAddress orderRefundAddress;
}
......@@ -119,6 +119,7 @@ public class KylinPerformanceVo {
private Integer isRefundPoundage;
private Integer isRefundVoucher;
private Integer isRefundExpress;
private Integer isBackPaperTicket;
public void setPerformance(KylinPerformances performance) {
this.mid = performance.getMid();
......@@ -175,6 +176,7 @@ public class KylinPerformanceVo {
this.isRefundPoundage = performanceStatus.getIsRefundPoundage();
this.isRefundVoucher = performanceStatus.getIsRefundVoucher();
this.isRefundExpress = performanceStatus.getIsRefundExpress();
this.isBackPaperTicket = performanceStatus.getIsBackPaperTicket();
}
public void setPerformanceRelations(KylinPerformanceRelations performanceRelations) {
......
package com.liquidnet.service.kylin.service;
import com.liquidnet.service.kylin.dto.vo.KylinExpressModuleVo;
import java.util.List;
/**
* <p>
* 快递模板表 服务类
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
public interface IKylinExpressModuleService {
List<KylinExpressModuleVo> expressList();
}
......@@ -199,7 +199,9 @@ public interface IKylinPerformancesAdminService {
String refundCloseTime,
Integer isRefundPoundage,
Integer isRefundVoucher,
Integer isRefundExpress);
Integer isRefundExpress,
Integer isBackPaperTicket
);
/**
* 获取 演出转赠配置
......
......@@ -24,4 +24,7 @@ public class StoneConstant {
//限购
public static final String ITEM_LIMIT = ITEM.concat("limit:");
//锁
public static final String LOCK = ITEM.concat("lock:");
}
package com.liquidnet.service.sweet.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.entity.SweetWechatUsers;
import com.baomidou.mybatisplus.extension.service.IService;
......@@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ISweetWechatUsersService extends IService<SweetWechatUsers> {
ResponseDto doTask(Integer type, String phone, String userId);
}
package com.liquidnet.client.admin.web.controller.zhengzai.kylin;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.zhengzai.kylin.service.IKylinExpressModuleService;
import com.liquidnet.service.kylin.dto.param.admin.ExpressModuleFromParam;
import com.liquidnet.service.kylin.entity.KylinExpressModule;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
* <p>
* 快递模板表 前端控制器
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
@Validated
@Controller
@RequestMapping("/kylin/expressModule")
public class KylinExpressModuleController extends BaseController {
private String prefix = "zhengzai/kylin/expressModule";
@Autowired
private IKylinExpressModuleService expressModuleService;
@Log(title = "快递模版创建", businessType = BusinessType.INSERT)
@RequiresPermissions("kylin:expressModule:create")
@PostMapping("create")
@ResponseBody
public AjaxResult create(ExpressModuleFromParam param) {
Integer result = expressModuleService.createForm(param);
if (result > 0) {
return success("操作成功");
} else {
return error("操作失败");
}
}
@Log(title = "快递模版编辑", businessType = BusinessType.UPDATE)
@RequiresPermissions("kylin:expressModule:update")
@PostMapping("update")
@ResponseBody
public AjaxResult update(ExpressModuleFromParam param) {
Integer result = expressModuleService.updateForm(param);
if (result > 0) {
return success("操作成功");
} else {
return error("操作失败");
}
}
@Log(title = "快递模版上下线", businessType = BusinessType.UPDATE)
@RequiresPermissions("kylin:expressModule:isOnline")
@PutMapping("isOnline")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "moduleId", value = "快递模版id"),
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "isOnline", value = "是否上线 1下线 2上线"),
})
public AjaxResult isOnline(
@RequestParam("moduleId") @NotEmpty(message = "moduleId不能为空") String moduleId,
@RequestParam("isOnline") @NotNull(message = "isOnline不能为空") @Min(value = 1, message = "isOnline无效") @Max(value = 2, message = "isOnline无效") Integer isOnline
) {
Integer result = expressModuleService.isOnline(moduleId, isOnline);
if (result > 0) {
return success("操作成功");
} else {
return error("操作失败");
}
}
@Log(title = "快递模版详情", businessType = BusinessType.DETAIL)
@GetMapping("details")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(type = "query", required = true, dataType = "String", name = "moduleId", value = "快递模版id"),
})
public AjaxResult details(@RequestParam("moduleId") String moduleId) {
KylinExpressModule result = expressModuleService.detail(moduleId);
return AjaxResult.success(result);
}
@Log(title = "快递模版列表数据", businessType = BusinessType.LIST)
@RequiresPermissions("kylin:expressModule:list")
@PostMapping("list")
@ResponseBody
public TableDataInfo list() {
PageInfo<KylinExpressModule> result = expressModuleService.expressList();
return getDataTable(result.getList());
}
@GetMapping()
public String listView() {
return prefix + "/listView";
}
@GetMapping("/create")
public String createView() {
return prefix + "/create";
}
@GetMapping("/update/{moduleId}")
public String updateView(@PathVariable("moduleId") String moduleId, ModelMap mmap) {
KylinExpressModule result = expressModuleService.detail(moduleId);
mmap.put("KylinExpressModule", result);
return prefix + "/update";
}
}
......@@ -203,8 +203,10 @@ public class KylinPerformancesController extends BaseController {
@RequestParam("refundCloseTime") String refundCloseTime,
@RequestParam("isRefundPoundage") Integer isRefundPoundage,
@RequestParam("isRefundVoucher") Integer isRefundVoucher,
@RequestParam("isRefundExpress") Integer isRefundExpress) {
String result = kylinPerformancesService.changeRefundConfig(performancesId, isCanRefund, refundOpenTime, refundCloseTime, isRefundPoundage, isRefundVoucher, isRefundExpress);
@RequestParam("isRefundExpress") Integer isRefundExpress,
@RequestParam("isBackPaperTicket") Integer isBackPaperTicket
) {
String result = kylinPerformancesService.changeRefundConfig(performancesId, isCanRefund, refundOpenTime, refundCloseTime, isRefundPoundage, isRefundVoucher, isRefundExpress, isBackPaperTicket);
return this.success(result);
}
......
......@@ -10,8 +10,7 @@ import com.liquidnet.client.admin.common.utils.poi.ExcelUtil;
import com.liquidnet.client.admin.zhengzai.sweet.dto.SweetActivityDrawExcelListDao;
import com.liquidnet.client.admin.zhengzai.sweet.service.ISweetIntegralActivityDrawService;
import com.liquidnet.service.sweet.dto.SweetActivityDrawListDao;
import com.liquidnet.service.sweet.dto.param.admin.SweetIntegralActivityDrawListSearchParam;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw;
import com.liquidnet.service.sweet.dto.admin.SweetIntegralActivityDrawListSearchParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
......@@ -51,7 +50,7 @@ public class SweetIntegralActivityDrawController extends BaseController {
@PostMapping("list")
@ResponseBody
public TableDataInfo list(SweetIntegralActivityDrawListSearchParam listParam) {
PageInfo<SweetIntegralActivityDraw> result = iSweetIntegralActivityDrawService.drawList(listParam);
PageInfo<SweetActivityDrawListDao> result = iSweetIntegralActivityDrawService.drawList(listParam);
return getDataTable(result.getList());
}
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('添加快递模版')"/>
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-post-add">
<div class="form-group">
<label class="col-sm-2 control-label is-required">快件产品名称:</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="title" id="title" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">产品编码:</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="productCode" id="productCode">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">时效类型:</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="agingType" id="agingType" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">快递预估价格小:</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="estimatePriceMin" id="estimatePriceMin">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">快递预估价格大:</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="estimatePriceMax" id="estimatePriceMax">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">是否上线</label>
<div class="col-sm-10">
<div class="radio check-box">
<label>
<input type="radio" value="1" name="isOnline" checked=""> <i></i> 未上线
</label>
</div>
<div class="radio check-box">
<label>
<input type="radio" value="2" name="isOnline"> <i></i> 已上线
</label>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer"/>
<script type="text/javascript">
var prefix = ctx + "kylin/expressModule";
function submitHandler() {
if ($.validate.form()) {
var data = $('#form-post-add').serializeArray();
$.operate.save(prefix + "/create", data);
}
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('快递模版列表')"/>
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="kylin:expressModule:create">
<i class="fa fa-plus"></i> 添加
</a>
</div>
<div class="col-sm-12 select-table table-bordered">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer"/>
<script th:inline="javascript">
var updateFlag = [[${@permission.hasPermi('kylin:expressModule:create')}]];
var isOnlineFlag = [[${@permission.hasPermi('kylin:expressModule:isOnline')}]];
var prefix = ctx + "kylin/expressModule";
$(function () {
var options = {
url: prefix + "/list",
updateUrl: prefix + "/update/{id}",
createUrl: prefix + "/create",
modalName: "快递模版",
columns: [{
checkbox: true
},
{
field: 'title',
title: '快件产品名称'
},
{
field: 'productCode',
title: '产品编码'
},
{
field: 'agingType',
title: '时效类型'
},
{
field: '',
title: '快递预估价',
formatter: function (value, row, index) {
return row.estimatePriceMin + ' ~ ' + row.estimatePriceMax;
}
},
{
field: 'isOnline',
title: '状态',
formatter: function (value, row) {
var isOnline = row.isOnline;
if (row.isOnline == 1) {
isOnline = "未上线";
} else {
isOnline = "已上线";
}
return isOnline;
}
},
{
field: 'createdAt',
title: '创建时间'
},
{
title: '操作',
align: 'center',
formatter: function (value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + updateFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.moduleId + '\')"></i>编辑</a> ');
actions.push(`<a class="btn btn-danger btn-xs ${isOnlineFlag}" href="javascript:void(0)" onclick="openModal('${row.moduleId}','${row.isOnline}')"></i>上下线</a> `);
return actions.join('');
}
}]
};
$.table.init(options);
});
function openModal(id, data) {
let title = '';
let lineId = null;
if (data == 1) {
title = '上线';
lineId = 2
} else {
title = '下线';
lineId = 1
}
$.modal.confirm(`确定要${title}此活动吗`, function() {
$.ajax({
type: 'put',
url: '/kylin/expressModule/isOnline',
data: {moduleId: id, isOnline: lineId},
success:function(e) {
$("button[name=refresh]").click();
}
})
});
}
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('编辑快递模版')"/>
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-post-add">
<div class="form-group">
<label class="col-sm-2 control-label is-required">快件产品名称:</label>
<div class="col-sm-10">
<input th:value="${KylinExpressModule.title}" class="form-control" type="text" name="title"
id="title" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">快件产品名称:</label>
<div class="col-sm-10">
<input th:value="${KylinExpressModule.productCode}" class="form-control" type="number" name="productCode"
id="productCode" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">时效类型:</label>
<div class="col-sm-10">
<input th:value="${KylinExpressModule.agingType}" class="form-control" type="text" name="agingType"
id="agingType" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">快递预估价格小:</label>
<div class="col-sm-10">
<input th:value="${KylinExpressModule.estimatePriceMin}" class="form-control" type="number" name="estimatePriceMin"
id="estimatePriceMin" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">快递预估价格大:</label>
<div class="col-sm-10">
<input th:value="${KylinExpressModule.estimatePriceMax}" class="form-control" type="number" name="estimatePriceMax"
id="estimatePriceMax" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">是否上线</label>
<div class="col-sm-10">
<div class="radio check-box">
<label>
<input type="radio" value="1" name="isOnline"
th:checked="${KylinExpressModule.isOnline==1 ? true : false}"> <i></i> 未上线
</label>
</div>
<div class="radio check-box">
<label>
<input type="radio" value="2" name="isOnline"
th:checked="${KylinExpressModule.isOnline==2 ? true : false}"> <i></i> 已上线
</label>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer"/>
<script type="text/javascript">
var prefix = ctx + "kylin/expressModule";
var moduleId = "[[${KylinExpressModule.moduleId}]]";
function submitHandler() {
if ($.validate.form()) {
var data = $('#form-post-add').serializeArray();
data.push({"name": "moduleId", "value": moduleId});
$.operate.save(prefix + "/update", data);
}
}
</script>
</body>
</html>
\ No newline at end of file
......@@ -95,6 +95,17 @@
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">快递票是否需要退回:</label>
<div class="col-sm-8">
<div class="radio check-box">
<input type="radio" value="0" name="isBackPaperTicket" th:checked="*{isBackPaperTicket==0 ? true : false}" checked> 不需要</label>
</div>
<div class="radio check-box">
<input type="radio" value="1" name="isBackPaperTicket" th:checked="*{isBackPaperTicket==1 ? true : false}">需要</label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">收货人:</label>
<div class="col-sm-8">
......@@ -156,7 +167,8 @@
refundCloseTime: $("input[name^='refundCloseTime']").val(),
isRefundPoundage: parseInt($("input[name^='performance_isRefundPoundage']:checked").val()),
isRefundVoucher: parseInt($("input[name^='performance_isRefundVoucher']:checked").val()),
isRefundExpress: parseInt($("input[name^='performance_isRefundExpress']:checked").val())
isRefundExpress: parseInt($("input[name^='performance_isRefundExpress']:checked").val()),
isBackPaperTicket: parseInt($("input[name^='isBackPaperTicket']:checked").val())
}
if ($("input[name^='refundCloseTime']").val() == "" || $("input[name^='refundOpenTime']").val() == "") {
......
......@@ -125,7 +125,11 @@
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + drawListFlag + '" href="javascript:void(0)" onclick="$.operate.detailTab(\'' + row.integralActivityId + '\')"><i class="fa fa-edit"></i>查看抽奖名单</a> ');
actions.push('<a class="btn btn-success btn-xs ' + updateFlag + '" href="javascript:void(0)" onclick="$.operate.editTab(\'' + row.integralActivityId + '\')"></i>编辑</a> ');
actions.push(`<a class="btn btn-danger btn-xs ${isOnlineFlag}" href="javascript:void(0)" onclick="openModal('${row.integralActivityId}','${row.isOnline}')"></i>上下线</a> `);
if (row.isOnline == 1) {
actions.push(`<a class="btn btn-danger btn-xs ${isOnlineFlag}" href="javascript:void(0)" onclick="openModal('${row.integralActivityId}','${row.isOnline}')"></i>上线</a> `);
} else {
actions.push(`<a class="btn btn-danger btn-xs ${isOnlineFlag}" href="javascript:void(0)" onclick="openModal('${row.integralActivityId}','${row.isOnline}')"></i>下线</a> `);
}
actions.push('<a class="btn btn-warning btn-xs ' + exportExcelFlag + '" href="javascript:void(0)" onclick="exportExcel(\'' + row.integralActivityId + '\')"></i>导出抽奖信息</a> ');
return actions.join('');
}
......
......@@ -24,6 +24,10 @@
th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
<label>用户账户:</label>
<input type="text" name="mobile"/>
</li>
<li>
<label>用户昵称:</label>
<input type="text" name="nickname"/>
......
package com.liquidnet.client.admin.zhengzai.kylin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.kylin.dto.param.admin.ExpressModuleFromParam;
import com.liquidnet.service.kylin.entity.KylinExpressModule;
/**
* <p>
* 快递模板表 服务类
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
public interface IKylinExpressModuleService extends IService<KylinExpressModule> {
Integer createForm(ExpressModuleFromParam param);
Integer updateForm(ExpressModuleFromParam param);
Integer isOnline(String moduleId, Integer isOnline);
KylinExpressModule detail(String moduleId);
PageInfo<KylinExpressModule> expressList();
}
package com.liquidnet.client.admin.zhengzai.kylin.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.zhengzai.kylin.service.IKylinExpressModuleService;
import com.liquidnet.client.admin.zhengzai.kylin.utils.DataUtils;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.kylin.dto.param.admin.ExpressModuleFromParam;
import com.liquidnet.service.kylin.dto.vo.KylinExpressModuleVo;
import com.liquidnet.service.kylin.entity.KylinExpressModule;
import com.liquidnet.service.kylin.mapper.KylinExpressModuleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 快递模板表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
@Service
public class KylinExpressModuleServiceImpl extends ServiceImpl<KylinExpressModuleMapper, KylinExpressModule> implements IKylinExpressModuleService {
@Autowired
private KylinExpressModuleMapper moduleMapper;
@Autowired
private DataUtils dataUtils;
@Override
public Integer createForm(ExpressModuleFromParam param) {
try {
KylinExpressModule expressModule = ExpressModuleFromParam.getNew().copy(param);
String moduleId = IDGenerator.nextSnowId();
expressModule.setModuleId(moduleId);
int insert = moduleMapper.insert(expressModule);
// redis处理
this.expressModuleList();
return insert;
} catch (Exception e) {
log.error("创建失败 [e:{}]", e);
return 0;
}
}
@Override
public Integer updateForm(ExpressModuleFromParam param) {
try {
KylinExpressModule expressModule = ExpressModuleFromParam.getNew().copy(param);
expressModule.setUpdatedAt(LocalDateTime.now());
String moduleId = param.getModuleId();
int update = moduleMapper.update(
expressModule,
Wrappers.lambdaUpdate(KylinExpressModule.class).eq(KylinExpressModule::getModuleId, moduleId)
);
// redis处理
this.expressModuleList();
return update;
} catch (Exception e) {
log.error("编辑失败 [e:{}]", e);
return 0;
}
}
@Override
public Integer isOnline(String moduleId, Integer isOnline) {
KylinExpressModule expressModule = KylinExpressModule.getNew();
expressModule.setIsOnline(isOnline);
expressModule.setUpdatedAt(LocalDateTime.now());
int update = moduleMapper.update(
expressModule,
Wrappers.lambdaUpdate(KylinExpressModule.class).eq(KylinExpressModule::getModuleId, moduleId)
);
// redis处理
this.expressModuleList();
return update;
}
@Override
public KylinExpressModule detail(String getModuleId) {
KylinExpressModule expressModule = moduleMapper.selectOne(
Wrappers.lambdaQuery(KylinExpressModule.class).eq(KylinExpressModule::getModuleId, getModuleId)
);
return expressModule;
}
@Override
public PageInfo<KylinExpressModule> expressList() {
List<KylinExpressModule> kylinExpressModules = moduleMapper.selectList(Wrappers.lambdaQuery());
return new PageInfo(kylinExpressModules);
}
private void expressModuleList() {
// 列表
List<KylinExpressModule> kylinExpressModules = moduleMapper.selectList(
Wrappers.lambdaQuery(KylinExpressModule.class).eq(KylinExpressModule::getIsOnline, 2)
);
List<KylinExpressModuleVo> voList = new ArrayList<>();
kylinExpressModules.forEach(r -> {
KylinExpressModuleVo copy = KylinExpressModuleVo.getNew().copy(r);
voList.add(copy);
});
dataUtils.setkylinExpressModules(voList);
}
}
......@@ -586,6 +586,7 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
vo.setIsRefundPoundage(kylinPerformanceStatus.getIsRefundPoundage());
vo.setIsRefundVoucher(kylinPerformanceStatus.getIsRefundVoucher());
vo.setIsRefundExpress(kylinPerformanceStatus.getIsRefundExpress());
vo.setIsBackPaperTicket(kylinPerformanceStatus.getIsBackPaperTicket());
vo.setOrderRefundAddress(dataUtils.getRefundAddress());
return vo;
......@@ -646,7 +647,9 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
String refundCloseTime,
Integer isRefundPoundage,
Integer isRefundVoucher,
Integer isRefundExpress) {
Integer isRefundExpress,
Integer isBackPaperTicket
) {
KylinPerformanceStatus kylinPerformanceStatusData = performanceStatusMapper.selectOne(new UpdateWrapper<KylinPerformanceStatus>().eq("performance_id", performancesId));
if (kylinPerformanceStatusData.getIsTransfer().equals(1) && isCanRefund.equals(1)) {
return "修改失败,演出已开启转赠";
......@@ -659,6 +662,7 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
kylinPerformanceStatus.setIsRefundPoundage(isRefundPoundage);
kylinPerformanceStatus.setIsRefundVoucher(isRefundVoucher);
kylinPerformanceStatus.setIsRefundExpress(isRefundExpress);
kylinPerformanceStatus.setIsBackPaperTicket(isBackPaperTicket);
try {
performanceStatusMapper.update(kylinPerformanceStatus, new UpdateWrapper<KylinPerformanceStatus>().eq("performance_id", performancesId));
......
package com.liquidnet.client.admin.zhengzai.kylin.utils;
import com.liquidnet.service.kylin.dto.vo.KylinExpressModuleVo;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundAddress;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.zhengzai.kylin.dto.OrderOutLineVo;
import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundAddress;
import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
......@@ -434,4 +435,9 @@ public class DataUtils {
orderTicketVo.setEntitiesVoList(kylinOrderTicketEntitiesVoList);
redisDataSourceUtil.getRedisKylinUtil().set(KylinRedisConst.ORDER +orderTicketsId, orderTicketVo);
}
public void setkylinExpressModules(List<KylinExpressModuleVo> voList) {
String redisKey = KylinRedisConst.KYLIN_EXPRESS_MODULES;
redisDataSourceUtil.getRedisKylinUtil().set(redisKey, voList);
}
}
......@@ -34,7 +34,7 @@ public class SweetActivityDrawExcelListDao implements Serializable, Cloneable {
private String receivingPhone;
@Excel(name = "收货地址")
private String receivingAddress;
private String receivingAddressAll;
@Excel(name = "发放状态")
private String receivingStatusName;
......@@ -83,11 +83,11 @@ public class SweetActivityDrawExcelListDao implements Serializable, Cloneable {
this.setNickname(source.getNickname());
this.setReceivingName(source.getReceivingName());
this.setReceivingPhone(source.getReceivingPhone());
this.setReceivingAddress(source.getReceivingAddress());
this.setReceivingAddressAll(source.getReceivingAddressAll());
if (source.getReceivingStatus() == 2) {
this.setReceivingStatusName("已发放");
} else {
this.setReceivingStatusName("未方法");
this.setReceivingStatusName("未发放");
}
this.setCreatedAt(source.getCreatedAt());
return this;
......
......@@ -2,7 +2,7 @@ package com.liquidnet.client.admin.zhengzai.sweet.service;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.sweet.dto.SweetActivityDrawListDao;
import com.liquidnet.service.sweet.dto.param.admin.SweetIntegralActivityDrawListSearchParam;
import com.liquidnet.service.sweet.dto.admin.SweetIntegralActivityDrawListSearchParam;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw;
import com.baomidou.mybatisplus.extension.service.IService;
......@@ -18,7 +18,7 @@ import java.util.List;
*/
public interface ISweetIntegralActivityDrawService extends IService<SweetIntegralActivityDraw> {
PageInfo<SweetIntegralActivityDraw> drawList(SweetIntegralActivityDrawListSearchParam listParam);
PageInfo<SweetActivityDrawListDao> drawList(SweetIntegralActivityDrawListSearchParam listParam);
List<SweetActivityDrawListDao> selectExcelList(String integralActivityId);
......
package com.liquidnet.client.admin.zhengzai.sweet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
......@@ -8,7 +7,7 @@ import com.liquidnet.client.admin.zhengzai.sweet.service.ISweetIntegralActivityD
import com.liquidnet.client.admin.zhengzai.sweet.utils.SweetRedisAdminUtils;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.sweet.dto.SweetActivityDrawListDao;
import com.liquidnet.service.sweet.dto.param.admin.SweetIntegralActivityDrawListSearchParam;
import com.liquidnet.service.sweet.dto.admin.SweetIntegralActivityDrawListSearchParam;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw;
import com.liquidnet.service.sweet.mapper.SweetIntegralActivityDrawMapper;
......@@ -46,8 +45,8 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
private MongoTemplate mongoTemplate;
@Override
public PageInfo<SweetIntegralActivityDraw> drawList(SweetIntegralActivityDrawListSearchParam listParam) {
PageHelper.startPage(listParam.getPageNum(), listParam.getPageSize());
public PageInfo<SweetActivityDrawListDao> drawList(SweetIntegralActivityDrawListSearchParam listParam) {
/*PageHelper.startPage(listParam.getPageNum(), listParam.getPageSize());
LambdaQueryWrapper<SweetIntegralActivityDraw> queryWrapper = Wrappers.lambdaQuery(SweetIntegralActivityDraw.class)
.eq(SweetIntegralActivityDraw::getIntegralActivityId, listParam.getIntegralActivityId());
if (!listParam.getNickname().isEmpty()) {
......@@ -74,8 +73,14 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
}
List<SweetIntegralActivityDraw> sweetIntegralActivityDraws = sweetIntegralActivityDrawMapper.selectList(
queryWrapper
);
return new PageInfo(sweetIntegralActivityDraws);
);*/
try {
PageHelper.startPage(listParam.getPageNum(), listParam.getPageSize());
List<SweetActivityDrawListDao> lists = sweetIntegralActivityDrawMapper.searchLists(listParam);
return new PageInfo(lists);
} catch (Exception e) {
return new PageInfo();
}
}
@Override
......
......@@ -62,7 +62,7 @@ public class SweetIntegralActivityServiceImpl extends ServiceImpl<SweetIntegralA
if (!CollectionUtils.isEmpty(prizeList)) {
for (SweetIntegralActivityPrizeFormParam prize : prizeList) {
if (prize.getPrizeType() == 2) {
prize.setPrizeTypeNum(10);
prize.setPrizeTypeNum(100);
} else {
prize.setPrizeTypeNum(1);
}
......@@ -102,7 +102,7 @@ public class SweetIntegralActivityServiceImpl extends ServiceImpl<SweetIntegralA
sweetIntegralActivityPrize.setIntegralActivityId(integralActivityId);
String prizeId = prize.getPrizeId();
if (prize.getPrizeType() == 2) {
sweetIntegralActivityPrize.setPrizeTypeNum(10);
sweetIntegralActivityPrize.setPrizeTypeNum(100);
} else {
sweetIntegralActivityPrize.setPrizeTypeNum(1);
}
......
......@@ -4,6 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.UnknownHttpStatusCodeException;
public class IdentityUtils {
private static final Logger log = LoggerFactory.getLogger(IdentityUtils.class);
......@@ -20,6 +21,11 @@ public class IdentityUtils {
return HttpUtil.post(aliThirdUrl, params, header);
} catch (Exception e) {
log.error("###实名认证异常:{}", e.getLocalizedMessage(), e);
if (e instanceof UnknownHttpStatusCodeException) {
UnknownHttpStatusCodeException unknownHttpStatusCodeException = (UnknownHttpStatusCodeException) e;
return unknownHttpStatusCodeException.getMessage();
}
return null;
}
}
......
......@@ -12,6 +12,7 @@ import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
......@@ -98,21 +99,20 @@ public class EasemobUtil{
// ObjectNode objectNode = JsonUtils.OM().createObjectNode();
try {
response = HttpUtil.postJson(requestUrl,json.toString(),commonHeader);
}
catch(HttpClientErrorException e){
} catch(HttpClientErrorException e) {
log.error("createUser error", e);
if(e.getRawStatusCode() == 400){
JSONObject jsonObject = JsonUtils.fromJson(e.getResponseBodyAsString(), new TypeReference<JSONObject>() {});
log.info("createUser error : {}",jsonObject.get("error"));
log.info("createUser error_description : {}",jsonObject.get("error_description"));
return jsonObject.toJSONString();
}
}catch (Exception e) {
e.printStackTrace();
log.error("createUser error : {}",e);
log.error("createUser error",e);
}
log.info("createUsers--->>> response : {} ",response);
if (StringUtils.isEmpty(response)) {
return response;
}
ObjectNode jsonObject = JsonUtils.fromJson(response,ObjectNode.class);
ArrayNode arrayNode = (ArrayNode)jsonObject.get("entities");
response = arrayNode.get(0).toString();
......
......@@ -52,15 +52,15 @@ liquidnet:
adam:
database: 255
dbs: 0,256
host: r-2ze3sf1ll8er966uuc.redis.rds.aliyuncs.com
host: r-2ze7002ckw5u75fguk.redis.rds.aliyuncs.com
port: 6380
password: Zhengzai@2021
password: PO@B!Iud32
candy:
database: 255
dbs: 0,256
host: r-2zem98z0tongsw3fpc.redis.rds.aliyuncs.com
host: r-2ze7002ckw5u75fguk.redis.rds.aliyuncs.com
port: 6380
password: Zhengzai@2021
password: PO@B!Iud32
mongodb:
host: 39.107.71.112:27017
port: 27017
......
......@@ -3,7 +3,7 @@ server:
tomcat:
uri-encoding: UTF-8
maxThreads: 2000 #默认200
minSpareThreads: 2000 #默认10
minSpareThreads: 200 #默认10
maxConnections: 20000 #默认10000
acceptCount: 5000 #默认100
processorCache: 5000 #默认200
......@@ -137,29 +137,6 @@ spring:
max-wait: -1
max-idle: 8
min-idle: 0
redisson:
singleServerConfig:
address: redis://${liquidnet.redis.host}:${liquidnet.redis.port}
password: ${liquidnet.redis.password}
clientName: null
database: 7 #选择使用哪个数据库0~15
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
subscriptionsPerConnection: 5
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
connectionMinimumIdleSize: 32
connectionPoolSize: 64
dnsMonitoringInterval: 5000
threads: 16
nettyThreads: 32
codec:
class: "org.redisson.codec.JsonJacksonCodec"
transportMode: "NIO"
data:
mongodb:
uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=200&waitQueueMultiple=100
......
......@@ -58,7 +58,7 @@ info:
version: '@project.version@'
# -----------------------------------------------------------
mybatis-plus:
mapper-locations: classpath:com.liquidnet.service.*.mapper/*Mapper.xml,classpath:com.liquidnet.service.kylin.mapper/*Mapper.xml
mapper-locations: classpath*:com.liquidnet.service.*.mapper/*Mapper.xml
# -----------------------------------------------------------
spring:
application:
......@@ -114,6 +114,8 @@ global-auth:
- ${liquidnet.info.context}/integralActivityDraw/perfectAddress
# 手机号获取是否关注
- ${liquidnet.info.context}/wechatTemplate/followStatusPhone
# 做积分任务
- ${liquidnet.info.context}/wechatUsers/doTask
oncheck-url-pattern:
- ${liquidnet.info.context}/**
# -----------------------------------------------------------
......
package com.liquidnet.service.kylin.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 快递模板表
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class KylinExpressModule implements Serializable {
private static final long serialVersionUID = -5081186584071376123L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* module_id
*/
private String moduleId;
/**
* 快件产品名称
*/
private String title;
/**
* 产品编码
*/
private Integer productCode;
/**
* 时效类型
*/
private String agingType;
/**
* 快递价格(预估)
*/
private BigDecimal estimatePriceMin;
/**
* 快递价格(预估)
*/
private BigDecimal estimatePriceMax;
/**
* 是否上线 1未上线 2已上线
*/
private Integer isOnline;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
private static final KylinExpressModule obj = new KylinExpressModule();
public static KylinExpressModule getNew() {
try {
return (KylinExpressModule) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinExpressModule();
}
}
}
......@@ -139,6 +139,11 @@ public class KylinPerformanceStatus implements Serializable ,Cloneable{
*/
private Integer isRefundExpress;
/**
* 快递票是否需要退回
*/
private Integer isBackPaperTicket;
/**
* 创建时间
*/
......
package com.liquidnet.service.kylin.mapper;
import com.liquidnet.service.kylin.entity.KylinExpressModule;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 快递模板表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
public interface KylinExpressModuleMapper extends BaseMapper<KylinExpressModule> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.kylin.mapper.KylinExpressModuleMapper">
</mapper>
......@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.liquidnet.service.stone.dto.StoneScoreListDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -17,7 +19,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class StoneScoreUser implements Serializable {
public class StoneScoreUser implements Serializable,Cloneable {
private static final long serialVersionUID = 1L;
......@@ -46,4 +48,14 @@ public class StoneScoreUser implements Serializable {
private String comment;
private static final StoneScoreUser obj = new StoneScoreUser();
public static StoneScoreUser getNew() {
try {
return (StoneScoreUser) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new StoneScoreUser();
}
}
......@@ -82,10 +82,26 @@ public class SweetActivityDrawListDao implements Serializable {
*/
private String receivingPhone;
/**
* adam收货人地址省份
*/
private String receivingProvince;
/**
* adam收货人地址城市
*/
private String receivingCity;
/**
* adam收货人地址区县
*/
private String receivingCounty;
/**
* adam收货人完整地址 空格隔离省市区详细地址
*/
private String receivingAddress;
private String receivingAddressAll;
/**
* 发放状态 1未发放 2已发放 3无需发放
......
package com.liquidnet.service.sweet.dto.param.admin;
package com.liquidnet.service.sweet.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -33,6 +33,9 @@ public class SweetIntegralActivityDrawListSearchParam implements Serializable {
@ApiModelProperty(value = "用户昵称")
private String nickname;
@ApiModelProperty(value = "用户账户")
private String mobile;
@ApiModelProperty(value = "发放状态")
private Integer receivingStatus;
......
package com.liquidnet.service.sweet.mapper;
import com.liquidnet.service.sweet.dto.SweetActivityDrawListDao;
import com.liquidnet.service.sweet.dto.admin.SweetIntegralActivityDrawListSearchParam;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
......@@ -18,4 +19,6 @@ import java.util.List;
public interface SweetIntegralActivityDrawMapper extends BaseMapper<SweetIntegralActivityDraw> {
List<SweetActivityDrawListDao> selectExcelList(@Param("integralActivityId") String integralActivityId);
List<SweetActivityDrawListDao> searchLists(SweetIntegralActivityDrawListSearchParam listParam);
}
......@@ -3,7 +3,8 @@
<mapper namespace="com.liquidnet.service.sweet.mapper.SweetIntegralActivityDrawMapper">
<select id="selectExcelList" resultType="com.liquidnet.service.sweet.dto.SweetActivityDrawListDao">
select a.*, CONCAT(a.receiving_province,a.receiving_city,a.receiving_county,a.receiving_address) as receiving_address,
select a.*, CONCAT(a.receiving_province,a.receiving_city,a.receiving_county,a.receiving_address) as
receiving_address_all,
u.mobile
from sweet_integral_activity_draw as a
left join sweet_integral_activity_prize as b on b.prize_id = a.prize_id
......@@ -16,4 +17,39 @@
</where>
ORDER BY a.mid DESC
</select>
<select id="searchLists"
parameterType="com.liquidnet.service.sweet.dto.admin.SweetIntegralActivityDrawListSearchParam"
resultType="com.liquidnet.service.sweet.dto.SweetActivityDrawListDao">
select a.*,
u.mobile
from sweet_integral_activity_draw as a
left join adam_user as u on u.uid = a.user_id
<where>
<if test="mobile != null and mobile != ''">
and u.mobile = #{mobile}
</if>
<if test="integralActivityId != null and integralActivityId != ''">
and a.integral_activity_id = #{integralActivityId}
</if>
<if test="prizeTitle != null and prizeTitle != ''">
and a.prize_title like concat('%', #{prizeTitle}, '%')
</if>
<if test="nickname != null and nickname != ''">
and a.nickname like concat('%', #{nickname}, '%')
</if>
<if test="prizeType != null and prizeType != ''">
and a.prize_type = #{prizeType}
</if>
<if test="receivingStatus != null and receivingStatus != ''">
and a.receiving_status = #{prizeTyreceivingStatuspe}
</if>
<if test="isWin == 1">
and a.prize_type = 1
</if>
<if test="isWin == 2">
and a.prize_type != 1
</if>
</where>
ORDER BY a.mid DESC
</select>
</mapper>
package com.liquidnet.service.feign.adam.api;
import com.liquidnet.service.adam.dto.rsc.AdamChimeUinfoDto;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.dto.vo.*;
import com.liquidnet.service.adam.dto.rsc.AdamChimeUinfoReq;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
......@@ -16,6 +14,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.util.List;
......@@ -43,4 +42,11 @@ public interface FeignAdamBaseClient {
@PostMapping(value = {"rsc/reg/mobile"})
ResponseDto<AdamUserInfoVo> registerByMobile(@Pattern(regexp = "\\d{11}", message = "手机号格式有误")
@RequestParam(value = "mobile") String mobile);
@PostMapping(value = {"login/silent_mobile"})
ResponseDto<AdamLoginInfoVo> loginBySilentMobile(@Pattern(regexp = "\\d{11}", message = "手机号格式有误")
@NotBlank(message = "手机号不能为空")
@RequestParam(value = "mobile") String mobile,
@NotBlank(message = "临时票据不能为空")
@RequestParam(value = "otp") String otp);
}
......@@ -41,6 +41,14 @@ public interface FeignStoneIntegralClient {
@RequestParam(value = "content") String content
);
// 增加积分
@PostMapping(value = "user/logs/in2112")
ResponseDto<String> in2112(
@RequestParam(value = "uid") String uid,
@RequestParam(value = "score") Integer score,
@RequestParam(value = "content") String content
);
// 减少积分
@PostMapping(value = "user/logs/de2111")
ResponseDto<String> de2111(
......
......@@ -225,62 +225,62 @@ public class AdamLoginController {
return this.loginVoResponseProcessing(loginInfoVo);
}
@ApiOperationSupport(order = 5)
@ApiOperation(value = "微信小程序登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "anum", value = "应用标识[1-正在|2-草莓音乐节|3-五百里|4-MDSK]", allowableValues = "1,2,3,4"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "code", value = "临时票据"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "encryptedData", value = "访问令牌"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "iv", value = "访问令牌"),
})
@PostMapping(value = {"login/wca"})
public ResponseDto<AdamLoginInfoVo> loginByWechatApplet(@RequestParam Integer anum,
@RequestParam String code,
@RequestParam String encryptedData,
@RequestParam String iv) {
log.info("login by wechat applet:[anum:{},code:{},encryptedData:{},iv:{}]", anum, code, encryptedData, iv);
String wechatMobile, wechatOpenid, wechatUnionid;
try {
WxMaJscode2SessionResult wxMaJscode2SessionResult = adamWechatService.sessionInfo(code, anum);
WxMaPhoneNumberInfo wxMaPhoneNumberInfo = adamWechatService.phoneNumberInfo(wxMaJscode2SessionResult.getSessionKey(), encryptedData, iv, anum);
wechatMobile = wxMaPhoneNumberInfo.getPurePhoneNumber();
wechatOpenid = wxMaJscode2SessionResult.getOpenid();
wechatUnionid = wxMaJscode2SessionResult.getUnionid();
} catch (WxErrorException e) {
log.error("login by wechat applet exception:[anum:{},code:{},encryptedData:{},iv:{}], errmsg:{}", anum, code, encryptedData, iv, e.getMessage());
return ResponseDto.failure(ErrorMapping.get("10001"));
}
if (StringUtils.isEmpty(wechatMobile)) return ResponseDto.failure(ErrorMapping.get("10005"));
String uid = adamRdmService.getUidByMobile(wechatMobile);
boolean toRegister = StringUtils.isEmpty(uid);
AdamUserInfoVo userInfoVo = toRegister ? adamUserService.register(wechatMobile) : adamRdmService.getUserInfoVoByUid(uid);
if (!toRegister && (null == userInfoVo || userInfoVo.getState() == 2)) {
log.warn("Cancelled mobile:{}", wechatMobile);
return ResponseDto.failure(ErrorMapping.get("10024"));
}
// 根据skip值,设置IsComplete(考虑到已存在用户未完善信息的情况,这里只对返回数据单独设置IsComplete)
userInfoVo.setIsComplete(1);
AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
loginInfoVo.setToken(this.ssoProcess(userInfoVo));
loginInfoVo.setUserInfo(userInfoVo);
if (!toRegister) {
loginInfoVo.setUserMemberVo(adamRdmService.getUserMemberVoByUid(userInfoVo.getUid()));
}
loginInfoVo.setWechatOpenid(wechatOpenid);
loginInfoVo.setWechatUnionid(wechatUnionid);
log.info(UserPathDto.setData(toRegister ? "注册" : "登录", ServletUtils.getRequest().getParameterMap(), loginInfoVo));
// return ResponseDto.success(loginInfoVo.desensitize(reviewUserInfo).finalRating());
return this.loginVoResponseProcessing(loginInfoVo);
}
// @ApiOperationSupport(order = 5)
// @ApiOperation(value = "微信小程序登录")
// @ApiImplicitParams({
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "anum", value = "应用标识[1-正在|2-草莓音乐节|3-五百里|4-MDSK]", allowableValues = "1,2,3,4"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "code", value = "临时票据"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "encryptedData", value = "访问令牌"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "iv", value = "访问令牌"),
// })
// @PostMapping(value = {"login/wca"})
// public ResponseDto<AdamLoginInfoVo> loginByWechatApplet(@RequestParam Integer anum,
// @RequestParam String code,
// @RequestParam String encryptedData,
// @RequestParam String iv) {
// log.info("login by wechat applet:[anum:{},code:{},encryptedData:{},iv:{}]", anum, code, encryptedData, iv);
// String wechatMobile, wechatOpenid, wechatUnionid;
// try {
// WxMaJscode2SessionResult wxMaJscode2SessionResult = adamWechatService.sessionInfo(code, anum);
//
// WxMaPhoneNumberInfo wxMaPhoneNumberInfo = adamWechatService.phoneNumberInfo(wxMaJscode2SessionResult.getSessionKey(), encryptedData, iv, anum);
//
// wechatMobile = wxMaPhoneNumberInfo.getPurePhoneNumber();
// wechatOpenid = wxMaJscode2SessionResult.getOpenid();
// wechatUnionid = wxMaJscode2SessionResult.getUnionid();
// } catch (WxErrorException e) {
// log.error("login by wechat applet exception:[anum:{},code:{},encryptedData:{},iv:{}], errmsg:{}", anum, code, encryptedData, iv, e.getMessage());
// return ResponseDto.failure(ErrorMapping.get("10001"));
// }
//
// if (StringUtils.isEmpty(wechatMobile)) return ResponseDto.failure(ErrorMapping.get("10005"));
//
// String uid = adamRdmService.getUidByMobile(wechatMobile);
// boolean toRegister = StringUtils.isEmpty(uid);
//
// AdamUserInfoVo userInfoVo = toRegister ? adamUserService.register(wechatMobile) : adamRdmService.getUserInfoVoByUid(uid);
//
// if (!toRegister && (null == userInfoVo || userInfoVo.getState() == 2)) {
// log.warn("Cancelled mobile:{}", wechatMobile);
// return ResponseDto.failure(ErrorMapping.get("10024"));
// }
//
// // 根据skip值,设置IsComplete(考虑到已存在用户未完善信息的情况,这里只对返回数据单独设置IsComplete)
// userInfoVo.setIsComplete(1);
//
// AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
// loginInfoVo.setToken(this.ssoProcess(userInfoVo));
// loginInfoVo.setUserInfo(userInfoVo);
// if (!toRegister) {
// loginInfoVo.setUserMemberVo(adamRdmService.getUserMemberVoByUid(userInfoVo.getUid()));
// }
// loginInfoVo.setWechatOpenid(wechatOpenid);
// loginInfoVo.setWechatUnionid(wechatUnionid);
//
// log.info(UserPathDto.setData(toRegister ? "注册" : "登录", ServletUtils.getRequest().getParameterMap(), loginInfoVo));
//// return ResponseDto.success(loginInfoVo.desensitize(reviewUserInfo).finalRating());
// return this.loginVoResponseProcessing(loginInfoVo);
// }
@ApiOperationSupport(order = 6)
@ApiOperation(value = "第三方账号登录")
......@@ -323,6 +323,52 @@ public class AdamLoginController {
return this.loginVoResponseProcessing(loginInfoVo);
}
@ApiOperationSupport(order = 7)
@ApiOperation(value = "手机号静默登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "mobile", value = "手机号"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "otp", value = "临时票据"),
})
@PostMapping(value = {"login/silent_mobile"})
public ResponseDto<AdamLoginInfoVo> loginBySilentMobile(@Pattern(regexp = "\\d{11}", message = "手机号格式有误")
@NotBlank(message = "手机号不能为空")
@RequestParam String mobile,
@NotBlank(message = "临时票据不能为空")
@RequestParam String otp) {
log.info("login by silent for mobile:{},{}", mobile, otp);
long reql = 0, l = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
String otpDecrypt = null;
try {
otpDecrypt = DESUtils.DES().decrypt(otp);
reql = Long.parseLong(otpDecrypt.substring(11));
} catch (Exception e) {
}
if (l - reql > 10 || (null != otpDecrypt && !otpDecrypt.substring(0, 11).equals(mobile))) {
log.error("login by silent for mobile:{},{}/{},{}-{}", mobile, otp, otpDecrypt, l, reql);
return ResponseDto.failure(ErrorMapping.get("10005"));
}
String uid = adamRdmService.getUidByMobile(mobile);
boolean toRegister = StringUtils.isEmpty(uid);
AdamUserInfoVo userInfoVo = toRegister ? adamUserService.register(mobile) : adamRdmService.getUserInfoVoByUid(uid);
if (!toRegister && (null == userInfoVo || userInfoVo.getState() == 2)) {
log.warn("Cancelled mobile:{}", mobile);
return ResponseDto.failure(ErrorMapping.get("10024"));
}
AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
loginInfoVo.setToken(this.ssoProcess(userInfoVo));
loginInfoVo.setUserInfo(userInfoVo);
if (!toRegister) {
loginInfoVo.setUserMemberVo(adamRdmService.getUserMemberVoByUid(userInfoVo.getUid()));
}
log.info(UserPathDto.setData(toRegister ? "注册" : "登录", ServletUtils.getRequest().getParameterMap(), loginInfoVo));
return this.loginVoResponseProcessing(loginInfoVo);
}
@ApiOperationSupport(order = 7)
@ApiOperation(value = "登出")
@PostMapping(value = {"out"})
......
......@@ -246,11 +246,17 @@ public class AdamRdmService {
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
String respStr = IdentityUtils.aliThird(name, idCard);
String respStr = IdentityUtils.aliThird(name, idCard), respErrorCode = null;
JsonNode respJNode = JsonUtils.fromJson(respStr, JsonNode.class);
if (null == respJNode || !"0".equals(respJNode.get("error_code").asText())) {
if (null == respJNode || !"0".equals(respErrorCode = String.valueOf(respJNode.get("error_code")))) {
log.info("###实名认证失败[{}]", respStr);
this.setCertificationJunk(1, idCard, name);
// this.setCertificationJunk(1, idCard, name);
if (!StringUtils.isEmpty(respErrorCode) && org.apache.commons.lang3.StringUtils.indexOf("3000290033", respErrorCode) < 0) {
// 认证服务商'30002'、'90033'为运营商导致的失败,这里不做缓存标记
this.setCertificationJunk(1, idCard, name);
}
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("10102");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
......
......@@ -83,7 +83,7 @@ public class AdamUserInfoServiceImpl implements IAdamUserInfoService {
JSONObject jsonObject = null;
try {
// 138cef91a62088bd3ef329fa3a6176cb18a > 138CEF91A62088BD3EF329FA3A6176CB18A > IM@zhengzai
String result = easemobUtil.createUser(existUserInfoVo.getUid(), ppwd, existUserInfoVo.getNickname());
String result = easemobUtil.createUser(existUserInfoVo.getUid(), ppwd, parameter.getNickname());
jsonObject = JSONObject.parseObject(result);
} catch (Exception e) {
log.error("###编辑资料:注册IM异常[uid:{},mobile:{}]", existUserInfoVo.getUid(), existUserInfoVo.getMobile());
......
import com.liquidnet.commons.lang.util.DESUtils;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.IdentityUtils;
import lombok.SneakyThrows;
import org.junit.Test;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Scanner;
public class TestAdam {
......@@ -70,6 +75,15 @@ public class TestAdam {
System.out.println(IdentityUtils.aliThird("徐佳颖", "429004200001202586"));
}
@SneakyThrows
@Test
public void testLoginBySilentMobile() {
String mobile = "15811009011";
String otp = DESUtils.DES().encrypt(mobile + LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
String post = HttpUtil.post("http://testadam.zhengzai.tv/adam/login/silent_mobile?mobile=15811009011&otp=" + otp, null);
System.out.println(post);
}
@Test
public void testTmp() {
......
use prod_ln_scene;
#创建集合
db.createCollection("ChimeUserInfoVo");
db.createCollection("ChimeUserOperLogVo");
#创建索引
db.ChimeUserInfoVo.createIndex({userId:"hashed"});
......@@ -9,7 +9,10 @@ db.ChimeUserInfoVo.createIndex({sex:"hashed"});
db.ChimeUserInfoVo.createIndex( {"userTagsVoList.tagCode": 1});
db.ChimeUserInfoVo.createIndex({joinPerformanceId:"hashed"});
db.ChimeUserOperLogVo.createIndex({currentUserId:"hashed"});
#创建分片
sh.enableSharding("prod_ln_scene");
sh.shardCollection("prod_ln_scene.ChimeUserInfoVo",{"userId":"hashed"});
sh.shardCollection("prod_ln_scene.ChimeUserOperLogVo",{"currentUserId":"hashed"});
package com.liquidnet.service.chime.service.impl;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.adam.dto.rsc.AdamChimeUinfoDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.chime.biz.ChimeUserBiz;
import com.liquidnet.service.chime.constant.ChimeConstant;
import com.liquidnet.service.chime.dto.*;
import com.liquidnet.service.chime.dto.ChimeUserInfoDto;
import com.liquidnet.service.chime.dto.ChimeUserRegisterReqDto;
import com.liquidnet.service.chime.dto.ChimeUserTagDto;
import com.liquidnet.service.chime.dto.ChimeUserUpdateReqDto;
import com.liquidnet.service.chime.service.IChimeUserService;
import com.liquidnet.service.chime.utils.DataUtils;
import com.liquidnet.service.chime.utils.DoTaskUtils;
......@@ -16,13 +21,10 @@ import com.liquidnet.service.chime.vo.mongo.ChimeUserOperLogVo;
import com.liquidnet.service.chime.vo.mongo.ChimeUserTagsMappingVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.MultiValueMap;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
/**
......@@ -156,8 +158,8 @@ public class ChimeUserServiceImpl implements IChimeUserService {
chimeUserOperLogVo.setOpType(ChimeConstant.LOG_USER_OPERATION_LIKE);
chimeUserOperLogVo.setCreatedAt(LocalDateTime.now().toString());
queueUtils.sendMsgByRedis(MQConst.ChimeQueue.USER_OPERATION_LIKE.getKey(), JsonUtils.toJson(chimeUserOperLogVo));
chimeUserOperLogVo.setOpType(ChimeConstant.LOG_USER_OPERATION_LIKE_MYSELF_CLICK);
queueUtils.sendMsgByRedis(MQConst.ChimeQueue.USER_OPERATION_LIKE.getKey(), JsonUtils.toJson(chimeUserOperLogVo));
// chimeUserOperLogVo.setOpType(ChimeConstant.LOG_USER_OPERATION_LIKE_MYSELF_CLICK);
// queueUtils.sendMsgByRedis(MQConst.ChimeQueue.USER_OPERATION_LIKE.getKey(), JsonUtils.toJson(chimeUserOperLogVo));
// doTaskUtils.userAddNum(currentUserId);
return true;
}
......@@ -171,8 +173,8 @@ public class ChimeUserServiceImpl implements IChimeUserService {
chimeUserOperLogVo.setOpType(ChimeConstant.LOG_USER_OPERATION_DISLIKE);
chimeUserOperLogVo.setCreatedAt(LocalDateTime.now().toString());
queueUtils.sendMsgByRedis(MQConst.ChimeQueue.USER_OPERATION_DISLIKE.getKey(), JsonUtils.toJson(chimeUserOperLogVo));
chimeUserOperLogVo.setOpType(ChimeConstant.LOG_USER_OPERATION_DISLIKE_MYSELF_CLICK);
queueUtils.sendMsgByRedis(MQConst.ChimeQueue.USER_OPERATION_DISLIKE.getKey(), JsonUtils.toJson(chimeUserOperLogVo));
// chimeUserOperLogVo.setOpType(ChimeConstant.LOG_USER_OPERATION_DISLIKE_MYSELF_CLICK);
// queueUtils.sendMsgByRedis(MQConst.ChimeQueue.USER_OPERATION_DISLIKE.getKey(), JsonUtils.toJson(chimeUserOperLogVo));
// doTaskUtils.userAddNum(currentUserId);
return true;
}
......
-- 快递模板表
drop TABLE if exists `kylin_express_module`;
CREATE TABLE `kylin_express_module`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`module_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'module_id',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '快件产品名称',
`product_code` smallint NOT NULL DEFAULT 0 COMMENT '产品编码',
`aging_type` varchar(255) NOT NULL DEFAULT '' COMMENT '时效类型',
`estimate_price_min` decimal(10, 2) NOT NULL DEFAULT 0 COMMENT '快递价格(预估)',
`estimate_price_max` decimal(10, 2) NOT NULL DEFAULT 0 COMMENT '快递价格(预估)',
`is_online` tinyint NOT NULL DEFAULT 0 COMMENT '是否上线 1未上线 2已上线',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
KEY `idx_kylin_module_id` (`module_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '快递模板表';
alter table kylin_performance_status add is_back_paper_ticket tinyint NOT NULL DEFAULT 0 COMMENT '快递票是否需要退回 0不需要 1需要' after is_refund_express;
\ No newline at end of file
package com.liquidnet.service.kylin.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.vo.KylinExpressModuleVo;
import com.liquidnet.service.kylin.service.IKylinExpressModuleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 快递模板表 前端控制器
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
@Api(tags = "快递模板")
@RestController
@RequestMapping("expressModule")
@Slf4j
public class KylinExpressModuleController {
@Autowired
private IKylinExpressModuleService expressModuleService;
@GetMapping("")
@ApiOperation("快递模板列表")
public ResponseDto<List<KylinExpressModuleVo>> expressList() {
try {
List<KylinExpressModuleVo> result = expressModuleService.expressList();
return ResponseDto.success(result);
} catch (Exception e) {
log.error("快递模板列表Error e{}", e);
return ResponseDto.success(new ArrayList<>());
}
}
}
package com.liquidnet.service.kylin.service.impl;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.KylinExpressModuleVo;
import com.liquidnet.service.kylin.entity.KylinExpressModule;
import com.liquidnet.service.kylin.mapper.KylinExpressModuleMapper;
import com.liquidnet.service.kylin.service.IKylinExpressModuleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 快递模板表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2021-11-15
*/
@Service
public class KylinExpressModuleServiceImpl implements IKylinExpressModuleService {
@Autowired
private RedisUtil redisUtil;
@Override
public List<KylinExpressModuleVo> expressList() {
String redisKey = KylinRedisConst.KYLIN_EXPRESS_MODULES;
Object obj = redisUtil.get(redisKey);
if (null == obj) {
return null;
} else {
return (List<KylinExpressModuleVo>) obj;
}
}
}
......@@ -29,6 +29,7 @@ import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Component
@Slf4j
......@@ -364,6 +365,7 @@ public class DataUtils {
query.fields().exclude("ticketTimeList");
query.fields().exclude("describeElectronic");
List<KylinPerformanceVo> toDayList = mongoTemplate.find(query, KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
List<String> roadShowId = toDayList.stream().filter(r -> !r.getRoadShowId().equals("0")).map(KylinPerformanceVo -> KylinPerformanceVo.getRoadShowId()).collect(Collectors.toList());
// 固定条件
Query queryT = getCommonWhere();
......@@ -374,7 +376,7 @@ public class DataUtils {
// 三天的
Calendar cal = Calendar.getInstance();
cal.setTime((Date) toDayTime.get("end"));
Date beforeDayEnd = DateUtil.getBeforeDayEnd(cal, 3);
Date beforeDayEnd = DateUtil.getBeforeDayEnd(cal, 2);
String threeDaysLaterStr = DateUtil.SDF_YMD_HMS.format(beforeDayEnd);
queryT.addCriteria(Criteria.where("sellTime").gte(toDayEndTimeStr).lt(threeDaysLaterStr));
......@@ -382,6 +384,7 @@ public class DataUtils {
queryT.fields().exclude("noticeImage");
queryT.fields().exclude("ticketTimeList");
queryT.fields().exclude("describeElectronic");
queryT.addCriteria(Criteria.where("roadShowId").nin(roadShowId));
List<KylinPerformanceVo> threeDaysList = mongoTemplate.find(queryT, KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
HashMap<String, Object> info = CollectionUtil.mapStringObject();
......
......@@ -5,12 +5,14 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.core.env.Environment;
import java.net.InetAddress;
import java.util.Arrays;
@Slf4j
@EnableFeignClients(basePackages = {"com.liquidnet"})
@SpringBootApplication(scanBasePackages = {"com.liquidnet"})
public class ServiceNotifyApplication implements CommandLineRunner {
@Autowired
......
......@@ -308,6 +308,11 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
}
entersVoList.add(adamEnters);
if (isStudent == 1) {
if (adamEnters.getType() != 1) {
orderUtils.changeSurplus(isPay, payOrderParam.getTicketId(), payOrderParam.getNumber());
orderUtils.backAdvanceCoupon(payOrderParam.getAdvanceCode(), uid);
return ResponseDto.failure(ErrorMapping.get("20031"));//不符合购买条件
}
int age = IDCard.getAgeByIdCard(adamEnters.getIdCard());
if (age > 25) {
orderUtils.changeSurplus(isPay, payOrderParam.getTicketId(), payOrderParam.getNumber());
......@@ -345,7 +350,8 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
log.error("Kylin Order Pay Error = {}", e);
if (isDownGeneral) {
orderUtils.changeSurplus(isPay, payOrderParam.getTicketId(), payOrderParam.getNumber());
// orderUtils.backAdvanceCoupon(payOrderParam.getAdvanceCode(), uid);
log.error("回滚库存");
orderUtils.backAdvanceCoupon(payOrderParam.getAdvanceCode(), uid);
for (AdamEntersVo enters : entersVoList) {
dataUtils.changeBuyInfo(uid, enters.getIdCard(), payOrderParam.getPerformanceId(), payOrderParam.getTicketId(), -1);
}
......
......@@ -34,6 +34,7 @@
20027=您已支付请刷新再试
20029=未选择支付方式
20030=券不可用
20031=不符合购买条件
#APP PARTNER
20101=添加失败
......
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.base.Joiner;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.candy.param.BackCouponParam;
import com.liquidnet.service.feign.stone.api.FeignStoneIntegralClient;
......@@ -271,9 +272,10 @@ public class KylinRefundsStatusServiceImpl {
}
}
}
// 退积分
feignStoneIntegralClient.de2111(orderInfo.getUserId(), refundCallbackParam.getRefundPrice().setScale(0, BigDecimal.ROUND_HALF_UP).intValue(), "演出订单退款:".concat(orderInfo.getPerformanceTitle()).concat(":").concat(orderInfo.getOrderCode().substring(orderInfo.getOrderCode().length() - 10)));
}
// 退积分
ResponseDto<String> de2111 = feignStoneIntegralClient.de2111(orderInfo.getUserId(), refundCallbackParam.getRefundPrice().setScale(0, BigDecimal.ROUND_DOWN).intValue(), "演出订单退款:".concat(orderInfo.getPerformanceTitle()).concat(":").concat(orderInfo.getOrderCode().substring(orderInfo.getOrderCode().length() - 10)));
log.info("订单退款回调退积分结果:[de2111={}]", de2111);
}
return true;
......
......@@ -18,9 +18,9 @@ db.StoneUserVo.createIndex({uid:"hashed"});
#创建分片
sh.enableSharding("prod_ln_scene");
sh.shardCollection("prod_ln_scene.StoneOrderListVo",{"orderId":"hashed"});
sh.shardCollection("prod_ln_scene.StoneOrderListVo",{"uid":"hashed"});
sh.shardCollection("prod_ln_scene.StoneScoreItems",{"itemId":"hashed"});
sh.shardCollection("prod_ln_scene.StoneScoreLogs",{"logsId":"hashed"});
sh.shardCollection("prod_ln_scene.StoneScoreLogs",{"uid":"hashed"});
sh.shardCollection("prod_ln_scene.StoneUserVo",{"uid":"hashed"});
......@@ -84,6 +84,20 @@ public class StoneUserController {
return ResponseDto.success(stoneScoreLogsService.inScore(uid, score, 2111, content));
}
@PostMapping("logs/in2112")
@ApiOperation("增加积分")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "uid", value = "用户Id", example = ""),
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "score", value = "积分", example = ""),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "content", value = "内容", example = ""),
})
public ResponseDto<String> inScore2112(@RequestParam(value = "uid", required = true) String uid,
@RequestParam(value = "score", required = true) Integer score,
@RequestParam(value = "content", required = true) String content) {
return ResponseDto.success(stoneScoreLogsService.inScore(uid, score, 2112, content));
}
@PostMapping("logs/de2111")
@ApiOperation("减少积分")
@ApiResponse(code = 200, message = "接口返回对象参数")
......
......@@ -282,8 +282,8 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
logs.setUid(uid);
logs.setScore(BigDecimal.valueOf(score));
logs.setCreatedAt(LocalDateTime.now());
stoneMongoUtils.logCreate(logs);
stoneRedisUtils.addLogsList(uid,logs);
stoneMongoUtils.logCreate(logs);
//mysql 入库 积分日志
queueUtils.sendMsgByRedis(MQConst.StoneQueue.STONE_INSERT_LOGS.getKey(),
SqlMapping.get("stone_score_logs.insert", logs.getLogsId(), logs.getUid(), logs.getScore(), logs.getContent(), logs.getReason(), getOverdueAt(), LocalDateTime.now())
......@@ -302,8 +302,8 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
logs.setUid(uid);
logs.setScore(BigDecimal.valueOf(score).negate());
logs.setCreatedAt(LocalDateTime.now());
stoneMongoUtils.logCreate(logs);
stoneRedisUtils.addLogsList(uid,logs);
stoneMongoUtils.logCreate(logs);
//mysql 入库 积分日志
queueUtils.sendMsgByRedis(MQConst.StoneQueue.STONE_INSERT_LOGS.getKey(),
SqlMapping.get("stone_score_logs.insert", logs.getLogsId(), logs.getUid(), logs.getScore(), logs.getContent(), logs.getReason(), getOverdueAt(), LocalDateTime.now())
......
......@@ -312,4 +312,15 @@ public class StoneRedisUtils {
return (List<StoneOrderListVo>) obj;
}
}
public boolean lockUid(String uid){
String redisKey = StoneConstant.LOCK.concat(uid);
return redisUtil.lock(uid,1,1);
}
public void unLockUid(String uid){
String redisKey = StoneConstant.LOCK.concat(uid);
redisUtil.uLock(redisKey);
}
}
create database if not exists ln_scene character set utf8mb4 collate utf8mb4_unicode_ci;
-- >>------------------------------------------------------------------------------------
use ln_scene;
-- 积分活动表
drop TABLE if exists `sweet_integral_activity`;
CREATE TABLE `sweet_integral_activity`
......
......@@ -2,8 +2,11 @@ package com.liquidnet.service.sweet.config;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl;
import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
import com.liquidnet.service.sweet.handler.ApplySubscribeHandler;
import com.liquidnet.service.sweet.handler.ApplyUnsubscribeHandler;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -71,9 +74,16 @@ public class WechatMaConfigure {
private WxMaService wxMaAppletFiveService;
private WxMaService wxMaAppletMdskService;
private WxMaMessageRouter wxMaZhengzaiMessageRouter;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private ApplySubscribeHandler unsubscribeHandler;
@Autowired
private ApplyUnsubscribeHandler subscribeHandler;
@PostConstruct
public void init() {
wxMaAppletZhengzaiService = new WxMaServiceImpl() {
......@@ -125,6 +135,7 @@ public class WechatMaConfigure {
this.setWxMaConfig(wxMaDefaultConfig);
}
};
wxMaZhengzaiMessageRouter = new WxMaMessageRouter(wxMaAppletZhengzaiService);
}
public WxMaService getWxMaService(Integer anum) {
......@@ -154,4 +165,32 @@ public class WechatMaConfigure {
}
return "";
}
public WxMaMessageRouter getWxMaMessageRouter(Integer pnum) {
switch (pnum) {
case 4:
return wxMaZhengzaiMessageRouter;
}
return null;
}
public WxMaMessageRouter messageRouter(Integer type) {
WxMaMessageRouter router = getWxMaMessageRouter(type);
// 消息去重
// router.setMessageDuplicateChecker(wxMessageInMemoryDuplicateChecker);
// 关注事件
router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.SUBSCRIBE)
.handler(subscribeHandler)
.end();
// 取消关注事件
router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.UNSUBSCRIBE)
.handler(unsubscribeHandler)
.end();
return router;
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.sweet.service.impl.SweetWechatApplyEventPushServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Api(tags = "小程序-事件推送")
@RestController
@RequestMapping("/applyEventPush")
@Slf4j
public class SweetWechatApplyEventPushController {
@Autowired
private SweetWechatApplyEventPushServiceImpl pushService;
// @GetMapping(produces = "text/plain;charset=utf-8")
@GetMapping("{type}")
@ApiOperation("验签调用")
public String authGet(
@PathVariable Integer type,
@RequestParam(name = "signature", required = false) String signature,
@RequestParam(name = "timestamp", required = false) String timestamp,
@RequestParam(name = "nonce", required = false) String nonce,
@RequestParam(name = "echostr", required = false) String echostr
) {
log.info("\n接收到来自微信服务器的认证消息:signature = [{}], timestamp = [{}], nonce = [{}], echostr = [{}]",
signature, timestamp, nonce, echostr);
if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) {
throw new IllegalArgumentException("请求参数非法,请核实!");
}
return pushService.authGet(type, timestamp, nonce, signature, echostr);
}
// @PostMapping(value = "{type}", produces = "application/xml; charset=UTF-8")
@PostMapping("{type}")
@ApiOperation("用户动作回调")
public String post(
@PathVariable Integer type,
@RequestBody String requestBody,
@RequestParam(name = "msg_signature", required = false) String msgSignature,
@RequestParam(name = "encrypt_type", required = false) String encryptType,
@RequestParam(name = "signature", required = false) String signature,
@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce
) {
log.info("\n接收微信请求:[msg_signature=[{}], encrypt_type=[{}], signature=[{}]," +
" timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
msgSignature, encryptType, signature, timestamp, nonce, requestBody);
return pushService.post(type, requestBody, msgSignature, encryptType, signature, timestamp, nonce);
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo;
......@@ -10,10 +11,7 @@ import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@Api(tags = "小程序-公众号登陆相关")
@RestController
......@@ -51,6 +49,16 @@ public class SweetWechatLoginController {
return sweetLoginService.wxaCode2Session(jsCode, type);
}
@ApiOperation(value = "小程序静默登陆")
@GetMapping(value = {"userInfoMa"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "jsCode", value = "微信jsCode", required = true),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1草莓 2五百里 3mdsk 4正在", required = true)
})
public ResponseDto<AdamLoginInfoVo> userInfoMa(@RequestParam String jsCode, @RequestParam Integer type) {
return sweetLoginService.userInfoMa(jsCode, type);
}
@ApiOperation(value = "服务号获取openid", notes = "这里仅用于获取OPENID使用")
@GetMapping(value = {"mpOpenId"})
@ApiImplicitParams({
......
package com.liquidnet.service.sweet.controller;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.service.impl.SweetWechatUsersServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Api(tags = "小程序-用户相关")
@RestController
@RequestMapping("/wechatUsers")
@Slf4j
public class SweetWechatUsersController {
@Autowired
private SweetWechatUsersServiceImpl usersService;
@PostMapping("doTask")
@ApiOperation("做积分任务")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "4关注任务")
})
public ResponseDto doTask(@RequestParam Integer type) {
String phone = (String) CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_MOBILE);
String userId = (String) CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_SUB);
return usersService.doTask(type, phone, userId);
}
}
......@@ -29,7 +29,7 @@ public class RedisDataController {
* basicServices
* @return
*/
@PostMapping("basicServices/versions")
/*@PostMapping("basicServices/versions")
@ApiOperation("basicServices版本控制数据迁移-可以通过后台编辑")
public ResponseDto<Boolean> basicServicesVersions() {
Boolean result = redisDataService.basicServicesVersions();
......@@ -43,10 +43,10 @@ public class RedisDataController {
return ResponseDto.success(result);
}
/**
*//**
* kylin
* @return
*/
*//*
@PostMapping("kylin/banner")
@ApiOperation("kylin-banner数据迁移-可以通过后台编辑")
public ResponseDto<Boolean> kylinBanner() {
......@@ -54,10 +54,10 @@ public class RedisDataController {
return ResponseDto.success(result);
}
/**
*//**
* sweet
* @return
*/
*//*
@PostMapping("sweet/accessToken")
@ApiOperation("sweet-AccessToken数据迁移-可不迁可自动生成")
public ResponseDto<Boolean> sweetAccessToken() {
......@@ -91,12 +91,19 @@ public class RedisDataController {
public ResponseDto<Boolean> sweetUnionIdStr() {
Boolean result = redisDataService.sweetUnionIdStr();
return ResponseDto.success(result);
}*/
@PostMapping("sweet/cityVote3")
@ApiOperation("sweet-cityVote3数据迁移")
public ResponseDto<Boolean> cityVote3() {
Boolean result = redisDataService.cityVote3();
return ResponseDto.success(result);
}
@PostMapping("sweet/cityVote")
@ApiOperation("sweet-cityVote数据迁移")
public ResponseDto<Boolean> cityVote() {
Boolean result = redisDataService.cityVote();
@PostMapping("sweet/cityVote4")
@ApiOperation("sweet-cityVote4数据迁移")
public ResponseDto<Boolean> cityVote4() {
Boolean result = redisDataService.cityVote4();
return ResponseDto.success(result);
}
......
package com.liquidnet.service.sweet.handler;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaMessage;
import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
import cn.binarywang.wx.miniapp.message.WxMaXmlOutMessage;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.service.impl.SweetWechatTemplateServiceImpl;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.WechatUsersRedisUtils;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* <p>
* 关注
* </p>
*
* @author jiangxiulong
* @since 2021-07-31 5:06 下午
*/
@Component
@Slf4j
public class ApplySubscribeHandler implements WxMaMessageHandler {
@Autowired
private WechatUsersRedisUtils redisUtils;
@Autowired
private QueueUtils queueUtils;
@Autowired
WechatMpConfigure wechatMpConfigure;
@Autowired
private SweetWechatTemplateServiceImpl sweetWechatTemplateService;
@Override
public WxMaXmlOutMessage handle(WxMaMessage message, Map<String, Object> context, WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
return null;
}
}
package com.liquidnet.service.sweet.handler;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaMessage;
import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
import cn.binarywang.wx.miniapp.message.WxMaXmlOutMessage;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.WechatUsersRedisUtils;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* <p>
* 取消关注
* </p>
*
* @author jiangxiulong
* @since 2021-07-31 5:08 下午
*/
@Component
@Slf4j
public class ApplyUnsubscribeHandler implements WxMaMessageHandler {
@Autowired
private WechatUsersRedisUtils redisUtils;
@Autowired
private QueueUtils queueUtils;
@Autowired
WechatMpConfigure wechatMpConfigure;
@Override
public WxMaXmlOutMessage handle(WxMaMessage message, Map<String, Object> context, WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
return null;
}
}
......@@ -165,7 +165,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
Integer prizeType = sweetIntegralActivityPrize.getPrizeType();
if (prizeType == 2) {// 中奖积分
// 增加积分
ResponseDto<String> in2111 = feignStoneIntegralClient.in2111(userId, sweetIntegralActivityPrize.getPrizeTypeNum(), integralActivity.getActivityTitle());
ResponseDto<String> in2111 = feignStoneIntegralClient.in2112(userId, sweetIntegralActivityPrize.getPrizeTypeNum(), integralActivity.getActivityTitle());
log.info("中奖加积分返回值情况 in2111:{}", in2111);
// 发放状态
receivingStatus = 2;
......@@ -295,7 +295,22 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
info.setUpdatedAt(nowTime);
}
}
redisDataUtils.setIntegralActivityDrawList(drawVo.getUserId(), drawVo.getIntegralActivityId(), integralActivityDrawList);
redisDataUtils.setIntegralActivityDrawInList(drawVo.getUserId(), drawVo.getIntegralActivityId(), integralActivityDrawList);
LinkedList<IntegralActivityDrawVo> integralActivityDrawList2 = redisDataUtils.getIntegralActivityDrawList(2, drawVo.getUserId(), drawVo.getIntegralActivityId());
for (IntegralActivityDrawVo info : integralActivityDrawList2) {
if (info.getDrawId().equals(drawId)) {
info.setReceivingAddressesId(receivingAddressesId);
info.setReceivingName(receivingName);
info.setReceivingPhone(receivingPhone);
info.setReceivingProvince(receivingProvince);
info.setReceivingCity(receivingCity);
info.setReceivingCounty(receivingCounty);
info.setReceivingAddress(receivingAddress);
info.setUpdatedAt(nowTime);
}
}
redisDataUtils.setIntegralActivityDrawList(drawVo.getUserId(), drawVo.getIntegralActivityId(), integralActivityDrawList2);
// mysql
LinkedList<String> sqls = CollectionUtil.linkedListString();
......
package com.liquidnet.service.sweet.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaMessage;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.utils.WechatSignUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
/**
* <p>
* 公众号动作回调 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-07-31
*/
@Service
@Slf4j
public class SweetWechatApplyEventPushServiceImpl {
@Autowired
WechatMaConfigure wechatMaConfigure;
@Autowired
private WechatSignUtils wechatSignUtils;
public String authGet(Integer type, String timestamp, String nonce, String signature, String echostr) {
if (wechatSignUtils.checkSignature(signature, timestamp, nonce)) {
log.info("验签通过");
return echostr;
} else {
log.info("验签未通过");
return "非法请求";
}
}
public String post(Integer type, String requestBody, String msgSignature, String encryptType, String signature, String timestamp, String nonce) {
WxMaService wxService = wechatMaConfigure.getWxMaService(type);
final boolean isJson = Objects.equals(wxService.getWxMaConfig().getMsgDataFormat(),
WxMaConstants.MsgDataFormat.XML);
if (StringUtils.isBlank(encryptType)) {
// 明文传输的消息
WxMaMessage inMessage;
if (isJson) {
inMessage = WxMaMessage.fromJson(requestBody);
} else {//xml
inMessage = WxMaMessage.fromXml(requestBody);
log.info("inMessage{}",inMessage);
}
wechatMaConfigure.messageRouter(type).route(inMessage);
return "success";
}
if ("aes".equals(encryptType)) {
// 是aes加密的消息
WxMaMessage inMessage;
if (isJson) {
inMessage = WxMaMessage.fromEncryptedJson(requestBody, wxService.getWxMaConfig());
} else {//xml
inMessage = WxMaMessage.fromEncryptedXml(requestBody, wxService.getWxMaConfig(),
timestamp, nonce, msgSignature);
}
wechatMaConfigure.messageRouter(type).route(inMessage);
return "success";
}
throw new RuntimeException("不可识别的加密类型:" + encryptType);
}
}
......@@ -3,7 +3,9 @@ package com.liquidnet.service.sweet.service.impl;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DESUtils;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
......@@ -23,6 +25,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Objects;
......@@ -162,4 +166,20 @@ public class SweetWechatLoginServiceImpl {
}
}
public ResponseDto<AdamLoginInfoVo> userInfoMa(String jsCode, Integer type) {
try {
WxMaJscode2SessionResult sessionResult = sweetWechatService.sessionInfo(jsCode, type);
SweetAppletUsersVo sweetAppletUsersVo = redisUtils.getSweetAppletUsersOfUnionId(sessionResult.getUnionid());
if (null == sweetAppletUsersVo) {
return ResponseDto.failure("90081", "获取用户信息失败");
}
String purePhone = sweetAppletUsersVo.getPurePhoneNumber();
String otp = DESUtils.DES().encrypt(purePhone + LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
ResponseDto<AdamLoginInfoVo> adamUserInfoVoResponseDto = feignAdamBaseClient.loginBySilentMobile(purePhone, otp);
return adamUserInfoVoResponseDto;
} catch (Exception e) {
log.error("userInfoMaError Exception:{}", e);
return ResponseDto.failure("获取用户信息失败~");
}
}
}
package com.liquidnet.service.sweet.service.impl;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.feign.stone.api.FeignStoneIntegralClient;
import com.liquidnet.service.sweet.entity.SweetWechatUsers;
import com.liquidnet.service.sweet.mapper.SweetWechatUsersMapper;
import com.liquidnet.service.sweet.service.ISweetWechatUsersService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.sweet.utils.WechatUsersRedisUtils;
import com.liquidnet.service.sweet.vo.SweetAppletUsersVo;
import com.liquidnet.service.sweet.vo.SweetWechatUsersVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
/**
* <p>
* 正在现场服务号关注事件储存用户信息表 服务实现类
......@@ -15,6 +24,29 @@ import org.springframework.stereotype.Service;
* @since 2021-11-05
*/
@Service
@Slf4j
public class SweetWechatUsersServiceImpl extends ServiceImpl<SweetWechatUsersMapper, SweetWechatUsers> implements ISweetWechatUsersService {
@Autowired
private FeignStoneIntegralClient feignStoneIntegralClient;
@Autowired
private WechatUsersRedisUtils redisUtils;
@Override
public ResponseDto doTask(Integer type, String phone, String userId) {
log.info("SweetDoTask param [type:{}, phone:{},, userId:{}]", type, phone, userId);
SweetAppletUsersVo sweetAppletUsers = redisUtils.getSweetAppletUsersOfPhone(phone);
if (null == sweetAppletUsers) {
return ResponseDto.failure("该账户还未使用过小程序登陆");
}
SweetWechatUsersVo sweetWechatUsersSky = redisUtils.getSweetWechatUsersOfUnionId(sweetAppletUsers.getUnionId(), 2);
if (null != sweetWechatUsersSky) {
ResponseDto<HashMap<String, Object>> responseDto = feignStoneIntegralClient.doTask(type, userId);
log.info("SweetDoTask res:{}", responseDto);
return ResponseDto.success();
} else {
return ResponseDto.failure("您还未关注公众号");
}
}
}
......@@ -12,6 +12,7 @@ import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.admin.ZhengzaiAppVersionsVo;
import com.liquidnet.service.kylin.entity.KylinBanners;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.param.SweetCityVoteParam;
import com.liquidnet.service.sweet.vo.SweetAnswerVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -31,7 +32,7 @@ public class RedisDataServiceImpl {
@Autowired
private RedisUtil redisUtil;
private static final JedisPool jedisPool;
/*private static final JedisPool jedisPool;
private static final ObjectMapper toObjMapper;
static {
......@@ -49,7 +50,7 @@ public class RedisDataServiceImpl {
private Jedis getRedis() {
Jedis resource = jedisPool.getResource();
resource.auth("NBs$%6hW"); // 线上
resource.auth("java:1ICjLqCyMPk7"); // 线上
// resource.auth("PO@B!Iud32"); // test
resource.select(15);
return resource;
......@@ -212,25 +213,46 @@ public class RedisDataServiceImpl {
log.error("kylinBannerError", e);
return false;
}
}
}*/
public Boolean cityVote() {
public Boolean cityVote3() {
try {
// RedisTemplate<String, Object> redis = redisUtil.getRedisTemplateByDb(15);
Jedis redis = getRedis();
String redisKey = "sweet:cityVote3:cityCode*";
Set<String> keys = redis.keys(redisKey);
Set<String> keys = redisUtil.getRedisTemplateByDb(15).keys(redisKey);
for (String key : keys) {
String value = redis.get(key);
Integer value = (Integer) redisUtil.getDB15RedisGet(key);
redisUtil.set(key, value);
}
String redisKey2 = "sweet:cityVote3:user*";
Set<String> keys2 = redis.keys(redisKey2);
Set<String> keys2 = redisUtil.getRedisTemplateByDb(15).keys(redisKey2);
for (String key : keys2) {
String value = redis.get(key);
SweetCityVoteParam value = (SweetCityVoteParam) redisUtil.getDB15RedisGet(key);
redisUtil.set(key, value);
}
return true;
} catch (Exception e) {
log.error("sweetUnionIdStrError", e);
return false;
}
}
public Boolean cityVote4() {
try {
String redisKey = "sweet:cityVote4:cityCode*";
Set<String> keys = redisUtil.getRedisTemplateByDb(15).keys(redisKey);
for (String key : keys) {
Integer value = (Integer) redisUtil.getDB15RedisGet(key);
redisUtil.set(key, value);
}
String redisKey2 = "sweet:cityVote4:user*";
Set<String> keys2 = redisUtil.getRedisTemplateByDb(15).keys(redisKey2);
for (String key : keys2) {
SweetCityVoteParam value = (SweetCityVoteParam) redisUtil.getDB15RedisGet(key);
redisUtil.set(key, value);
}
......
......@@ -11,7 +11,11 @@ import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.feign.adam.api.FeignAdamBaseClient;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.entity.SweetAppletUser;
import com.liquidnet.service.sweet.entity.SweetAppletUsers;
import com.liquidnet.service.sweet.entity.SweetWechatUsers;
import com.liquidnet.service.sweet.mapper.SweetAppletUserMapper;
import com.liquidnet.service.sweet.mapper.SweetAppletUsersMapper;
import com.liquidnet.service.sweet.mapper.SweetWechatUsersMapper;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.WechatUsersRedisUtils;
import com.liquidnet.service.sweet.vo.SweetAppletUsersVo;
......@@ -44,6 +48,12 @@ public class UserDataServiceImpl {
@Autowired
private FeignAdamBaseClient feignAdamBaseClient;
@Autowired
private SweetAppletUsersMapper appletUsersMapper;
@Autowired
SweetWechatUsersMapper sweetWechatUsersMapper;
public void userInfo(Integer type) throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(type);
......@@ -95,6 +105,24 @@ public class UserDataServiceImpl {
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_USER_INSERT.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
/*SweetWechatUsers sweetWechatUsers1 = new SweetWechatUsers();
sweetWechatUsers1.setWechatUserId(sweetWechatUsersVo.getWechatUserId());
sweetWechatUsers1.setType(type);
sweetWechatUsers1.setOpenId(sweetWechatUsersVo.getOpenId());
sweetWechatUsers1.setUnionId(sweetWechatUsersVo.getUnionId());
sweetWechatUsers1.setNickname(sweetWechatUsersVo.getNickname());
sweetWechatUsers1.setSexDesc(sweetWechatUsersVo.getSexDesc());
sweetWechatUsers1.setSex(sweetWechatUsersVo.getSex());
sweetWechatUsers1.setHeadImgUrl(sweetWechatUsersVo.getHeadImgUrl());
sweetWechatUsers1.setLanguage(sweetWechatUsersVo.getLanguage());
sweetWechatUsers1.setCountry(sweetWechatUsersVo.getCountry());
sweetWechatUsers1.setProvince(sweetWechatUsersVo.getProvince());
sweetWechatUsers1.setCity(sweetWechatUsersVo.getCity());
sweetWechatUsers1.setSubscribeTime(sweetWechatUsersVo.getSubscribeTime());
sweetWechatUsers1.setSubscribeScene(sweetWechatUsersVo.getSubscribeScene());
sweetWechatUsersMapper.insert(sweetWechatUsers1);*/
// 入缓存
redisUtils.setSweetWechatUsers(sweetWechatUsersVo);
}
......@@ -142,6 +170,24 @@ public class UserDataServiceImpl {
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_USER_INSERT.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
/*SweetWechatUsers sweetWechatUsers1 = new SweetWechatUsers();
sweetWechatUsers1.setWechatUserId(sweetWechatUsersVo.getWechatUserId());
sweetWechatUsers1.setType(type);
sweetWechatUsers1.setOpenId(sweetWechatUsersVo.getOpenId());
sweetWechatUsers1.setUnionId(sweetWechatUsersVo.getUnionId());
sweetWechatUsers1.setNickname(sweetWechatUsersVo.getNickname());
sweetWechatUsers1.setSexDesc(sweetWechatUsersVo.getSexDesc());
sweetWechatUsers1.setSex(sweetWechatUsersVo.getSex());
sweetWechatUsers1.setHeadImgUrl(sweetWechatUsersVo.getHeadImgUrl());
sweetWechatUsers1.setLanguage(sweetWechatUsersVo.getLanguage());
sweetWechatUsers1.setCountry(sweetWechatUsersVo.getCountry());
sweetWechatUsers1.setProvince(sweetWechatUsersVo.getProvince());
sweetWechatUsers1.setCity(sweetWechatUsersVo.getCity());
sweetWechatUsers1.setSubscribeTime(sweetWechatUsersVo.getSubscribeTime());
sweetWechatUsers1.setSubscribeScene(sweetWechatUsersVo.getSubscribeScene());
sweetWechatUsersMapper.insert(sweetWechatUsers1);*/
// 入缓存
redisUtils.setSweetWechatUsers(sweetWechatUsersVo);
}
......@@ -159,29 +205,44 @@ public class UserDataServiceImpl {
for (SweetAppletUser info : sweetAppletUsers) {
SweetAppletUsersVo oldInfo = redisUtils.getSweetAppletUsersOfPhone(info.getGetPurePhoneNumber());
if (null == oldInfo) {
ResponseDto<AdamUserInfoVo> userInfoVo = feignAdamBaseClient.registerByMobile(info.getGetPurePhoneNumber());
AdamUserInfoVo userInfoVoData = userInfoVo.getData();
String userId = userInfoVoData.getUid();
LinkedList<String> sqlsA = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqlsA.add(SqlMapping.get("sweet_applet_users.insert"));
sqlsDataA.add(new Object[]{
info.getUserId(), userId, info.getOpenId(), info.getUnionId(), info.getGetPhoneNumber(), info.getGetPurePhoneNumber(), info.getGetCountryCode(), info.getType()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_USER_INSERT.getKey(),
SqlMapping.gets(sqlsA, sqlsDataA));
SweetAppletUsersVo sweetAppletUsersVo = SweetAppletUsersVo.getNew();
sweetAppletUsersVo.setAppletUserId(info.getUserId());
sweetAppletUsersVo.setUserId(userId);
sweetAppletUsersVo.setOpenId(info.getOpenId());
sweetAppletUsersVo.setUnionId(info.getUnionId());
sweetAppletUsersVo.setPhoneNumber(info.getGetPhoneNumber());
sweetAppletUsersVo.setPurePhoneNumber(info.getGetPurePhoneNumber());
sweetAppletUsersVo.setCountryCode(info.getGetCountryCode());
sweetAppletUsersVo.setType(info.getType());
redisUtils.setSweetAppletUsers(sweetAppletUsersVo);
try {
ResponseDto<AdamUserInfoVo> userInfoVo = feignAdamBaseClient.registerByMobile(info.getGetPurePhoneNumber());
AdamUserInfoVo userInfoVoData = userInfoVo.getData();
String userId = userInfoVoData.getUid();
LinkedList<String> sqlsA = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqlsA.add(SqlMapping.get("sweet_applet_users.insert"));
sqlsDataA.add(new Object[]{
info.getUserId(), userId, info.getOpenId(), info.getUnionId(), info.getGetPhoneNumber(), info.getGetPurePhoneNumber(), info.getGetCountryCode(), info.getType()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_USER_INSERT.getKey(),
SqlMapping.gets(sqlsA, sqlsDataA));
/*SweetAppletUsers sweetAppletUsers1 = new SweetAppletUsers();
sweetAppletUsers1.setAppletUserId(info.getUserId());
sweetAppletUsers1.setUserId(userId);
sweetAppletUsers1.setOpenId(info.getOpenId());
sweetAppletUsers1.setUnionId(info.getUnionId());
sweetAppletUsers1.setPhoneNumber(info.getGetPhoneNumber());
sweetAppletUsers1.setPurePhoneNumber(info.getGetPurePhoneNumber());
sweetAppletUsers1.setCountryCode(info.getGetCountryCode());
sweetAppletUsers1.setType(info.getType());
appletUsersMapper.insert(sweetAppletUsers1);*/
SweetAppletUsersVo sweetAppletUsersVo = SweetAppletUsersVo.getNew();
sweetAppletUsersVo.setAppletUserId(info.getUserId());
sweetAppletUsersVo.setUserId(userId);
sweetAppletUsersVo.setOpenId(info.getOpenId());
sweetAppletUsersVo.setUnionId(info.getUnionId());
sweetAppletUsersVo.setPhoneNumber(info.getGetPhoneNumber());
sweetAppletUsersVo.setPurePhoneNumber(info.getGetPurePhoneNumber());
sweetAppletUsersVo.setCountryCode(info.getGetCountryCode());
sweetAppletUsersVo.setType(info.getType());
redisUtils.setSweetAppletUsers(sweetAppletUsersVo);
} catch (Exception e) {
log.error("feignAdamBaseClientException phone:{}, e:{}", info.getGetPurePhoneNumber(), e);
}
}
}
}
......
......@@ -664,7 +664,7 @@ public class RedisDataUtils {
}
}
public void setIntegralActivityDrawList(String uid, String integralActivityId, LinkedList<IntegralActivityDrawVo> integralActivityDrawList) {
public void setIntegralActivityDrawInList(String uid, String integralActivityId, LinkedList<IntegralActivityDrawVo> integralActivityDrawList) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_IN_USER
.concat(integralActivityId)
.concat(SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_USER_KEY)
......@@ -672,6 +672,14 @@ public class RedisDataUtils {
redisUtil.set(redisKey, integralActivityDrawList);
}
public void setIntegralActivityDrawList(String uid, String integralActivityId, LinkedList<IntegralActivityDrawVo> integralActivityDrawList) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_USER
.concat(integralActivityId)
.concat(SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_USER_KEY)
.concat(uid);
redisUtil.set(redisKey, integralActivityDrawList);
}
public int getIntegralActivityPrizeNum(String integralActivityId, String prizeId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_NUM
.concat(integralActivityId)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment