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

Commit dfed65e0 authored by zhoujianping's avatar zhoujianping

Merge branch 'dev_20240614' into dev_20240809_1.1

# Conflicts:
#	liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/utils/DataUtils.java
parents 90b5e63c 5846dabd
......@@ -17,8 +17,8 @@ public class AdamEntersParam implements java.io.Serializable {
@Size(min = 1, max = 30, message = "姓名长度限制1-30位")
private String name;
@ApiModelProperty(position = 12, required = true, value = "入场人手机号[11]", example = "13100000000")
@Pattern(regexp = "\\d{11}", message = "手机号格式有误")
@NotBlank(message = "手机号不能为空")
// @Pattern(regexp = "\\d{11}", message = "手机号格式有误")
// @NotBlank(message = "手机号不能为空")
private String mobile;
@ApiModelProperty(position = 13, required = true, value = "证件类型:1-大陆身份证,2-港澳通行证,3-台胞证,4-护照,5-军官证", allowableValues = "1,2,3,4,5")
@NotNull(message = "证件类型不能位空") @Min(value = 1, message = "证件类型无效") @Max(value = 5, message = "证件类型无效")
......
......@@ -64,4 +64,6 @@ public class PayOrderParam {
private String productCode;
@ApiModelProperty(value = "入场人地址vo")
private AddressVo addressesVo;
@ApiModelProperty(value = "联系方式")
private String userMobile;
}
......@@ -107,6 +107,9 @@ public class TicketCreateParam implements Serializable {
@ApiModelProperty(value = "", hidden = true)
private String createdAt;
@ApiModelProperty(value = "票观演人数量")
private Integer viewersNumber;
@JsonIgnore
public KylinTickets kylinTickets(String ticketsId, LocalDateTime createdAt, LocalDateTime updatedAt) {
KylinTickets kylinTickets = new KylinTickets();
......
package com.liquidnet.service.kylin.dto.param.admin;
import lombok.Data;
import java.io.Serializable;
/**
* <p>
* 观演人修改记录表
* </p>
*
* @author jiangxiulong
* @since 2024-06-19
*/
@Data
public class EntitiesEditParam implements Serializable {
/**
* order_ticket_entities_id
*/
private String orderTicketEntitiesId;
/**
* 入场人证件类型 1大陆身份证 2港澳通行证 3台胞证 4护照 5军官证
*/
private Integer enterType;
/**
* 入场人姓名
*/
private String enterName;
/**
* 入场人证件号
*/
private String enterIdCode;
/**
* 备注原因
*/
private String remark;
/**
* 凭证图片
*/
private String images;
}
......@@ -117,6 +117,9 @@ public class KylinTicketPartnerVo implements Serializable,Cloneable {
@ApiModelProperty(value = "")
private String updatedAt;
@ApiModelProperty(value = "票观演人数量")
private Integer viewersNumber;
public void setDefault(){
this.setIsMember(0);
this.setIsTransfer(0);
......
......@@ -36,6 +36,9 @@ public class OrderDetailsVo implements Cloneable {
private List<KylinOrderRefundsOrderCodeVo> orderRefundsVoList;
private List<KylinOrderCoupons> orderCouponsList;
@ApiModelProperty(value = "联系方式")
private String userMobile;
private static final OrderDetailsVo obj = new OrderDetailsVo();
public static OrderDetailsVo getNew() {
......
......@@ -29,4 +29,11 @@ public class PayDetailVo implements Serializable {
@ApiModelProperty(value = "快递可选择列表")
private List<ExpressModuleVo> ExpressModuleList;
@ApiModelProperty(value = "观演人数量")
private Integer viewersNumber;
@ApiModelProperty(value = "联系方式")
private String userMobile;
}
package com.liquidnet.service.kylin.service.admin;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntitiesEditLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 观演人修改记录表 服务类
* </p>
*
* @author jiangxiulong
* @since 2024-06-19
*/
public interface IKylinOrderTicketEntitiesEditLogService extends IService<KylinOrderTicketEntitiesEditLog> {
}
drop table if exists kylin_order_ticket_entities_edit_log;
CREATE TABLE `kylin_order_ticket_entities_edit_log`
(
`mid` bigint unsigned AUTO_INCREMENT PRIMARY KEY,
`entities_edit_log_id` varchar(64) NOT NULL DEFAULT '' COMMENT 'entities_edit_log_id',
`order_ticket_entities_id` varchar(64) NOT NULL DEFAULT '' COMMENT 'order_ticket_entities_id',
`sys_user_id` bigint NOT NULL DEFAULT 0 COMMENT '操作人ID',
`sys_user_name` varchar(100) NOT NULL DEFAULT '' COMMENT '操作人昵称',
`enter_type_old` tinyint NOT NULL DEFAULT 1 COMMENT '旧 入场人证件类型',
`enter_name_old` varchar(100) NOT NULL DEFAULT '' COMMENT '旧 入场人姓名',
`enter_id_code_old` varchar(50) NOT NULL DEFAULT '' COMMENT '旧 入场人证件号',
`enter_type` tinyint NOT NULL DEFAULT 1 COMMENT '入场人证件类型 1大陆身份证 2港澳通行证 3台胞证 4护照 5军官证',
`enter_name` varchar(100) NOT NULL DEFAULT '' COMMENT '入场人姓名',
`enter_id_code` varchar(50) NOT NULL DEFAULT '' COMMENT '入场人证件号',
`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注原因',
`images` text NULL COMMENT '凭证图片',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
KEY `idx_entities_edit_log_id` (`entities_edit_log_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci COMMENT '观演人修改记录表';
\ No newline at end of file
package com.liquidnet.client.admin.web.controller.zhengzai.kylin;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.domain.entity.SysUser;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BannersTargetType;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.adam.service.impl.AdamIdCodeService;
import com.liquidnet.client.admin.zhengzai.kylin.service.IToolService;
import com.liquidnet.commons.lang.constant.LnsRegex;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dao.OrderTicketsListDao;
import com.liquidnet.service.kylin.dao.PerformanceSponsorDao;
import com.liquidnet.service.kylin.dto.param.admin.EntitiesEditParam;
import com.liquidnet.service.kylin.dto.param.admin.OrderListReq;
import com.liquidnet.service.kylin.dto.vo.admin.OrderDetailsAdminVo;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntitiesEditLog;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketEntitiesEditLogMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketEntitiesMapper;
import com.liquidnet.service.kylin.service.admin.IKylinOrderTicketsAdminService;
import com.liquidnet.service.kylin.service.admin.IKylinPerformancesAdminService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* 订单Controller
......@@ -30,18 +49,157 @@ import java.util.List;
public class KylinOrderTicketsController extends BaseController {
private String prefix = "zhengzai/kylin/order";
@Value("${liquidnet.client.admin.platformUrl}")
private String platformUrl;
@Value("${liquidnet.aliyun.oss.imgUrl}")
private String imgUrl;
@Autowired
private IKylinOrderTicketsAdminService iKylinOrderTicketsAdminService;
@Autowired
private IKylinPerformancesAdminService kylinPerformancesService;
@Autowired
private IToolService toolService;
@Autowired
private AdamIdCodeService adamIdCodeService;
@Autowired
private KylinOrderTicketEntitiesMapper kylinOrderTicketEntitiesMapper;
@Autowired
private KylinOrderTicketEntitiesEditLogMapper kylinOrderTicketEntitiesEditLogMapper;
@RequiresPermissions("kylin:order:orderlist:view")
@GetMapping("/orderList")
public String tickets() {
return prefix + "/orderList/orderList";
}
@GetMapping("/enterEditList/{id}")
@RequiresPermissions("kylin:order:orderlist:view")
public String enterEditList(@PathVariable("id") String id, ModelMap mmap) {
mmap.put("id", id);
return prefix + "/orderList/enterEditList";
}
@Log(title = "观演人信息修改记录列表", businessType = BusinessType.LIST)
@RequiresPermissions("kylin:order:orderlist:view")
@PostMapping("/enterEditList/{id}")
@ResponseBody
public TableDataInfo enterEditListPost(@PathVariable("id") String id) {
List<KylinOrderTicketEntitiesEditLog> editLogs = kylinOrderTicketEntitiesEditLogMapper.selectList(
Wrappers.lambdaQuery(KylinOrderTicketEntitiesEditLog.class)
.eq(KylinOrderTicketEntitiesEditLog::getOrderTicketEntitiesId, id)
);
for (KylinOrderTicketEntitiesEditLog editLog : editLogs) {
String result = Arrays.stream(editLog.getImages().split(","))
.map(url -> imgUrl + url)
.collect(Collectors.joining(","));
editLog.setImages(result);
}
return getDataTable(editLogs);
}
@GetMapping("/enterEdit/{id}")
@RequiresPermissions("kylin:order:orderlist:view")
public String enterEdit(@PathVariable("id") String id, ModelMap mmap) {
mmap.put("id", id);
mmap.put("platformUrl", platformUrl);
List<Object> bannersTargetType = BannersTargetType.getResultType();
mmap.put("BannersTargetType", bannersTargetType);
KylinOrderTicketEntities kylinOrderTicketEntities = kylinOrderTicketEntitiesMapper.selectOne(
Wrappers.lambdaQuery(KylinOrderTicketEntities.class)
.eq(KylinOrderTicketEntities::getOrderTicketEntitiesId, id)
);
mmap.put("entitie", kylinOrderTicketEntities);
return prefix + "/orderList/enterEdit";
}
@PostMapping("/enterEdit")
@RequiresPermissions("kylin:order:orderlist:view")
@Log(title = "修改观演人信息", businessType = BusinessType.UPDATE)
@ResponseBody
public AjaxResult enterEditPost(EntitiesEditParam param) {
String orderTicketEntitiesId = param.getOrderTicketEntitiesId();
KylinOrderTicketEntities entities = kylinOrderTicketEntitiesMapper.selectOne(
Wrappers.lambdaQuery(KylinOrderTicketEntities.class)
.eq(KylinOrderTicketEntities::getOrderTicketEntitiesId, orderTicketEntitiesId)
);
String enterName = param.getEnterName();
String enterMobile = entities.getEnterMobile();
String enterIdCode = param.getEnterIdCode();
Integer enterType = param.getEnterType();
String orderId = entities.getOrderId();
// 验证
switch (param.getEnterType()) {
case 1:
if (!Pattern.matches(LnsRegex.Valid.CN_HANZI, enterName)) {
return error("观演人姓名只能为中文");
}
if (!Pattern.matches(LnsRegex.Valid.CN_ID_CARD_REF, enterIdCode)) {
return error("身份证号码不合规");
}
try {
adamIdCodeService.identityHandler1(enterName, enterIdCode);
} catch (Exception e) {
return error(e.getMessage());
}
break;
case 2:
if (!Pattern.matches(LnsRegex.Valid.CN_ID_CARD_HM, enterIdCode)) {
return error("港澳居民来往内地通行证号码不合规");
}
break;
case 3:
if (!Pattern.matches(LnsRegex.Valid.CN_ID_CARD_TW, enterIdCode)) {
return error("台湾居民来往大陆通行证号码不合规");
}
break;
case 4:
if (Pattern.matches(LnsRegex.Valid.CN_ID_CARD_PP, enterIdCode)) {
return error("不支持中国大陆护照");
}
if (!Pattern.matches(LnsRegex.Valid.CN_ID_CARD_PP_NON, enterIdCode)) {
return error("护照号码不合规");
}
break;
case 5:
if (!Pattern.matches(LnsRegex.Valid.CN_ID_CARD_MO, enterIdCode)) {
return error("军官证号不合规");
}
break;
default:
return error("证件类型不正确");
}
// 修改
toolService.supplementEnter(orderTicketEntitiesId, enterName, enterMobile, enterIdCode, enterType, orderId);
// 记录
KylinOrderTicketEntitiesEditLog editLog = KylinOrderTicketEntitiesEditLog.getNew();
editLog.setEntitiesEditLogId(IDGenerator.nextSnowId());
editLog.setOrderTicketEntitiesId(orderTicketEntitiesId);
editLog.setEnterType(enterType);
editLog.setEnterIdCode(enterIdCode);
editLog.setEnterName(enterName);
editLog.setRemark(param.getRemark());
editLog.setImages(param.getImages());
SysUser sysUser = ShiroUtils.getSysUser();
editLog.setSysUserId(sysUser.getUserId());
editLog.setSysUserName(sysUser.getUserName());
editLog.setEnterNameOld(entities.getEnterName());
editLog.setEnterTypeOld(entities.getEnterType());
editLog.setEnterIdCodeOld(entities.getEnterIdCode());
kylinOrderTicketEntitiesEditLogMapper.insert(editLog);
return success();
}
/**
* 查询订单列表
*/
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('修改订单')" />
<th:block th:include="include :: datetimepicker-css" />
......@@ -89,6 +89,11 @@
<div class="form-control-static" th:text="${@dict.getLabel('zhengzai_get_ticket_type',orderDetailsVo.orderTicketVo.getTicketType)}">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">联系方式:</label>
<div class="form-control-static" th:text="*{orderTicketVo.userMobile}">
</div>
</div>
<div th:each="ticketEntity,ticketEntityStat : *{orderTicketEntitiesVo}" class="form-group select-list" >
<div class="hr-line-dashed"></div>
<label class="col-sm-3 control-label is-required">取票人[[${ticketEntityStat.count}]]:</label>
......@@ -99,21 +104,26 @@
<div class="col-sm-3">
<input th:value="${@dict.getLabel('zhengzai_certificate_type',ticketEntity.enterType)}" class="form-control" type="text" readonly>
</div>
<label class="col-sm-3 control-label">电话:</label>
<!-- <label class="col-sm-3 control-label">电话:</label>-->
<!-- <div class="col-sm-3">-->
<!-- <input th:value="${ticketEntity.enterMobile}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<label class="col-sm-3 control-label">票务状态:</label>
<div class="col-sm-3">
<input th:value="${ticketEntity.enterMobile}" class="form-control" type="text" readonly>
<input th:value="${@dict.getLabel('zhengzai_payment_type',ticketEntity.isPayment)}" class="form-control" type="text" readonly>
</div>
<label class="col-sm-3 control-label">证件号:</label>
<div class="col-sm-3">
<input th:value="${ticketEntity.enterIdCode}" class="form-control" type="text" readonly>
</div>
<label class="col-sm-3 control-label">票务状态:</label>
<div class="col-sm-3">
<input th:value="${@dict.getLabel('zhengzai_payment_type',ticketEntity.isPayment)}" class="form-control" type="text" readonly>
</div>
<label class="col-sm-3 control-label">出票状态</label>
<!-- <label class="col-sm-3 control-label">出票状态:</label>-->
<!-- <div class="col-sm-3">-->
<!-- <input th:value="${@dict.getLabel('zhengzai_ticket_status',ticketEntity.status)}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<label class="col-sm-3 control-label">操作</label>
<div class="col-sm-3">
<input th:value="${@dict.getLabel('zhengzai_ticket_status',ticketEntity.status)}" class="form-control" type="text" readonly>
<a class="btn btn-danger btn-xs" th:onclick="enterEdit([[${ticketEntity.orderTicketEntitiesId}]])">修改</a>
<a class="btn btn-success btn-xs" th:onclick="enterEditList([[${ticketEntity.orderTicketEntitiesId}]])">修改记录</a>
</div>
</div>
</form>
......@@ -121,9 +131,16 @@
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<script th:inline="javascript">
var prefix = ctx + "kylin/tickets";
var prefix = ctx + "kylin/order";
var payTypeDatas = [[${@dict.getType('zhengzai_pay_type')}]];
function enterEdit(id) {
$.modal.open('修改观演人信息', prefix + "/enterEdit/"+id)
}
function enterEditList(id) {
$.modal.open('观演人信息修改记录', prefix + "/enterEditList/"+id)
}
$("#form-tickets-edit").validate({
focusCleanup: true
});
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('修改观演人信息')"/>
<th:block th:include="include :: select2-css"/>
<th:block th:include="include :: bootstrap-fileinput-css"/>
</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="${#strings.defaultString(entitie.enterName, '')}" class="form-control" type="text" name="enterName" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">证件类型</label>
<div class="col-sm-10">
<select required class="form-control" name="enterType" th:with="type=${@dict.getType('zhengzai_certificate_type')}">
<option value="">--请选择证件类型--</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"
th:field="*{entitie.enterType}">
</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">证件号</label>
<div class="col-sm-10">
<input th:value="${#strings.defaultString(entitie.enterIdCode, '')}" class="form-control" type="text" name="enterIdCode" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">备注原因</label>
<div class="col-sm-10">
<textarea rows="3" name="remark" placeholder="" class="form-control" required></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">上传凭证</label>
<div class="col-sm-10">
<div class="file-loading">
<input id="fileinput-1" type="file" name="file" data-max-file-count="20" multiple>
</div>
</div>
</div>
<input hidden id="images" name="images">
<input hidden id="orderTicketEntitiesId" name="orderTicketEntitiesId" th:value="${entitie.orderTicketEntitiesId}">
</form>
</div>
<th:block th:include="include :: footer"/>
<th:block th:include="include :: select2-js"/>
<th:block th:include="include :: bootstrap-fileinput-js"/>
<th:block th:include="include :: bootstrap-suggest-js"/>
<script type="text/javascript">
var prefix = ctx + "kylin/order";
var platformUrl = "[[${platformUrl}]]";
function submitHandler() {
if ($.validate.form()) {
var data = $('#form-post-add').serializeArray();
var images = $('#images').val();
if (!images) {
layer.msg("请上传图片,请勿忘记点击上传按钮");
return false;
}
$.operate.save(prefix + "/enterEdit", data);
}
}
$(function () {
let uploadedFilePaths = [];
$("#fileinput-1").fileinput({
'theme': 'explorer-fas',
layoutTemplates: {
actionUpload: '',
},
'uploadUrl': platformUrl + "/platform/basicServices/alOss/upload",
"uploadExtraData": {
"pathName" : "kylinOrderEnter",
"buckType" : 1
},
showClose: false,
browseOnZoneClick: false,
}).on("fileuploaded", function (event, data, previewId, index) {
// 将上传的文件路径添加到数组中
uploadedFilePaths.push(data.response.data.ossPath);
// 更新隐藏输入字段的值
$("#images").val(uploadedFilePaths.join(','));
});
})
</script>
</body>
</html>
\ No newline at end of file
<!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('观演人信息修改记录')"/>
<style>
.img-circle {
border-radius: 0 !important; /* 覆盖 border-radius 样式,设置为0 */
}
</style>
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 select-table table-bordered">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer"/>
<th:block th:include="include :: bootstrap-suggest-js"/>
<th:block th:include="include :: bootstrap-typeahead-js"/>
<script th:inline="javascript">
var prefix = ctx + "kylin/order";
var id = [[${id}]];
var certificateType = [[${@dict.getType('zhengzai_certificate_type')}]];
$(function () {
var options = {
url: prefix + "/enterEditList/" + id,
modalName: "观演人信息修改记录",
columns: [{
field: 'createdAt',
title: '时间',
formatter: function (value, row, index) {
return $.common.sprintf("<span>%s</span>", null != value ? value.replace("T"," ").substring(0, 19) : value);
}
},
{
field: 'formatter',
title: '原信息',
formatter: function (value, row, index) {
return '证件类型: ' + $.table.selectDictLabel(certificateType, row.enterTypeOld) + '<br>' +
'姓名: ' + row.enterNameOld + '<br>' +
'证件号: ' + row.enterIdCodeOld + '<br>';
}
},
{
field: 'formatter',
title: '变更信息',
formatter: function (value, row, index) {
return '证件类型: ' + $.table.selectDictLabel(certificateType, row.enterType) + '<br>' +
'姓名: ' + row.enterName + '<br>' +
'证件号: ' + row.enterIdCode + '<br>';
}
},
{
field: 'remark',
title: '备注原因'
},
{
field: 'images',
title: '变更凭证',
formatter: function(value, row, index) {
var arr = value.split(",");
var str = "";
for(var i=0;i<arr.length;i++){
str += $.table.imageView(arr[i],"300", "600");
}
return str;
}
},
{
field: 'sysUserName',
title: '操作人'
}]
};
$.table.init(options);
});
</script>
</body>
</html>
\ No newline at end of file
package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.fasterxml.jackson.databind.JsonNode;
import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.IdentityUtils;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@Slf4j
@Service
public class AdamIdCodeService {
@Autowired
RedisDataSourceUtil redisDataSourceUtil;
public boolean setCertificationJunk(int idType, String idNo, String idName) {
return redisDataSourceUtil.getRedisAdamUtil().set(AdamRedisConst.INFO_CERTIFICATION_JUNK + idType + idNo, idName, 604800);
}
public boolean isCertificationJunk(int idType, String idNo, String idName) {
String o = (String) redisDataSourceUtil.getRedisAdamUtil().get(AdamRedisConst.INFO_CERTIFICATION_JUNK + idType + idNo);
return !StringUtils.isEmpty(o) && o.equals(idName);
}
/**
* 目前只针对身份证类型三方服务认证成功的标记
*
* @param idType
* @param idNo
* @param idName
* @return
*/
public boolean setCertification(int idType, String idNo, String idName) {
return redisDataSourceUtil.getRedisAdamUtil().set(AdamRedisConst.INFO_CERTIFICATION + idType + idNo, idName);
}
/**
* 目前只针对身份证类型三方服务认证成功的标记
*
* @param idType
* @param idNo
* @param idName
* @return
*/
public int isCertification(int idType, String idNo, String idName) {
String o = (String) redisDataSourceUtil.getRedisAdamUtil().get(AdamRedisConst.INFO_CERTIFICATION + idType + idNo);
if (StringUtils.isEmpty(o)) {
return -1;
}
return o.equals(idName) ? 1 : 0;
}
/**
* 身份证实名处理
*
* @param name
* @param idCard
*/
public void identityHandler1(String name, String idCard) {
String msg = "身份证号与姓名不符";
String code = "10102";
int rst = this.isCertification(1, idCard, name);
switch (rst) {
// 本地存在,验证不通过 改名字了重新验证
case 0:
// 本地不存在
case -1:
if (this.isCertificationJunk(1, idCard, name)) {
throw new LiquidnetServiceException(code, msg);
}
String respStr = IdentityUtils.aliThird(name, idCard), respErrorCode = null;
JsonNode respJNode = JsonUtils.fromJson(respStr, JsonNode.class);
if (null == respJNode || !"0".equals(respErrorCode = String.valueOf(respJNode.get("error_code")))) {
log.info("###实名认证失败[{}]", respStr);
if (!StringUtils.isEmpty(respErrorCode) && org.apache.commons.lang3.StringUtils.indexOf("3000290033", respErrorCode) < 0) {
// 认证服务商'30002'、'90033'为运营商导致的失败,这里不做缓存标记
this.setCertificationJunk(1, idCard, name);
}
throw new LiquidnetServiceException(code, msg);
}
this.setCertification(1, idCard, name);
break;
// 本地存在,验证通过
case 1:
break;
default:
throw new LiquidnetServiceException(code, "认证失败标记类型错误");
}
}
}
......@@ -173,9 +173,9 @@ public class KylinOrderTicketsAdminServiceImpl extends ServiceImpl<KylinOrderTic
if (item.getEnterIdCode().length() == 18) {
item.setEnterIdCode(item.getEnterIdCode().substring(0, 3) + "*************" + item.getEnterIdCode().substring(16));
}
if (item.getEnterMobile().length() == 11) {
item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
}
// if (item.getEnterMobile().length() == 11) {
// item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
// }
}
//计算 倒计时
if (orderTicketVo.getStatus() == KylinTableStatusConst.ORDER_STATUS0) {
......
......@@ -484,6 +484,23 @@ public class KylinRefundsStatusServiceImpl {
continue;
} else {
//未退款入场人数量为0才退优先卷
List<KylinOrderTicketEntities> kylinOrderTicketEntities = kylinOrderTicketEntitiesMapper.selectList(
Wrappers.lambdaQuery(KylinOrderTicketEntities.class).eq(KylinOrderTicketEntities::getOrderId, refund.getOrderTicketsId()).eq(KylinOrderTicketEntities::getIsPayment, 1));
log.info("admin退款请求未退款入场人数量number={}",kylinOrderTicketEntities.size());
if(kylinOrderTicketEntities.size()==0){
//获取订单详情
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(refund.getOrderTicketsId());
//退优先卷
ArrayList<KylinOrderCoupons> orderCoupons = dataUtils.getOrderCoupon(refund.getOrderTicketsId());
if (orderCoupons.size() > 0) {
for (KylinOrderCoupons item : orderCoupons) {
if (item.getCouponType() == 101) {
dataUtils.backCoupon(item.getCouponCode(), orderTicketVo.getUserId());
}
}
}
}
// 同步大麦 票务平台
KylinOrderTicketVo orderData = dataUtils.getOrderTicketVo(refund.getOrderTicketsId());
KylinPerformanceVo vo = dataUtils.getPerformanceVo(orderData.getPerformanceId());
......
package com.liquidnet.client.admin.zhengzai.kylin.utils;
import com.alibaba.fastjson.JSON;
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.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.service.candy.param.BackCouponParam;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.KylinExpressModuleVo;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundAddress;
......@@ -14,20 +17,25 @@ import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketExpressModuleVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.entity.KylinOrderCoupons;
import com.liquidnet.service.slime.constant.SlimeRedisConst;
import com.liquidnet.service.slime.dto.vo.SlimeFieldsVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Component
public class DataUtils {
......@@ -37,6 +45,8 @@ public class DataUtils {
private RedisDataSourceUtil redisDataSourceUtil;
@Autowired
private MongoVoUtils mongoVoUtils;
@Value("${liquidnet.service.candy.url}")
private String candyUrl;
/**
* 初始化普通库存
......@@ -581,4 +591,33 @@ public class DataUtils {
return (ArrayList<OrderRefundPoundage>) obj;
}
}
// 获取订单券的使用情况
public ArrayList<KylinOrderCoupons> getOrderCoupon(String orderId) {
String redisKey = KylinRedisConst.ORDER_COUPON.concat(orderId);
Object obj = redisDataSourceUtil.getRedisKylinUtil().get(redisKey);
if (obj == null) {
return getKylinOrderCouponsArrayList();
} else {
return (ArrayList<KylinOrderCoupons>) obj;
}
}
public void backCoupon(String uCouponId, String uid) {
try {
BackCouponParam param = BackCouponParam.getNew();
param.setuCouponIds(uCouponId);
param.setUid(uid);
MultiValueMap<String, String> header = CollectionUtil.linkedMultiValueMapStringString();
ArrayList<BackCouponParam> params = new ArrayList();
params.add(param);
String jsonString = JSON.toJSONString(params);
String returnData = HttpUtil.postRaw(candyUrl + "/candy-coupon/useBack", jsonString, header);
} catch (Exception e) {
log.error("回退券ERROR:{}", e);
}
}
private static final ArrayList<KylinOrderCoupons> kylinOrderCouponsArrayList = new ArrayList<>();
public static ArrayList<KylinOrderCoupons> getKylinOrderCouponsArrayList() {
return (ArrayList<KylinOrderCoupons>) kylinOrderCouponsArrayList.clone();
}
}
package com.liquidnet.service.kylin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 观演人修改记录表
* </p>
*
* @author jiangxiulong
* @since 2024-06-19
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class KylinOrderTicketEntitiesEditLog implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* entities_edit_log_id
*/
private String entitiesEditLogId;
/**
* order_ticket_entities_id
*/
private String orderTicketEntitiesId;
/**
* 操作人ID
*/
private Long sysUserId;
/**
* 操作人昵称
*/
private String sysUserName;
/**
* 旧 入场人证件类型
*/
private Integer enterTypeOld;
/**
* 旧 入场人姓名
*/
private String enterNameOld;
/**
* 旧 入场人证件号
*/
private String enterIdCodeOld;
/**
* 入场人证件类型 1大陆身份证 2港澳通行证 3台胞证 4护照 5军官证
*/
private Integer enterType;
/**
* 入场人姓名
*/
private String enterName;
/**
* 入场人证件号
*/
private String enterIdCode;
/**
* 备注原因
*/
private String remark;
/**
* 凭证图片
*/
private String images;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
private static final KylinOrderTicketEntitiesEditLog obj = new KylinOrderTicketEntitiesEditLog();
public static KylinOrderTicketEntitiesEditLog getNew() {
try {
return (KylinOrderTicketEntitiesEditLog) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinOrderTicketEntitiesEditLog();
}
}
}
......@@ -115,6 +115,12 @@ public class KylinTickets implements Serializable ,Cloneable{
*/
private Integer saleRemindMinute;
/**
* 票观演人数量
*/
private Integer viewersNumber;
/**
* comment
*/
......@@ -147,7 +153,8 @@ public class KylinTickets implements Serializable ,Cloneable{
vo.getDescribeElectronic(),vo.getAdvanceMinuteMember(),
vo.getTimeStart(),vo.getTimeEnd(),vo.getTimeEndExpress(),
vo.getUseStart(),vo.getUseEnd(),vo.getPayCountdownMinute(),
vo.getSaleRemindMinute(),vo.getComment(),vo.getCreatedAt(),
vo.getSaleRemindMinute(),vo.getViewersNumber()
,vo.getComment(),vo.getCreatedAt(),
vo.getUpdatedAt()
};
}
......
package com.liquidnet.service.kylin.mapper;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntitiesEditLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 观演人修改记录表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2024-06-19
*/
public interface KylinOrderTicketEntitiesEditLogMapper extends BaseMapper<KylinOrderTicketEntitiesEditLog> {
}
<?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.KylinOrderTicketEntitiesEditLogMapper">
</mapper>
......@@ -196,7 +196,7 @@ public class AdamEntersController {
AdamEntersVo enters = adamRdmService.getEntersVoByUidEntersId(currentUid, entersId);
if (null == enters) return ResponseDto.failure(ErrorMapping.get("10105"));
// adamEntersService.remove(currentUid, entersId);
adamEntersService.remove(currentUid, entersId);
return ResponseDto.success();
}
......
......@@ -437,7 +437,7 @@ public class AdamRdmService {
if (null == vos) {
vos = ObjectUtil.getAdamEntersVoArrayList();
}
vos.add(vo);
vos.add(0,vo);
return redisUtil.set(AdamRedisConst.INFO_ENTERS + uid, vos);
}
......
......@@ -18,18 +18,18 @@
10012=\u97F3\u4E50\u98CE\u683C\u6807\u7B7E\u65E0\u6548
10013=\u8D26\u53F7\u4E0E\u5BC6\u7801\u4E0D\u5339\u914D
10014=\u7F16\u8F91\u65E0\u6548
10015=\u5165\u573A\u4EBAID\u4E0D\u80FD\u4E3A\u7A7A
10015=\u89C2\u6F14\u4EBAID\u4E0D\u80FD\u4E3A\u7A7A
10016=\u6536\u8D27\u5730\u5740ID\u4E0D\u80FD\u4E3A\u7A7A
10017=\u5165\u573A\u4EBA\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5B9E
10017=\u89C2\u6F14\u4EBA\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5B9E
10018=\u6536\u8D27\u5730\u5740\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5B9E
10019=\u5165\u573A\u4EBA\u5DF2\u5B58\u5728\uFF0C\u8BF7\u6838\u5B9E
10019=\u89C2\u6F14\u4EBA\u5DF2\u5B58\u5728\uFF0C\u8BF7\u6838\u5B9E
10020=\u6635\u79F0\u4E0D\u5408\u89C4
10021=\u7B7E\u540D\u4E0D\u5408\u89C4
10022=\u5934\u50CF\u4E0D\u5408\u89C4
10023=\u80CC\u666F\u56FE\u4E0D\u5408\u89C4
10024=\u8BE5\u8D26\u53F7\u5DF2\u88AB\u4E3B\u52A8\u6CE8\u9500
10025=\u5165\u573A\u4EBA\u5DF2\u8FBE\u4E0A\u9650
10026=\u5165\u573A\u4EBA\u4ECA\u65E5\u64CD\u4F5C\u5DF2\u8FBE\u4E0A\u9650
10025=\u89C2\u6F14\u4EBA\u5DF2\u8FBE\u4E0A\u9650
10026=\u89C2\u6F14\u4EBA\u4ECA\u65E5\u64CD\u4F5C\u5DF2\u8FBE\u4E0A\u9650
10027=\u670D\u52A1\u5347\u7EA7\uFF0C\u6682\u4E0D\u652F\u6301\u8BE5\u64CD\u4F5C
......@@ -38,7 +38,7 @@
10102=\u8EAB\u4EFD\u8BC1\u53F7\u4E0E\u59D3\u540D\u4E0D\u7B26
10103=\u8EAB\u4EFD\u8BC1\u59D3\u540D\u4E0D\u5408\u89C4
10104=\u8EAB\u4EFD\u8BC1\u53F7\u7801\u4E0D\u5408\u89C4
10105=\u5165\u573A\u4EBA\u4E0D\u5B58\u5728
10105=\u89C2\u6F14\u4EBA\u4E0D\u5B58\u5728
10106=\u6536\u83B7\u5730\u5740\u4E0D\u5B58\u5728
10107=\u6E2F\u6FB3\u5C45\u6C11\u6765\u5F80\u5185\u5730\u901A\u884C\u8BC1\u53F7\u7801\u4E0D\u5408\u89C4
10108=\u53F0\u6E7E\u5C45\u6C11\u6765\u5F80\u5927\u9646\u901A\u884C\u8BC1\u53F7\u7801\u4E0D\u5408\u89C4
......
......@@ -350,9 +350,11 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
ArrayList<KylinOrderCoupons> orderCoupons = kylinOrderUtils.getOrderCoupon(kylinOrderTicketVo.getOrderTicketsId());
if (orderCoupons.size() > 0) {
for (KylinOrderCoupons item : orderCoupons) {
if (item.getCouponType() != 101) {
/*if (item.getCouponType() != 101) {
kylinOrderUtils.backCoupon(item.getCouponCode(), kylinOrderTicketVo.getUserId());
}
}*/
//所有卷都退
kylinOrderUtils.backCoupon(item.getCouponCode(), kylinOrderTicketVo.getUserId());
}
}
......
......@@ -99,9 +99,9 @@ public class KylinOrderTicketsRefundServiceImpl {
if (item.getEnterIdCode().length() == 18) {
item.setEnterIdCode(item.getEnterIdCode().substring(0, 3) + "*************" + item.getEnterIdCode().substring(16));
}
if (item.getEnterMobile().length() == 11) {
item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
}
// if (item.getEnterMobile().length() == 11) {
// item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
// }
item.setPriceActual(orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).divide(BigDecimal.valueOf(orderTicketVo.getNumber()), 2, BigDecimal.ROUND_HALF_UP));
item.setPriceCanRefund(dataUtils.getCanRefundOrderEntitiesPrice(orderTicketVo, kylinOrderRefundsVoBaseList, item.getOrderTicketEntitiesId()));
// 手续费处理 TODO 手续费计算改成 按照实付金额计算
......
......@@ -3,7 +3,6 @@ package com.liquidnet.service.kylin.service.impl;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
......@@ -11,10 +10,10 @@ import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dto.vo.KylinFieldsVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.*;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo;
import com.liquidnet.service.kylin.dto.vo.returns.*;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
......@@ -252,9 +251,9 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
if (item.getEnterIdCode().length() == 18) {
item.setEnterIdCode(item.getEnterIdCode().substring(0, 3) + "*************" + item.getEnterIdCode().substring(16));
}
if (item.getEnterMobile().length() == 11) {
item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
}
// if (item.getEnterMobile().length() == 11) {
// item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
// }
}
//计算 倒计时
......@@ -314,7 +313,8 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
if (LocalDateTime.now().isAfter(refundOpenDate) && LocalDateTime.now().isBefore(refundCloseDate)
&& ticketVo.getCounts() == 1 && lockPrice.compareTo(orderTicketVo.getPriceActual()) != 0
&& (orderTicketVo.getStatus().equals(1) || orderTicketVo.getStatus().equals(3) || orderTicketVo.getStatus().equals(6))
&& (orderTicketVo.getTransferStatus().equals(0) || orderTicketVo.getTransferStatus().equals(5))) {
&& (orderTicketVo.getTransferStatus().equals(0) || orderTicketVo.getTransferStatus().equals(5))
&& isSingleTicket(ticketVo.getTicketsId())) {
vo.setIsCanRefund(1);
} else {
vo.setIsCanRefund(0);
......@@ -322,6 +322,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
} else {
vo.setIsCanRefund(0);
}
//是否可转
if (null != performanceVo.getIsTransfer() && performanceVo.getIsTransfer() == 1) {
LocalDateTime transferStartTime = DateUtil.Formatter.yyyyMMddHHmmss.parse(performanceVo.getTransferStartTime());
......@@ -367,6 +368,9 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
vo.setEnterDescribe(dataUtils.getEnterInfo(performanceVo.getType(), orderTicketVo.getGetTicketType(), orderTicketVo.getIsStudent(), ticketVo.getIsTrueName()));
// 添加 优惠券相关
vo.setOrderCouponsList(dataUtils.getOrderCoupon(orderId));
//联系方式
vo.setUserMobile(orderTicketVo.getUserMobile());
}
log.info(UserPathDto.setData("订单详情", orderId, vo));
return vo;
......@@ -376,6 +380,16 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
}
}
private boolean isSingleTicket(String ticketsId) {
KylinTicketPartnerVo kylinTicketPartnerVo = dataUtils.getKylinTicketPartnerVoByTicketId(ticketsId);
if (null != kylinTicketPartnerVo && null != kylinTicketPartnerVo.getViewersNumber()) {
return kylinTicketPartnerVo.getViewersNumber() == 1;
}else {
log.info("[isSingleTicket] 票信息为空, ticketsId: {}", ticketsId);
return false;
}
}
@Override
public ResponseDto<Integer> orderUnPayCount() {
String uid = CurrentUtil.getCurrentUid();
......@@ -1036,9 +1050,9 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
if (item.getEnterIdCode().length() == 18) {
item.setEnterIdCode(item.getEnterIdCode().substring(0, 3) + "*************" + item.getEnterIdCode().substring(16));
}
if (item.getEnterMobile().length() == 11) {
item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
}
// if (item.getEnterMobile().length() == 11) {
// item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
// }
item.setPriceActual(orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).divide(BigDecimal.valueOf(orderTicketVo.getNumber())));
item.setPriceCanRefund(dataUtils.getCanRefundOrderEntitiesPrice(orderTicketVo, kylinOrderRefundsVoBaseList, item.getOrderTicketEntitiesId()));
BeanUtils.copyProperties(item, refundVo);
......
......@@ -537,10 +537,30 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
payDetailVo.setPerformanceInfo(performancesInfo);
payDetailVo.setTicketInfo(ticketVo);
// 设置票观演人数量
payDetailVo.setViewersNumber(getViewersNumberByTicketsId(ticketsId));
//设置默认手机号
Map token = CurrentUtil.getTokenClaims();
payDetailVo.setUserMobile(StringUtils.defaultString(((String) token.get("mobile")), ""));
log.info(UserPathDto.setData("预支付演出票种详情", "performancesId=" + performancesId + " ticketsId=" + ticketsId, payDetailVo));
return payDetailVo;
}
/**
* 设置观演人数量
* @param ticketsId
*/
private Integer getViewersNumberByTicketsId(String ticketsId) {
List<KylinTicketPartnerVo> voTickets = mongoTemplate.find(Query.query(Criteria.where("ticketsId").is(ticketsId)),
KylinTicketPartnerVo.class, KylinTicketPartnerVo.class.getSimpleName());
if (voTickets.isEmpty()) {
return 0;
}
return voTickets.get(0).getViewersNumber();
}
public List<KylinPerformanceVo> checkAppStatus(List<KylinPerformanceVo> list) {
List<KylinPerformanceVo> newList = ObjectUtil.getKylinPerformanceVoArrayList();
if (!CollectionUtils.isEmpty(list)) {
......
......@@ -22,6 +22,7 @@ import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressRouteVo;
import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressVo;
import com.liquidnet.service.kylin.dto.vo.mongo.*;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketExpressModuleVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo;
import com.liquidnet.service.kylin.dto.vo.returns.NoticeKylinPerformanceVo;
......@@ -1595,4 +1596,10 @@ public class DataUtils {
return (int) obj;
}
}
public KylinTicketPartnerVo getKylinTicketPartnerVoByTicketId(String ticketId) {
return mongoTemplate.findOne(Query.query(Criteria.where("ticketsId").is(ticketId)),
KylinTicketPartnerVo.class,
KylinTicketPartnerVo.class.getSimpleName());
}
}
......@@ -21,6 +21,7 @@ import com.liquidnet.service.kylin.dto.vo.mongo.KylinIpAreaVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo;
import com.liquidnet.service.kylin.dto.vo.returns.PayInnerResultVo;
import com.liquidnet.service.kylin.dto.vo.returns.PayResultVo;
import com.liquidnet.service.kylin.entity.*;
......@@ -336,7 +337,18 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
orderUtils.backAdvanceCoupon(payOrderParam.getAdvanceCode(), uid);
return ResponseDto.failure(ErrorMapping.get("20015"));//需要实名 未实名
}
if (isTrueName == 1 && entersVoList.size() != payOrderParam.getNumber()) {
// 根据票ID获取观演人数量
KylinTicketPartnerVo ticketPartnerVo = mongoTemplate.findOne(Query
.query(Criteria.where("ticketsId").is(payOrderParam.getTicketId())),
KylinTicketPartnerVo.class,
KylinTicketPartnerVo.class.getSimpleName());
int num = payOrderParam.getNumber();
if (ticketPartnerVo != null && ticketPartnerVo.getViewersNumber() != null) {
num = num * ticketPartnerVo.getViewersNumber();
}
if (isTrueName == 1 && entersVoList.size() != num) {
orderUtils.backAdvanceCoupon(payOrderParam.getAdvanceCode(), uid);
return ResponseDto.failure(ErrorMapping.get("20015"));//入场人数量错误
}
......@@ -444,7 +456,12 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
orderTickets.setUserId(uid);
Map token = CurrentUtil.getTokenClaims();
orderTickets.setUserName(StringUtils.defaultString(((String) token.get("nickname")), ""));
orderTickets.setUserMobile(StringUtils.defaultString(((String) token.get("mobile")), ""));
if(!StringUtil.isEmpty(payOrderParam.getUserMobile())){
orderTickets.setUserMobile(payOrderParam.getUserMobile());
}else {
//默认联系方式
orderTickets.setUserMobile(StringUtils.defaultString(((String) token.get("mobile")), ""));
}
orderTickets.setPerformanceTitle(performanceData.getTitle());
orderTickets.setOrderCode(orderCode);
orderTickets.setPayCode("");
......
......@@ -277,4 +277,8 @@ create table kylin_ticket_express_module
ALTER TABLE kylin_performance_status
ADD id_count int DEFAULT NULL COMMENT '实名限购数';
ALTER TABLE kylin_ticket_status
ADD id_count int DEFAULT NULL COMMENT '实名限购数';
\ No newline at end of file
ADD id_count int DEFAULT NULL COMMENT '实名限购数';
ALTER TABLE kylin_tickets
ADD viewers_number int(11) comment '观演人数量';
\ No newline at end of file
......@@ -445,7 +445,7 @@ public class KylinPerformancesPartnerServiceImpl implements IKylinPerformancesPa
sqlsDataC.add(new Object[]{
DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketItem.getTimeEnd()), DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketItem.getTimeStart()),
DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketItem.getTimeEndExpress()), kylinPerformanceMisVo.getPayCountdownMinute(),
ticketItem.getPrice(), ticketItem.getTicketsId(), now, now
ticketItem.getPrice(), ticketItem.getViewersNumber(), ticketItem.getTicketsId(), now, now
});
//修改 mysql 购票限购、库存
sqlsDataD.add(new Object[]{
......
......@@ -124,10 +124,14 @@ public class KylinTicketsPartnerServiceImpl implements IKylinTicketsPartnerServi
kylinTicketPartnerVo.setQrCodeShowTime(ticketCreateParam.getQrCodeShowTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
// 根据票种类别设置观演人数量
putViewersNumber(ticketCreateParam, kylinTicketPartnerVo);
mongoSlimeUtils.insertTicketPartnerVo(kylinTicketPartnerVo);
return ResponseDto.success(kylinTicketPartnerVo);
} catch (Exception e) {
e.printStackTrace();
//e.printStackTrace();
log.error("error", e);
log.info(UserPathDto.setPartnerData("0", "createTicket", ticketCreateParam, e));
return ResponseDto.failure(ErrorMapping.get(20105));
}
......@@ -185,14 +189,21 @@ public class KylinTicketsPartnerServiceImpl implements IKylinTicketsPartnerServi
kylinTicketPartnerVo.setQrCodeShowTime(ticketCreateParam.getQrCodeShowTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
putViewersNumber(ticketCreateParam, kylinTicketPartnerVo);
mongoSlimeUtils.insertTicketPartnerVo(kylinTicketPartnerVo);
return ResponseDto.success(kylinTicketPartnerVo);
} catch (Exception e) {
log.error("error", e);
log.info(UserPathDto.setPartnerData("0", "addNewTicket", ticketCreateParam, e));
return ResponseDto.failure(ErrorMapping.get(20101));
}
}
private void putViewersNumber(TicketCreateParam ticketCreateParam, KylinTicketPartnerVo kylinTicketPartnerVo) {
kylinTicketPartnerVo.setViewersNumber(ticketCreateParam.getViewersNumber());
}
@Override
public ResponseDto<KylinTicketPartnerVo> updateTicket(TicketCreateParam ticketCreateParam) {
try {
......@@ -240,12 +251,16 @@ public class KylinTicketsPartnerServiceImpl implements IKylinTicketsPartnerServi
kylinTicketPartnerVo.setQrCodeShowTime("2030-01-01 12:00:00");
}
// 根据票种类别设置观演人数量
putViewersNumber(ticketCreateParam, kylinTicketPartnerVo);
mongoSlimeUtils.updateTicketPartnerVo(kylinTicketPartnerVo);
// KylinTicketPartnerVo kylinTicketPartnerVoData = JsonUtils.fromJson(doc.toJson(), KylinTicketPartnerVo.class);
log.info(UserPathDto.setPartnerData("0", "updateTicket", ticketCreateParam, "SUCCESS"));
return ResponseDto.success(null);
} catch (Exception e) {
e.printStackTrace();
//e.printStackTrace();
log.error("error", e);
log.info(UserPathDto.setPartnerData("0", "updateTicket", ticketCreateParam, e));
return ResponseDto.failure(ErrorMapping.get(20103));
}
......@@ -463,26 +478,41 @@ public class KylinTicketsPartnerServiceImpl implements IKylinTicketsPartnerServi
private boolean judgeTEM(String ticketId, int expressType, List<String> expressModuleIdList) {
if (expressType != 0) {//无类型
if (expressModuleIdList.size() == 0) {
return false;
}
KylinTicketExpressModuleVo expressModuleVo = KylinTicketExpressModuleVo.getNew();
expressModuleVo.setTicketId(ticketId);
List<ExpressModuleVo> voList = new ArrayList();
List<ExpressModuleVo> voList = new ArrayList<>();
List<KylinExpressModuleVo> kylinExpressModuleVoList = redisSlimeUtils.expressList();
for (String produceCode : expressModuleIdList) {
// 包邮
if (expressType == 3) {
for (KylinExpressModuleVo item2 : kylinExpressModuleVoList) {
if (item2.getProductCode().toString().equals(produceCode)) {
ExpressModuleVo vo = ExpressModuleVo.getNew();
vo.setProductCode(item2.getProductCode().toString());
vo.setTitle(item2.getTitle());
vo.setEstimatePriceMin(item2.getEstimatePriceMin());
vo.setEstimatePriceMax(item2.getEstimatePriceMax());
voList.add(vo);
break;
ExpressModuleVo vo = ExpressModuleVo.getNew();
vo.setProductCode(item2.getProductCode().toString());
vo.setTitle(item2.getTitle());
vo.setEstimatePriceMin(item2.getEstimatePriceMin());
vo.setEstimatePriceMax(item2.getEstimatePriceMax());
voList.add(vo);
}
}else {
if(expressModuleIdList.isEmpty()) {
log.error("[judgeTEM] expressType: {}, expressModuleIdList: {}", expressType, expressModuleIdList);
return false;
}
for (String produceCode : expressModuleIdList) {
for (KylinExpressModuleVo item2 : kylinExpressModuleVoList) {
if (item2.getProductCode().toString().equals(produceCode)) {
ExpressModuleVo vo = ExpressModuleVo.getNew();
vo.setProductCode(item2.getProductCode().toString());
vo.setTitle(item2.getTitle());
vo.setEstimatePriceMin(item2.getEstimatePriceMin());
vo.setEstimatePriceMax(item2.getEstimatePriceMax());
voList.add(vo);
break;
}
}
}
}
KylinTicketExpressModuleVo expressModuleVo = KylinTicketExpressModuleVo.getNew();
expressModuleVo.setTicketId(ticketId);
expressModuleVo.setProduceCodeList(voList);
redisSlimeUtils.setTEMMerchantVo(ticketId, expressModuleVo);
}
......
......@@ -43,7 +43,7 @@ kylin_performances_reject_txt.fieldsStatus = UPDATE kylin_performances SET rejec
# ---- \u6F14\u51FA\u7B2C\u4E8C\u6B65\u9AA4\u64CD\u4F5C ----
kylin_performance.updateStep2=UPDATE kylin_performances SET audit_time = ? , notice_image = ? WHERE performances_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_performance_status.updateStep2=UPDATE kylin_performance_status SET field_audit_status = ? ,audit_status = ? , is_true_name = ? , limit_count = ?,id_count =? WHERE performance_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_ticket.updateStep2=UPDATE kylin_tickets SET time_end = ? , time_start = ? ,time_end_express = ? ,pay_countdown_minute = ? ,price = ? WHERE tickets_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_ticket.updateStep2=UPDATE kylin_tickets SET time_end = ? , time_start = ? ,time_end_express = ? ,pay_countdown_minute = ? ,price = ?, viewers_number = ? WHERE tickets_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_ticket_status.updateStep2=UPDATE kylin_ticket_status SET total_exchange = ? , total_general = ? , is_true_name = ? , limit_count = ? ,id_count =? , is_lack_register = ? , is_express = ? , is_electronic = ? ,counts = ? , is_show_code = ? ,qr_code_show_time = ? WHERE ticket_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
# ---- VoStatus ----
kylin_ticket_status.VoStatus=UPDATE kylin_ticket_status SET status = ?, surplus_general = ? WHERE ticket_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
......@@ -67,7 +67,7 @@ kylin_tickets.del=DELETE FROM kylin_tickets WHERE tickets_id = ?
kylin_ticket_status.del=DELETE FROM kylin_ticket_status WHERE ticket_id = ?
kylin_ticket_relations.del=DELETE FROM kylin_ticket_relations WHERE ticket_id = ?
kylin_tickets.insert=INSERT INTO kylin_tickets (tickets_id,title,type,price,price_express,price_discount_member,price_discount,describes,describe_express,describe_electronic,advance_minute_member,time_start,time_end,time_end_express,use_start,use_end,pay_countdown_minute,sale_remind_minute,comment,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_tickets.insert=INSERT INTO kylin_tickets (tickets_id,title,type,price,price_express,price_discount_member,price_discount,describes,describe_express,describe_electronic,advance_minute_member,time_start,time_end,time_end_express,use_start,use_end,pay_countdown_minute,sale_remind_minute,viewers_number,comment,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_ticket_status.insert=INSERT INTO kylin_ticket_status (ticket_status_id,ticket_id,is_student,is_electronic,is_express,status,counts,status_exchange,is_show_code,qr_code_show_time,is_lack_register,total_general,total_exchange,surplus_general,surplus_exchange,express_type,is_transfer,is_true_name,limit_count,id_count,member_limit_count,is_exclusive,is_member,is_agent,sync_damai,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_ticket_relations.insert=INSERT INTO kylin_ticket_relations (ticket_relations_id,ticket_id,times_id,created_at,updated_at) VALUES (?,?,?,?,?)
......
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