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

Commit b3308887 authored by 胡佳晨's avatar 胡佳晨

Merge branch 'test'

parents 2c6fc0b0 339d5dd1
......@@ -32,10 +32,10 @@ public interface IKylinOrderTicketsService {
ResponseDto<Integer> orderUnPayCount();
//想要退款详情
KylinOrderTicketPreVo toOrderRefundDetails(String orderId);
ResponseDto<KylinOrderTicketPreVo> toOrderRefundDetails(String orderId);
//退款详情
OrderRefundVo orderRefundDetails(String orderId,String orderRefundId);
ResponseDto<OrderRefundVo> orderRefundDetails(String orderId,String orderRefundId);
/**
* 发起退款
......
package com.liquidnet.client.admin.web.controller.zhengzai.kylin;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileInputStream;
import java.io.IOException;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.PrintQuality;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* <p>
* xx 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2021-07-05 7:50 下午
*/
public class ExpressPrintController {
private static final Logger logger = LoggerFactory.getLogger(ExpressPrintController.class);
private int m_nImageHeight = 40; // 条码的高度像素数
String[][] code128 = {{" ", " ", "00", "212222", "11011001100"},
{"!", "!", "01", "222122", "11001101100"},
{"\"", "\"", "02", "222221", "11001100110"},
{"#", "#", "03", "121223", "10010011000"},
{"$", "$", "04", "121322", "10010001100"},
{"%", "%", "05", "131222", "10001001100"},
{"&", "&", "06", "122213", "10011001000"},
{"'", "'", "07", "122312", "10011000100",},
{"(", "(", "08", "132212", "10001100100"},
{")", ")", "09", "221213", "11001001000"},
{"*", "*", "10", "221312", "11001000100"},
{"+", "+", "11", "231212", "11000100100"},
{",", ",", "12", "112232", "10110011100"},
{"-", "-", "13", "122132", "10011011100"},
{".", ".", "14", "122231", "10011001110"},
{"/", "/", "15", "113222", "10111001100"},
{"0", "0", "16", "123122", "10011101100"},
{"1", "1", "17", "123221", "10011100110"},
{"2", "2", "18", "223211", "11001110010",},
{"3", "3", "19", "221132", "11001011100"},
{"4", "4", "20", "221231", "11001001110",},
{"5", "5", "21", "213212", "11011100100"},
{"6", "6", "22", "223112", "11001110100"},
{"7", "7", "23", "312131", "11101101110"},
{"8", "8", "24", "311222", "11101001100"},
{"9", "9", "25", "321122", "11100101100"},
{":", ":", "26", "321221", "11100100110"},
{";", ";", "27", "312212", "11101100100"},
{"<", "<", "28", "322112", "11100110100"},
{"=", "=", "29", "322211", "11100110010"},
{">", ">", "30", "212123", "11011011000"},
{"?", "?", "31", "212321", "11011000110"},
{"@", "@", "32", "232121", "11000110110"},
{"A", "A", "33", "111323", "10100011000"},
{"B", "B", "34", "131123", "10001011000"},
{"C", "C", "35", "131321", "10001000110"},
{"D", "D", "36", "112313", "10110001000"},
{"E", "E", "37", "132113", "10001101000"},
{"F", "F", "38", "132311", "10001100010"},
{"G", "G", "39", "211313", "11010001000"},
{"H", "H", "40", "231113", "11000101000"},
{"I", "I", "41", "231311", "11000100010"},
{"J", "J", "42", "112133", "10110111000"},
{"K", "K", "43", "112331", "10110001110"},
{"L", "L", "44", "132131", "10001101110"},
{"M", "M", "45", "113123", "10111011000"},
{"N", "N", "46", "113321", "10111000110"},
{"O", "O", "47", "133121", "10001110110"},
{"P", "P", "48", "313121", "11101110110"},
{"Q", "Q", "49", "211331", "11010001110"},
{"R", "R", "50", "231131", "11000101110"},
{"S", "S", "51", "213113", "11011101000"},
{"T", "T", "52", "213311", "11011100010"},
{"U", "U", "53", "213131", "11011101110"},
{"V", "V", "54", "311123", "11101011000"},
{"W", "W", "55", "311321", "11101000110"},
{"X", "X", "56", "331121", "11100010110"},
{"Y", "Y", "57", "312113", "11101101000"},
{"Z", "Z", "58", "312311", "11101100010"},
{"[", "[", "59", "332111", "11100011010"},
{"\\", "\\", "60", "314111", "11101111010"},
{"]", "]", "61", "221411", "11001000010"},
{"^", "^", "62", "431111", "11110001010"},
{"_", "_", "63", "111224", "10100110000"},
{"NUL", "`", "64", "111422", "10100001100"},
{"SOH", "a", "65", "121124", "10010110000"},
{"STX", "b", "66", "121421", "10010000110"},
{"ETX", "c", "67", "141122", "10000101100"},
{"EOT", "d", "68", "141221", "10000100110"},
{"ENQ", "e", "69", "112214", "10110010000"},
{"ACK", "f", "70", "112412", "10110000100"},
{"BEL", "g", "71", "122114", "10011010000"},
{"BS", "h", "72", "122411", "10011000010"},
{"HT", "i", "73", "142112", "10000110100"},
{"LF", "j", "74", "142211", "10000110010"},
{"VT", "k", "75", "241211", "11000010010"},
{"FF", "I", "76", "221114", "11001010000"},
{"CR", "m", "77", "413111", "11110111010"},
{"SO", "n", "78", "241112", "11000010100"},
{"SI", "o", "79", "134111", "10001111010"},
{"DLE", "p", "80", "111242", "10100111100"},
{"DC1", "q", "81", "121142", "10010111100"},
{"DC2", "r", "82", "121241", "10010011110"},
{"DC3", "s", "83", "114212", "10111100100"},
{"DC4", "t", "84", "124112", "10011110100"},
{"NAK", "u", "85", "124211", "10011110010"},
{"SYN", "v", "86", "411212", "11110100100"},
{"ETB", "w", "87", "421112", "11110010100"},
{"CAN", "x", "88", "421211", "11110010010"},
{"EM", "y", "89", "212141", "11011011110"},
{"SUB", "z", "90", "214121", "11011110110"},
{"ESC", "{", "91", "412121", "11110110110"},
{"FS", "|", "92", "111143", "10101111000"},
{"GS", "},", "93", "111341", "10100011110"},
{"RS", "~", "94", "131141", "10001011110"},
{"US", "DEL", "95", "114113", "10111101000"},
{"FNC3", "FNC3", "96", "114311", "10111100010"},
{"FNC2", "FNC2", "97", "411113", "11110101000"},
{"SHIFT", "SHIFT", "98", "411311", "11110100010"},
{"CODEC", "CODEC", "99", "113141", "10111011110"},
{"CODEB", "FNC4", "CODEB", "114131", "10111101110"},
{"FNC4", "CODEA", "CODEA", "311141", "11101011110"},
{"FNC1", "FNC1", "FNC1", "411131", "11110101110"},
{"StartA", "StartA", "StartA", "211412", "11010000100"},
{"StartB", "StartB", "StartB", "211214", "11010010000"},
{"StartC", "StartC", "StartC", "211232", "11010011100"},
{"Stop", "Stop", "Stop", "2331112", "1100011101011"},};
/**
* 打印图片
*
* @param fileName
* @param count
*/
public static void drawImage(String fileName, int count) {
FileInputStream fin = null;
try {
DocFlavor dof = null;
if (fileName.endsWith(".gif")) {
dof = DocFlavor.INPUT_STREAM.GIF;
} else if (fileName.endsWith(".jpg")) {
dof = DocFlavor.INPUT_STREAM.JPEG;
} else if (fileName.endsWith(".png")) {
dof = DocFlavor.INPUT_STREAM.PNG;
}
PrintService ps = PrintServiceLookup.lookupDefaultPrintService();
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(OrientationRequested.PORTRAIT);
pras.add(new Copies(count));
pras.add(PrintQuality.HIGH);
DocAttributeSet das = new HashDocAttributeSet();
// 设置打印纸张的大小(以毫米为单位)
das.add(new MediaPrintableArea(0, 0, 210, 296, MediaPrintableArea.MM));
fin = new FileInputStream(fileName);
Doc doc = new SimpleDoc(fin, dof, das);
DocPrintJob job = ps.createPrintJob();
job.print(doc, pras);
fin.close();
logger.info("打印成功!文件:" + fileName + "数量为:" + count);
} catch (IOException ie) {
ie.printStackTrace();
} catch (PrintException pe) {
pe.printStackTrace();
} finally {
IOUtils.closeQuietly(fin);
}
}
/**
* 生产Code128的条形码的code
*
* @param barCode
* @param encode
* @return
*/
public String getCode(String barCode, String encode) {
String _Text = "";// 返回的参数
List<Integer> _TextNumb = new ArrayList<Integer>();// 2截取位的组合
int _Examine = 105; // 首位
// 编码不能是奇数
if (!((barCode.length() & 1) == 0))
return "";
while (barCode.length() != 0) {
int _Temp = 0;
try {
// Code128 编码必须为数字
_Temp = Integer.valueOf(barCode.substring(0, 2));
} catch (Exception e) {
e.printStackTrace();
return "";
}
// 获得条纹
_Text += getValue(barCode, barCode.substring(0, 2), _Temp);
_TextNumb.add(_Temp);
// 条码截取2个就需要去掉用过的前二位
barCode = barCode.substring(2);
}
if (_TextNumb.size() == 0) {
return "";
}
_Text = getValue(_Examine) + _Text; // 获取开始位
for (int i = 0; i != _TextNumb.size(); i++) {
_Examine += _TextNumb.get(i) * (i + 1);
}
_Examine = _Examine % 103; // 获得校验位
_Text += getValue(_Examine); // 获取校验位
_Text += "1100011101011"; // 结束位
return _Text;
}
/**
* 根据编号获得条纹
*
* @param encode
* @param p_Value
* @param p_SetID
* @return
*/
private String getValue(String encode, String p_Value, int p_SetID) {
return code128[p_SetID][4];
}
/**
* 根据编号获得条纹
* @param p_CodeId
* @return
*/
private String getValue(int p_CodeId) {
return code128[p_CodeId][4];
}
/**
* 生成条码
* @param barString 条码模式字符串
* @param Height 生成的条码高度
* @param path 条码图形
*/
public void kiCode128C(String barString, int Height, String path) {
try {
File myPNG = new File(path);
OutputStream out = new FileOutputStream(myPNG);
if (null == barString || null == out || 0 == barString.length())
return;
int nImageWidth = 0;
char[] cs = barString.toCharArray();
for (int i = 0; i != cs.length; i++) {
nImageWidth = cs.length;
}
BufferedImage bi = new BufferedImage(nImageWidth, m_nImageHeight,
BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
for (int i = 0; i < cs.length; i++) {
if ("1".equals(cs[i] + "")) {
g.setColor(Color.BLACK);
g.fillRect(i, 0, 1, m_nImageHeight);
} else {
g.setColor(Color.WHITE);
g.fillRect(i, 0, 1, m_nImageHeight);
}
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(bi);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* test
*
* @param args
*/
public static void main(String[] args) {
// 打印图片
// new ExpressPrintController().drawImage("/Users/jiangxiulong/Desktop/图片余篇图片/WX20210705-200856@2x.png", 1);
// 生成条形码
String barCode = new ExpressPrintController().getCode("118842807789", "");
new ExpressPrintController().kiCode128C(barCode, 50, "/Users/jiangxiulong/Desktop/图片余篇图片/code128C.jpg");
// 生成二维码
}
}
package com.liquidnet.client.admin;
import com.liquidnet.client.admin.common.utils.security.Md5Utils;
import com.liquidnet.commons.lang.util.MD5;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo;
import com.liquidnet.service.kylin.entity.KylinOrderRefunds;
......@@ -47,4 +49,11 @@ public class TestLocal {
EntitiesVov
);
}
@Test
public void testMd5() {
String str = "a=d";
String signsign = MD5.getStrMD5(str,null);
System.out.print(signsign);
}
}
......@@ -195,7 +195,6 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
}
return true;
} catch (Exception e) {
System.out.println("ERROR DATA = " + e.getMessage());
e.printStackTrace();
return false;
}
......
......@@ -199,7 +199,6 @@ public class DataUtils {
e.printStackTrace();
}
} else {
System.out.println("创建Vo异常");
}
}
......
......@@ -29,6 +29,11 @@
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
</dependencies>
......
package com.liquidnet.service.base.codec.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @description: 该注解表明请求中的数据是加密的,需要进行解密
* @author: DFY
* @time: 2020/3/30 10:58
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DecryptAndVerify {
/** 解密后的参数类型 */
Class<?> decryptedClass();
}
package com.liquidnet.service.base.codec.aspect;
import com.alibaba.fastjson.JSON;
import com.liquidnet.service.base.codec.annotation.DecryptAndVerify;
import com.liquidnet.service.base.codec.exception.DecryptAndVerifyException;
import com.liquidnet.service.base.codec.util.CodecUtil;
import com.liquidnet.service.base.codec.vo.EncryptedReq;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
/**
* @description: 加密请求解密及验证切面
* @author: DFY
* @time: 2020/3/30 11:18
*/
@Slf4j
@Aspect
@Component
public class DecryptAndVerifyAspect {
@Pointcut("@annotation(com.liquidnet.service.base.codec.annotation.DecryptAndVerify)")
public void pointCut() {}
@Around("pointCut()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
Object[] args = joinPoint.getArgs();
if (args == null || args.length == 0) {
throw new DecryptAndVerifyException(joinPoint.getSignature().getName() + ",参数为空");
}
EncryptedReq encryptedReq = null;
for (Object obj : args) {
if (obj instanceof EncryptedReq) {
encryptedReq = (EncryptedReq) obj;
break;
}
}
if (encryptedReq == null) {
throw new DecryptAndVerifyException(joinPoint.getSignature().getName() + ",参数中无待解密类");
}
String decryptedData = decryptAndVerify(encryptedReq);
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
DecryptAndVerify annotation = methodSignature.getMethod().getAnnotation(DecryptAndVerify.class);
if (annotation == null || annotation.decryptedClass() == null) {
throw new DecryptAndVerifyException(joinPoint.getSignature().getName() + ",未指定解密类型");
}
encryptedReq.setData(JSON.parseObject(decryptedData, annotation.decryptedClass()));
return joinPoint.proceed();
}
private String decryptAndVerify(EncryptedReq encryptedReq) {
String sign = CodecUtil.sha1Encrypt(encryptedReq.getEncryptedData() + encryptedReq.getTimestamp());
if (sign.equals(encryptedReq.getSign())) {
return CodecUtil.aesDecrypt(encryptedReq.getEncryptedData());
} else {
throw new DecryptAndVerifyException("验签失败:" + JSON.toJSONString(encryptedReq));
}
}
}
package com.liquidnet.service.base.codec.exception;
/**
* @description: 解密验证异常
* @author: DFY
* @time: 2020/3/30 13:58
*/
public class DecryptAndVerifyException extends RuntimeException {
public DecryptAndVerifyException(String message) {
super(message);
}
}
package com.liquidnet.service.base.codec.util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.util.Base64Utils;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
* @description: 加解密工具类
* @author: DFY
* @time: 2020/3/30 10:25
*/
@Slf4j
public class CodecUtil {
/** AES加密密钥 */
public static final byte[] AES_SECRET_KEY_BYTES = Base64Utils.decodeFromString("XjjkaLnlzAFbR399IP4kdQ==");
/** SHA1加密密钥(用于增加加密的复杂度) */
public static final String SHA1_SECRET_KEY = "QGZUanpSaSy9DEPQFVULJQ==";
/**
* 对数据进行加密,用AES加密再用Base64编码
* @param data 待加密数据
* @return
*/
public static String aesEncrypt(String data) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // 加密算法/工作模式/填充方式
byte[] dataBytes = data.getBytes();
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(AES_SECRET_KEY_BYTES, "AES"));
byte[] result = cipher.doFinal(dataBytes);
return Base64Utils.encodeToString(result);
} catch (Exception e) {
log.error("执行CodecUtil.aesEncrypt失败:data={},异常:{}", data, e);
}
return null;
}
/**
* 对数据进行加密,用AES解密
* @param encryptedDataBase64
* @return
*/
public static String aesDecrypt(String encryptedDataBase64) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // 加密算法/工作模式/填充方式
byte[] dataBytes = Base64Utils.decodeFromString(encryptedDataBase64);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(AES_SECRET_KEY_BYTES, "AES"));
byte[] result = cipher.doFinal(dataBytes);
return new String(result);
} catch (Exception e) {
log.error("执行CodecUtil.aesDecrypt失败:data={},异常:{}", encryptedDataBase64, e);
}
return null;
}
/**
* 对数据进行加密,用SHA1加密再转换为16进制
* @param data
* @return
*/
public static String sha1Encrypt(String data) {
return DigestUtils.sha1Hex(data + SHA1_SECRET_KEY);
}
/** AES密钥长度,支持128、192、256 */
private static final int AES_SECRET_KEY_LENGTH = 128;
private static String generateAESSecretKeyBase64(String key) {
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(AES_SECRET_KEY_LENGTH);
SecretKey secretKey = keyGenerator.generateKey();
return Base64Utils.encodeToString(secretKey.getEncoded());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws Exception {
System.out.println("CodecUtil.AES_SECRET_KEY_BYTES=== "+Base64Utils.encodeToString(CodecUtil.AES_SECRET_KEY_BYTES));
// System.out.println(sha1Encrypt("this is a test"));
// long timestamp = System.currentTimeMillis();
// System.out.println("时间戳:" + timestamp);
//// UserLoginReq userLoginReq = new UserLoginReq("admin", "admin");
//// String data = JSON.toJSONString(userLoginReq);
// String data = "{\"number\":1,\"ticketId\":\"2811887059054592999181\",\"isElectronic\":1,\"isExpress\":0,\"deviceFrom\":\"wap\",\"actual\":0.01,\"performanceId\":\"2811713813327872196937\",\"timeId\":\"2811766812553216086853\",\"returnUrl\":\"http://testm.zhengzai.tv/#/order/status?order_type=ticket&order_id=\",\"showUrl\":\"http://testm.zhengzai.tv/#/order/status?order_type=ticket&order_id=\",\"expressType\":2,\"agentId\":0,\"payType\":\"alipay\"}";
// System.out.println("加密前的数据:" + data);
// String encryptedData = CodecUtil.aesEncrypt(data);
// System.out.println("加密后的数据:" + encryptedData);
// String sign = CodecUtil.sha1Encrypt(encryptedData + timestamp);
// System.out.println("签名:" + sign);
// EncryptedReq<PayOrderParam> encryptedReq = new EncryptedReq<>();
// encryptedReq.setEncryptedData(encryptedData);
// encryptedReq.setTimestamp(timestamp);
// encryptedReq.setSign(sign);
// System.out.println("加密后的请求:" + JSON.toJSONString(encryptedReq));
}
}
package com.liquidnet.service.base.codec.vo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @description: 加密请求
* @author: DFY
* @time: 2020/3/30 10:16
*/
@Data
public class EncryptedReq<T> {
/** 签名 */
@NotBlank(message = "用户签名不能为空")
private String sign;
/** 加密请求数据 */
@NotBlank(message = "加密请求不能为空")
private String encryptedData;
/** 原始请求数据(解密后回填到对象) */
private T data;
/** 请求的时间戳 */
@NotNull(message = "时间戳不能为空")
private Long timestamp;
}
......@@ -89,12 +89,7 @@ public class KylinOrderTicketsController {
@ApiOperation("想要退款订单详情")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<KylinOrderTicketPreVo> toOrderRefundDetails(@RequestParam(value = "orderId", required = false) @NotNull(message = "订单id不能为空") String orderId) {
KylinOrderTicketPreVo vo = orderTicketsService.toOrderRefundDetails(orderId);
if (null == vo) {
return ResponseDto.failure(ErrorMapping.get("20003"));
} else {
return ResponseDto.success(vo);
}
return orderTicketsService.toOrderRefundDetails(orderId);
}
@PostMapping("sendOrderRefunds")
......@@ -119,7 +114,7 @@ public class KylinOrderTicketsController {
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<OrderRefundVo> orderRefundDetails(@RequestParam(value = "orderId", required = true) @NotNull(message = "订单id不能为空") String orderId,
@RequestParam(value = "orderRefundId", required = true) @NotNull(message = "退款订单id不能为空") String orderRefundId) {
return orderTicketsService.orderRefundDetails(orderId, orderRefundId) == null ? ResponseDto.failure("获取失败") : ResponseDto.success(orderTicketsService.orderRefundDetails(orderId, orderRefundId));
return orderTicketsService.orderRefundDetails(orderId, orderRefundId);
}
@PostMapping("orderRefundWithdraw")
......
package com.liquidnet.service.kylin.controller;
import com.liquidnet.service.kylin.service.impl.OrderRefundOvertimeServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 退款回掉
* </p>
*
* @author jiangxiulong
* @since 2021-06-11 6:10 下午
*/
//@Api(tags = "前端-退款回调")
//@RestController
//@RequestMapping("refund")
public class OrderRefundOvertimeController {
// @Autowired
// private OrderRefundOvertimeServiceImpl orderRefundOvertimeServiceImpl;
//
// @PostMapping("apply")
// @ApiOperation("超时退款")
// @ApiImplicitParams({
// @ApiImplicitParam(type = "body", dataType = "String", name = "orderTicketsId", value = "订单ID", required = true),
// })
// public Boolean refundApply(@RequestParam() String orderTicketsId) {
// try {
// Boolean res = orderRefundOvertimeServiceImpl.refundApply(orderTicketsId);
// if (res) {
// return true;
// } else {
// return false;
// }
// } catch (Exception e) {
// return false;
// }
// }
}
......@@ -23,7 +23,7 @@ import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
import com.liquidnet.service.kylin.entity.KylinOrderTicketStatus;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
import com.liquidnet.service.kylin.utils.DataUtils;
import com.liquidnet.service.kylin.utils.MongoVoUtils;
import com.liquidnet.service.kylin.utils.OrderUtils;
import com.mongodb.BasicDBObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
......@@ -56,7 +56,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
@Autowired
private DataUtils dataUtils;
@Autowired
private MongoVoUtils mongoVoUtils;
private OrderUtils orderUtils;
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
......@@ -270,7 +270,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
}
@Override
public KylinOrderTicketPreVo toOrderRefundDetails(String orderId) {
public ResponseDto<KylinOrderTicketPreVo> toOrderRefundDetails(String orderId) {
try {
KylinOrderTicketPreVo vo = new KylinOrderTicketPreVo();
String uid = CurrentUtil.getCurrentUid();
......@@ -278,7 +278,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList = dataUtils.getOrderRefundVoByOrderId(orderTicketVo.getOrderTicketsId());
if (!orderTicketVo.getUserId().equals(uid)) {
return null;
return ResponseDto.failure(ErrorMapping.get("20003"));
}
List<KylinOrderTicketEntitiesVo> kylinOrderTicketEntitiesVoList = orderTicketVo.getEntitiesVoList();
List<KylinOrderTicketEntitiesPreRefundVo> kylinOrderTicketEntitiesPreRefundVos = new ArrayList<>();
......@@ -301,15 +301,15 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
BeanUtils.copyProperties(orderTicketVo, vo);
vo.setIsTrueName(performanceVo.getIsTrueName());
vo.setEntitiesPreRefundVos(kylinOrderTicketEntitiesPreRefundVos);
return vo;
return ResponseDto.success(vo);
} catch (Exception e) {
e.printStackTrace();
return null;
return ResponseDto.failure(ErrorMapping.get("20030"));
}
}
@Override
public OrderRefundVo orderRefundDetails(String orderId, String orderRefundId) {
public ResponseDto<OrderRefundVo> orderRefundDetails(String orderId, String orderRefundId) {
try {
OrderRefundVo vo = new OrderRefundVo();
String uid = CurrentUtil.getCurrentUid();
......@@ -317,15 +317,15 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
if (!orderTicketVo.getUserId().equals(uid)) {
return null;
return ResponseDto.failure(ErrorMapping.get("20003"));
}
orderTicketVo.setFieldName(performanceVo.getFieldName());
KylinOrderRefundsVo kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId);
vo.setKylinOrderRefundsVoBaseList(kylinOrderRefundsVoBase);
vo.setOrderTicketVo(orderTicketVo);
return vo;
return ResponseDto.success(vo);
} catch (Exception e) {
return null;
return ResponseDto.failure(ErrorMapping.get("20030"));
}
}
......@@ -458,7 +458,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
orderObject
);
dataUtils.delOrderTicketRedis(orderTicketsId);
mongoVoUtils.resetOrderListVo(orderTicketVo.getUserId(), 2, orderTicketsId, null);
orderUtils.resetOrderListVo(orderTicketVo.getUserId(), 2, orderTicketsId, null);
// 入场人
for (KylinOrderRefundEntitiesVo item : refundEntities) {
......
package com.liquidnet.service.kylin.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.liquidnet.common.mq.constant.MQConst;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.SqlMapping;
......@@ -11,14 +9,11 @@ import com.liquidnet.service.kylin.dto.vo.mongo.*;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.utils.DataUtils;
import com.liquidnet.service.kylin.utils.MongoVoUtils;
import com.liquidnet.service.kylin.utils.OrderUtils;
import com.mongodb.BasicDBObject;
import com.mongodb.client.model.FindOneAndUpdateOptions;
import com.mongodb.client.model.ReturnDocument;
import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.bson.Document;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -51,7 +46,7 @@ public class KylinRefundsStatusServiceImpl {
private DataUtils dataUtils;
@Autowired
private MongoVoUtils mongoVoUtils;
private OrderUtils orderUtils;
@Autowired
private RabbitTemplate rabbitTemplate;
......@@ -90,7 +85,7 @@ public class KylinRefundsStatusServiceImpl {
orderObject
);
dataUtils.delOrderTicketRedis(orderTicketsId);
mongoVoUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderTicketsId, null);
orderUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderTicketsId, null);
// 订单入场人表 和 缓存
......@@ -228,7 +223,7 @@ public class KylinRefundsStatusServiceImpl {
orderObject
);
dataUtils.delOrderTicketRedis(orderInfo.getOrderTicketsId());
mongoVoUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderInfo.getOrderTicketsId(), null);
orderUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderInfo.getOrderTicketsId(), null);
// 订单入场人表 和 缓存
......
package com.liquidnet.service.kylin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.mapper.*;
import com.liquidnet.service.kylin.service.IKylinOrderRefundsService;
import com.liquidnet.service.kylin.utils.DataUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 订单退款表 服务实现类 处理逻辑判断
* </p>
*
* @author jiangxiulong
* @since 2021-05-26
*/
@Slf4j
@Service
public class OrderRefundOvertimeServiceImpl implements IKylinOrderRefundsService {
@Autowired
private KylinRefundsStatusServiceImpl kylinRefundsStatusServiceImpl;
@Autowired
MongoTemplate mongoTemplate;
@Autowired
private DataUtils dataUtils;
public Boolean refundApply(String orderTicketsId) {
KylinOrderTicketVo orderInfo = dataUtils.getOrderTicketVo(orderTicketsId);
// 快递费 未进行判断
Double RefundPriceExpress = orderInfo.getPriceExpress().doubleValue();
double priceActual = orderInfo.getPriceActual().doubleValue();
double priceExpress = orderInfo.getPriceExpress().doubleValue();
// 查询订单入场人
List<KylinOrderTicketEntitiesVo> entitiesList = orderInfo.getEntitiesVoList();
if (!CollectionUtil.isEmpty(entitiesList)) {
int allEntitiesCount = entitiesList.size();// 总入场人数量 排出未付款的 用来计算单入场人的价格
double onePrice = (priceActual - priceExpress) / allEntitiesCount;//单价
for (KylinOrderTicketEntitiesVo entities : entitiesList) {
entities.setCanRefundedPrice(BigDecimal.valueOf(onePrice));
}
}
List<String> ticketEntityIds = entitiesList.stream().map(KylinOrderTicketEntities -> KylinOrderTicketEntities.getOrderTicketEntitiesId()).collect(Collectors.toList());
List<Double> entitiesPrice = entitiesList.stream().map(KylinOrderTicketEntities -> KylinOrderTicketEntities.getCanRefundedPrice().doubleValue()).collect(Collectors.toList());
boolean res = kylinRefundsStatusServiceImpl.orderTicketRefunding(
orderInfo, orderTicketsId,
RefundPriceExpress,
ticketEntityIds, entitiesPrice
);
if (res) {
// 超时直接退还库存
for (KylinOrderTicketEntitiesVo entitiesInfo : entitiesList) {
// 因固定状态为未支付 所以无需判断 entitiesInfo.getIsPayment() == KylinTableStatusConst.ENTITIES_IS_PAYMENT3
dataUtils.changeSurplusGeneral(entitiesInfo.getTicketId(), 1);
dataUtils.changeBuyInfo(orderInfo.getUserId(), entitiesInfo.getEnterIdCode(), orderInfo.getPerformanceId(), entitiesInfo.getTicketId(), -1);
}
return true;
} else {
return false;
}
}
}
......@@ -32,20 +32,6 @@ public class DataUtils {
private MongoTemplate mongoTemplate;
@Autowired
private RedisUtil redisUtil;
@Autowired
private MongoVoUtils mongoVoUtils;
@Autowired
private RedisTemplate redisTemplate;
/**
* 初始化普通库存
*
* @param ticketId 票id
* @param totalGeneral 普通库存
*/
public void setSurplusGeneral(String ticketId, int totalGeneral) {
redisUtil.set(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL, totalGeneral);
}
/**
* 获取普通剩余库存
......@@ -57,21 +43,6 @@ public class DataUtils {
return (int) redisUtil.get(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL);
}
/**
* 修改普通库存 并 返回修改后的数量
*
* @param ticketId 票id
* @param surplusGeneral 普通库存
* @return 普通剩余库存
*/
public int changeSurplusGeneral(String ticketId, int surplusGeneral) {
if (surplusGeneral > 0) {
return (int) redisUtil.incr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL, surplusGeneral);
} else {
return (int) redisUtil.decr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL, Math.abs(surplusGeneral));
}
}
/**
* 判断 当前库存是否售罄
*
......@@ -86,41 +57,6 @@ public class DataUtils {
}
}
/**
* 初始化兑换库存
*
* @param ticketId 票id
* @param totalExchange 兑换库存
*/
public void setSurplusExchange(String ticketId, int totalExchange) {
redisUtil.set(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_EXCHANGE, totalExchange);
}
/**
* 获取兑换剩余库存
*
* @param ticketId 票id
* @return 兑换剩余库存
*/
public int getSurplusExchange(String ticketId) {
return (int) redisUtil.get(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_EXCHANGE);
}
/**
* 变更兑换库存 并 返回 修改后的数量
*
* @param ticketId 票id
* @param surplusExchange 普通库存
* @return 兑换剩余库存
*/
public int changeSurplusExchange(String ticketId, int surplusExchange) {
if (surplusExchange > 0) {
return (int) redisUtil.incr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_EXCHANGE, surplusExchange);
} else {
return (int) redisUtil.decr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_EXCHANGE, Math.abs(surplusExchange));
}
}
public void setOrderList(String userId, List<KylinOrderListVo> vo) {
redisUtil.set(KylinRedisConst.ORDER_LIST + userId, vo);
}
......@@ -162,29 +98,6 @@ public class DataUtils {
redisUtil.del(KylinRedisConst.ORDER + orderId);
}
/**
* 获取 验票账号 vo
*
* @param checkUserId
* @return
*/
public KylinCheckUserVo getCheckUserVo(String checkUserId) {
if (redisUtil.hasKey(KylinRedisConst.CHECK_USER + checkUserId)) {
} else {
KylinCheckUserVo ticketData = mongoTemplate.findOne(Query.query(Criteria.where("checkUserId").is(checkUserId)), KylinCheckUserVo.class, KylinCheckUserVo.class.getSimpleName());
redisUtil.set(KylinRedisConst.CHECK_USER + checkUserId, ticketData);
}
return (KylinCheckUserVo) redisUtil.get(KylinRedisConst.CHECK_USER + checkUserId);
}
/**
* 删除 验票账号 redis
*
* @param checkUserId
*/
public void delCheckUserRedis(String checkUserId) {
redisUtil.del(KylinRedisConst.CHECK_USER + checkUserId);
}
/**
* 获取 验票账号关系 vo
......@@ -201,15 +114,6 @@ public class DataUtils {
return (KylinCheckUserPerformanceVo) redisUtil.get(KylinRedisConst.CHECK_USER_RELATION + checkUserId);
}
/**
* 删除 验票账号关系 vo
*
* @param checkUserId
*/
public void delCheckUserRelationRedis(String checkUserId) {
redisUtil.del(KylinRedisConst.CHECK_USER_RELATION + checkUserId);
}
/**
* 获取入场须知
*
......@@ -225,127 +129,6 @@ public class DataUtils {
}
public void updatePerformanceMongo(String performanceIds, KylinPerformanceVo paramVo) {
//查询 mysql 数据
KylinPerformanceVo vo;
vo = paramVo;
if (vo != null) {
try {
//删除 mongo数据
mongoTemplate.remove(Query.query(Criteria.where("performancesId").is(performanceIds)), KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
} catch (Exception e) {
e.printStackTrace();
}
try {
//新增 mongo数据
mongoTemplate.insert(vo, KylinPerformanceVo.class.getSimpleName());
} catch (Exception e) {
e.printStackTrace();
}
try {
//删除redis
redisUtil.del(KylinRedisConst.PERFORMANCES + performanceIds);
// 大龙相关 演出列表
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_CITYNAME + vo.getCityName());
redisUtil.del(KylinRedisConst.PERFORMANCES_ROADLIST + vo.getRoadShowId());
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_SYSTEM_RECOMMEND);
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_RECOMMEND);
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_NOTICE);
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_EXCLUSIVE);
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("创建Vo异常");
}
}
/**
* @param performanceId 演出id
* @param ticketId 票种id
* @param buyCount 购买数量 大于 0 增加 小于 0 减少 对应 支付 退款表
*/
public void changeBuyInfo(String userId, String idCard, String performanceId, String ticketId, int buyCount) {
String redisKey;
KylinPerformanceVo vo = getPerformanceVo(performanceId);
int isTrueName = vo.getIsTrueName();
String useTime = "";
HashMap<String, ArrayList<String>> allTicketId = new HashMap<>();
for (int x = 0; x < vo.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = vo.getTicketTimeList().get(x);
ArrayList<String> ticketList = new ArrayList<>();
for (int y = 0; y < timeItem.getTicketList().size(); y++) {
KylinTicketVo ticketItem = timeItem.getTicketList().get(y);
if (ticketItem.getType() == 1) {
ticketList.add(ticketItem.getTicketsId());
}
if (ticketItem.getTicketsId().equals(ticketId)) {
useTime = ticketItem.getUseStart();
}
}
allTicketId.put(timeItem.getUseStart(), ticketList);
}
if (0 == isTrueName) {
redisKey = KylinRedisConst.USERID_BUY_INFO + userId;
} else {
redisKey = KylinRedisConst.IDCARD_BUY_INFO + idCard;
}
String performanceIdKey = redisKey + ":" + KylinRedisConst.PERFORMANCE_ID + ":" + performanceId;
String ticketIdKey = redisKey + ":" + KylinRedisConst.TICKET_ID + ":" + ticketId;
String ticketUseTimeKey = ticketIdKey + ":" + KylinRedisConst.USE_TIME;
redisUtil.set(ticketUseTimeKey, useTime);
if (buyCount > 0) {
redisUtil.incr(ticketIdKey, buyCount);
redisUtil.incr(performanceIdKey, buyCount);
}else{
redisUtil.decr(ticketIdKey, Math.abs(buyCount));
redisUtil.decr(performanceIdKey, Math.abs(buyCount));
}
}
// 获取 用户维度 演出购买数量
public int getUserPBuyCount(String userId, String performanceId) {
try {
return (int) redisUtil.get(KylinRedisConst.USERID_BUY_INFO + userId + ":" + KylinRedisConst.PERFORMANCE_ID + ":" + performanceId);
} catch (Exception e) {
return 0;
}
}
// 获取 用户维度 票种购买数量
public int getUserTBuyCount(String userId, String ticketId) {
try {
return (int) redisUtil.get(KylinRedisConst.USERID_BUY_INFO + userId + ":" + KylinRedisConst.TICKET_ID + ":" + ticketId);
} catch (Exception e) {
return 0;
}
}
// 获取 证件维度 演出购买数量
public int getIdCardPBuyCount(String idCard, String performanceId) {
try {
return (int) redisUtil.get(KylinRedisConst.IDCARD_BUY_INFO + idCard + ":" + KylinRedisConst.PERFORMANCE_ID + ":" + performanceId);
} catch (Exception e) {
return 0;
}
}
// 获取 证件维度 票种购买数量
public int getIdCardTBuyCount(String idCard, String ticketId) {
try {
return (int) redisUtil.get(KylinRedisConst.IDCARD_BUY_INFO + idCard + ":" + KylinRedisConst.TICKET_ID + ":" + ticketId);
} catch (Exception e) {
return 0;
}
}
/**
* 删除订单redis
*
......@@ -524,19 +307,6 @@ public class DataUtils {
return (List<KylinPerformanceVo>) redisUtil.get(redisKey);
}
/**
* 获取所有城市演出列表redis
*/
public List<KylinPerformanceVo> getPerformancesListAll() {
List<KylinPerformanceVo> list = new ArrayList<>();
Set<String> keys = redisTemplate.keys(KylinRedisConst.PERFORMANCES_LIST_ALL);
for (String key : keys) {
List<KylinPerformanceVo> OneCityList = (List<KylinPerformanceVo>) redisUtil.get(key);
list.addAll(OneCityList);
}
return list;
}
/**
* 获取巡演列表redis
*/
......
package com.liquidnet.service.kylin.utils;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
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.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.mapper.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
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 java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Component
public class MongoVoUtils {
@Autowired
private RedisUtil redisUtil;
@Autowired
private DataUtils dataUtils;
@Autowired
private MongoTemplate mongoTemplate;
/**
* @param userId 用户id
* @param type 1新增 2修改
* @param orderId 订单id [需要新增或者修改的订单id]
*/
public Boolean resetOrderListVo(String userId, Integer type, String orderId, KylinOrderTicketVo dataSingle) {
List<KylinOrderListVo> vo = new ArrayList<>();
List<KylinOrderListVo> redisVo = new ArrayList();
KylinOrderListVo voItem = new KylinOrderListVo();
KylinOrderTicketVo data;
if (dataSingle == null) {
data = dataUtils.getOrderTicketVo(orderId);
} else {
data = dataSingle;
}
BeanUtils.copyProperties(data, voItem);
List<KylinOrderListVo> redisData = dataUtils.getOrderList(userId);
if (type == 1) {
redisVo.add(voItem);
if (redisData.size() > 0) {
if (redisData.get(0).getOrderTicketsId().equals(orderId)) {
redisData.remove(0);
}
}
}
redisVo.addAll(redisData);
switch (type) {
case 1:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (i == 0) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
if (redisVo.size() == 0) {
vo.add(voItem);
}
dataUtils.setOrderList(userId, vo);
return true;
case 2:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (redisVo.get(i).getOrderTicketsId().equals(orderId)) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
dataUtils.setOrderList(userId, vo);
return true;
default:
return false;
}
}
}
......@@ -7,7 +7,10 @@ import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.base.ResponseDto;
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.returns.KylinOrderListVo;
import io.swagger.models.auth.In;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
......@@ -21,110 +24,67 @@ public class OrderUtils {
@Autowired
private DataUtils dataUtils;
@Autowired
private RedisUtil redisUtil;
public String judgeOrderLimit(
int type,
String userId,
String idCard,
String performanceId,
String ticketId,
int performanceLimitCount,
int performanceMemberLimitCount,
int ticketLimitCount,
int ticketMemberLimitCount,
int performanceBuyCount,
int ticketBuyCount,
int memberType,
int isTrueName
) {
Integer[] integers;
System.out.println("TYPE = " + type);
if (101 == type) {
integers = festivalOrderLimit(userId, idCard, performanceId, ticketId, performanceBuyCount, ticketBuyCount, isTrueName);
/**
* @param userId 用户id
* @param type 1新增 2修改
* @param orderId 订单id [需要新增或者修改的订单id]
*/
public Boolean resetOrderListVo(String userId, Integer type, String orderId, KylinOrderTicketVo dataSingle) {
List<KylinOrderListVo> vo = new ArrayList<>();
List<KylinOrderListVo> redisVo = new ArrayList();
KylinOrderListVo voItem = new KylinOrderListVo();
KylinOrderTicketVo data;
if (dataSingle == null) {
data = dataUtils.getOrderTicketVo(orderId);
} else {
integers = roadShowOrderLimit(userId, idCard, performanceId, ticketId, performanceBuyCount, ticketBuyCount, isTrueName);
}
System.out.println("integers PERFORMANCE= " + integers[0]);
System.out.println("integers TICKETS= " + integers[1]);
return judgeMemberType(performanceLimitCount, performanceMemberLimitCount, ticketLimitCount, ticketMemberLimitCount, memberType, integers[0], integers[1]);
}
public Integer[] roadShowOrderLimit(
String userId,
String idCard,
String performanceId,
String ticketId,
int performanceBuyCount,
int ticketBuyCount,
int isTrueName
) {
if (1 == isTrueName) {//实名
performanceBuyCount += dataUtils.getIdCardPBuyCount(idCard, performanceId);
ticketBuyCount += dataUtils.getIdCardTBuyCount(idCard, ticketId);
} else {//非实名
performanceBuyCount += dataUtils.getUserPBuyCount(userId, performanceId);
ticketBuyCount += dataUtils.getUserTBuyCount(userId, ticketId);
data = dataSingle;
}
return new Integer[]{performanceBuyCount, ticketBuyCount};
}
public Integer[] festivalOrderLimit(
String userId,
String idCard,
String performanceId,
String ticketId,
int performanceBuyCount,
int ticketBuyCount,
int isTrueName
) {
if (1 == isTrueName) {//实名
performanceBuyCount += dataUtils.getIdCardPBuyCount(idCard, performanceId);
ticketBuyCount += dataUtils.getIdCardTBuyCount(idCard, ticketId);
} else {//非实名
performanceBuyCount += dataUtils.getUserPBuyCount(userId, performanceId);
ticketBuyCount += dataUtils.getUserTBuyCount(userId, ticketId);
}
return new Integer[]{performanceBuyCount, ticketBuyCount};
}
public String judgeMemberType(int performanceLimitCount, int performanceMemberLimitCount, int ticketLimitCount, int ticketMemberLimitCount, int memberType, int performanceBuyCount, int ticketBuyCount) {
if (memberType == 1 || memberType == 2) {
if (performanceBuyCount > performanceMemberLimitCount && performanceMemberLimitCount != 0) {
return "该演出只能购买" + performanceMemberLimitCount + "张";//超过演出维度购买量
}
if (ticketBuyCount > ticketMemberLimitCount && ticketMemberLimitCount != 0) {
return "该票种只能购买" + ticketMemberLimitCount + "张";//超过票维度购买量
}
} else {//非会员区间
if (performanceBuyCount > performanceLimitCount && performanceLimitCount != 0) {
return "该演出只能购买" + performanceLimitCount + "张";//超过演出维度购买量
}
if (ticketBuyCount > ticketLimitCount && ticketLimitCount != 0) {
return "该票种只能购买" + ticketLimitCount + "张";//超过票维度购买量
BeanUtils.copyProperties(data, voItem);
List<KylinOrderListVo> redisData = dataUtils.getOrderList(userId);
if (type == 1) {
redisVo.add(voItem);
if (redisData.size() > 0) {
if (redisData.get(0).getOrderTicketsId().equals(orderId)) {
redisData.remove(0);
}
}
}
return "";
}
public boolean isMember(String uid) {
String rk = AdamRedisConst.INFO_USER_MEMBER.concat(uid);
AdamUserMemberVo vo = (AdamUserMemberVo) redisUtil.get(rk);
return null != vo && vo.isActive();
}
public AdamAddressesVo getAddress(String uid, String addressesId) {
String rk = AdamRedisConst.INFO_ADDRESSES.concat(uid);
List<AdamAddressesVo> vos = (List<AdamAddressesVo>) redisUtil.get(rk);
return vos.stream().filter(r -> r.getAddressesId().equals(addressesId)).findAny().orElse(null);
}
redisVo.addAll(redisData);
public AdamEntersVo getEnters(String uid, String entersId) {
String rk = AdamRedisConst.INFO_ENTERS.concat(uid);
List<AdamEntersVo> vos = (List<AdamEntersVo>) redisUtil.get(rk);
return vos.stream().filter(r -> r.getEntersId().equals(entersId)).findAny().orElse(null);
switch (type) {
case 1:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (i == 0) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
if (redisVo.size() == 0) {
vo.add(voItem);
}
dataUtils.setOrderList(userId, vo);
return true;
case 2:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (redisVo.get(i).getOrderTicketsId().equals(orderId)) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
dataUtils.setOrderList(userId, vo);
return true;
default:
return false;
}
}
}
......@@ -33,6 +33,7 @@
20028=订单已失效
20027=您已支付请刷新再试
20029=未选择支付方式
20030=无权查看
#APP PARTNER
20101=添加失败
......
......@@ -3,6 +3,8 @@ package com.liquidnet.service.order.controller;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.codec.annotation.DecryptAndVerify;
import com.liquidnet.service.base.codec.vo.EncryptedReq;
import com.liquidnet.service.kylin.dto.param.PayAgainParam;
import com.liquidnet.service.kylin.dto.param.PayOrderParam;
import com.liquidnet.service.kylin.dto.param.SyncOrderParam;
......@@ -43,6 +45,15 @@ public class KylinOrderTicketsController {
return orderTicketsOrderService.checkCanOrder(payOrderParam);
}
@DecryptAndVerify(decryptedClass = PayOrderParam.class)
@PostMapping("pre2")
@ApiOperation("下单2")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<PayResultVo> checkCanOrder2(@RequestBody @Valid EncryptedReq<PayOrderParam> encryptedReq) {
PayOrderParam payOrderParam = encryptedReq.getData();
return orderTicketsOrderService.checkCanOrder(payOrderParam);
}
@PostMapping("payAgain")
@ApiOperation("再次支付")
@ApiResponse(code = 200, message = "接口返回对象参数")
......
package com.liquidnet.service.order.service.impl;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
import com.liquidnet.common.mq.constant.MQConst;
......@@ -21,15 +19,19 @@ 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.middle.message.MessageConfigVo;
import com.liquidnet.service.kylin.dto.vo.middle.message.MessageDataVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderRefundEntitiesVo;
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.returns.*;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.dto.vo.returns.PayResultVo;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
import com.liquidnet.service.kylin.entity.KylinOrderTicketRelations;
import com.liquidnet.service.kylin.entity.KylinOrderTicketStatus;
import com.liquidnet.service.kylin.entity.KylinOrderTickets;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsOrderService;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
import com.liquidnet.service.order.utils.*;
import com.liquidnet.service.order.utils.DataUtils;
import com.liquidnet.service.order.utils.OrderUtils;
import com.liquidnet.service.order.utils.OtherUtils;
import com.liquidnet.service.order.utils.TaobaoTicketUtils;
import com.mongodb.BasicDBObject;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.AlibabaDamaiMevOpenBatchpushticketRequest;
......@@ -84,8 +86,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
@Autowired
private RedisLockUtil redisLockUtil;
@Autowired
private MongoVoUtils mongoVoUtils;
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private MongoConverter mongoConverter;
......@@ -587,7 +587,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
log.debug("mongo 添加 订单 -> time:" + (currentTime) + "毫秒");
currentTime = System.currentTimeMillis();
mongoVoUtils.resetOrderListVo(uid, 1, orderTicketVo.getOrderTicketsId(), orderTicketVo);
orderUtils.resetOrderListVo(uid, 1, orderTicketVo.getOrderTicketsId(), orderTicketVo);
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 修改订单列表 -> time:" + (currentTime) + "毫秒");
......@@ -757,7 +757,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
KylinOrderTicketEntities orderTicketEntities = new KylinOrderTicketEntities();
if (orderTicketData.getStatus() == 2) {
mongoVoUtils.resetOrderListVo(orderTicketData.getUserId(), 2, orderTicketData.getOrderTicketsId(), null);
orderUtils.resetOrderListVo(orderTicketData.getUserId(), 2, orderTicketData.getOrderTicketsId(), null);
log.error("订单号位 {} 的订单超时支付", syncOrderParam.getOrder_code());
orderRefundsCallbackService.refundApply(orderTicketData.getOrderTicketsId());
} else if (orderTicketData.getStatus() == 3 || orderTicketData.getStatus() == 4) {
......@@ -818,7 +818,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
//生成vo redis
dataUtils.delOrderTicketRedis(orderTickets.getOrderTicketsId());
mongoVoUtils.resetOrderListVo(orderTicketData.getUserId(), 2, orderTicketData.getOrderTicketsId(), null);
orderUtils.resetOrderListVo(orderTicketData.getUserId(), 2, orderTicketData.getOrderTicketsId(), null);
// 发短信
KylinPerformanceVo performanceData = dataUtils.getPerformanceVo(orderTicketData.getPerformanceId());
......
......@@ -15,7 +15,7 @@ import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.order.utils.DataUtils;
import com.liquidnet.service.order.utils.MongoVoUtils;
import com.liquidnet.service.order.utils.OrderUtils;
import com.mongodb.BasicDBObject;
import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j;
......@@ -52,7 +52,7 @@ public class KylinRefundsStatusServiceImpl {
private DataUtils dataUtils;
@Autowired
private MongoVoUtils mongoVoUtils;
private OrderUtils orderUtils;
@Autowired
private RabbitTemplate rabbitTemplate;
......@@ -91,7 +91,7 @@ public class KylinRefundsStatusServiceImpl {
orderObject
);
dataUtils.delOrderTicketRedis(orderTicketsId);
mongoVoUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderTicketsId, null);
orderUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderTicketsId, null);
// 订单入场人表 和 缓存
......@@ -229,7 +229,7 @@ public class KylinRefundsStatusServiceImpl {
orderObject
);
dataUtils.delOrderTicketRedis(orderInfo.getOrderTicketsId());
mongoVoUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderInfo.getOrderTicketsId(), null);
orderUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderInfo.getOrderTicketsId(), null);
// 订单入场人表 和 缓存
......
......@@ -89,20 +89,6 @@ public class DataUtils {
redisUtil.del(KylinRedisConst.ORDER + orderId);
}
/**
* 获取入场须知
*
* @param enterInfoId
* @return
*/
public String getEnterInfo(String enterInfoId) {
if (redisUtil.hasKey(KylinRedisConst.ENTER_INFO + enterInfoId)) {
} else {
return "入场须知";
}
return (String) redisUtil.get(KylinRedisConst.ENTER_INFO + enterInfoId);
}
/**
* @param performanceId 演出id
......@@ -145,15 +131,13 @@ public class DataUtils {
if (buyCount > 0) {
redisUtil.incr(ticketIdKey, buyCount);
redisUtil.incr(performanceIdKey, buyCount);
}else{
} else {
redisUtil.decr(ticketIdKey, Math.abs(buyCount));
redisUtil.decr(performanceIdKey, Math.abs(buyCount));
}
}
// 获取 用户维度 演出购买数量
public int getUserPBuyCount(String userId, String performanceId) {
try {
......@@ -214,82 +198,8 @@ public class DataUtils {
return (KylinPerformanceVo) redisUtil.get(KylinRedisConst.PERFORMANCES + performanceId);
}
public KylinOrderRefundsVo getOrderRefundVo(String orderRefundsId){
if (redisUtil.hasKey(KylinRedisConst.ORDER_REFUND + orderRefundsId)) {
} else {
KylinOrderRefundsVo orderRefundsVo = mongoTemplate.findOne(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)), KylinOrderRefundsVo.class, KylinOrderRefundsVo.class.getSimpleName());
List<KylinOrderRefundEntitiesVo> kylinOrderTicketEntitiesVoList = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)), KylinOrderRefundEntitiesVo.class, KylinOrderRefundEntitiesVo.class.getSimpleName());
List<KylinOrderRefundPicVo> picVos = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)),KylinOrderRefundPicVo.class,KylinOrderRefundPicVo.class.getSimpleName());
orderRefundsVo.setOrderRefundEntitiesVoList(kylinOrderTicketEntitiesVoList);
orderRefundsVo.setOrderRefundPicVos(picVos);
redisUtil.set(KylinRedisConst.ORDER_REFUND + orderRefundsId, orderRefundsVo);
}
return (KylinOrderRefundsVo) redisUtil.get(KylinRedisConst.ORDER_REFUND + orderRefundsId);
}
public List<KylinOrderRefundsVo> getOrderRefundVoByOrderId(String orderId){
if (redisUtil.hasKey(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId)) {
} else {
List<KylinOrderRefundsVo> orderRefundsVoList = new ArrayList<>();
List<KylinOrderRefundsVo> data = mongoTemplate.find(Query.query(Criteria.where("orderTicketsId").is(orderId)), KylinOrderRefundsVo.class, KylinOrderRefundsVo.class.getSimpleName());
for (KylinOrderRefundsVo item : data) {
List<KylinOrderRefundEntitiesVo> kylinOrderTicketEntitiesVoList = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(item.getOrderRefundsId())), KylinOrderRefundEntitiesVo.class, KylinOrderRefundEntitiesVo.class.getSimpleName());
if(kylinOrderTicketEntitiesVoList.size()>1){
continue;
}
item.setOrderRefundEntitiesVoList(kylinOrderTicketEntitiesVoList);
List<KylinOrderRefundPicVo> picVos = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(item.getOrderRefundsId())),KylinOrderRefundPicVo.class,KylinOrderRefundPicVo.class.getSimpleName());
item.setOrderRefundPicVos(picVos);
orderRefundsVoList.add(item);
}
redisUtil.set(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId, orderRefundsVoList);
}
return (List<KylinOrderRefundsVo>) redisUtil.get(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId);
}
public void delOrderRefundVo(String orderRefundsId){
redisUtil.del(KylinRedisConst.ORDER_REFUND + orderRefundsId);
}
public void delOrderRefundVoByOrderId(String orderId){
public void delOrderRefundVoByOrderId(String orderId) {
redisUtil.del(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId);
}
/**
* 获取可退款票单价格
* @param orderTicketVo 订单vo数据
* @param orderTicketEntitiesId 票单id
* @return
*/
public BigDecimal getCanRefundOrderEntitiesPrice(KylinOrderTicketVo orderTicketVo, List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList, String orderTicketEntitiesId){
//单票实付价格
BigDecimal singlePrice = orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).divide(BigDecimal.valueOf(orderTicketVo.getNumber()));
//单票剩余未退款金额
BigDecimal canRefundSinglePrice = new BigDecimal("0.00");
for (KylinOrderTicketEntitiesVo item : orderTicketVo.getEntitiesVoList()) {
if (item.getOrderTicketEntitiesId().equals(orderTicketEntitiesId)) {
canRefundSinglePrice = singlePrice.subtract(item.getRefundPrice()==null?BigDecimal.valueOf(0.00):item.getRefundPrice());
}
}
//订单锁定金额
BigDecimal orderLockPrice = new BigDecimal("0.00");
for (KylinOrderRefundsVo refundVo : kylinOrderRefundsVoBaseList) {
int status = refundVo.getStatus();
if (status == 0 || status == 3 || status == 5 || status == 7) { //退款流程未完成 金额锁定
List<KylinOrderRefundEntitiesVo> refundEntitiesVos = refundVo.getOrderRefundEntitiesVoList();
for (KylinOrderRefundEntitiesVo refundEntitiesVo : refundEntitiesVos) {
if (refundEntitiesVo.getOrderTicketEntitiesId().equals(orderTicketEntitiesId)) {
orderLockPrice = orderLockPrice.add(refundEntitiesVo.getRefundPrice());
}
}
}
}
//订单可退金额
BigDecimal refundSinglePrice = canRefundSinglePrice.subtract(orderLockPrice);
//是否包含快递费
if (orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).subtract(orderTicketVo.getPriceRefund()).compareTo(canRefundSinglePrice) == 0) {
refundSinglePrice = refundSinglePrice.add(orderTicketVo.getPriceExpress());
}
return refundSinglePrice;
}
}
package com.liquidnet.service.order.utils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class MongoVoUtils {
@Autowired
private RedisUtil redisUtil;
@Autowired
private DataUtils dataUtils;
@Autowired
private MongoTemplate mongoTemplate;
/**
* @param userId 用户id
* @param type 1新增 2修改
* @param orderId 订单id [需要新增或者修改的订单id]
*/
public Boolean resetOrderListVo(String userId, Integer type, String orderId, KylinOrderTicketVo dataSingle) {
List<KylinOrderListVo> vo = new ArrayList<>();
List<KylinOrderListVo> redisVo = new ArrayList();
KylinOrderListVo voItem = new KylinOrderListVo();
KylinOrderTicketVo data;
if (dataSingle == null) {
data = dataUtils.getOrderTicketVo(orderId);
} else {
data = dataSingle;
}
BeanUtils.copyProperties(data, voItem);
List<KylinOrderListVo> redisData = dataUtils.getOrderList(userId);
if (type == 1) {
redisVo.add(voItem);
if (redisData.size() > 0) {
if (redisData.get(0).getOrderTicketsId().equals(orderId)) {
redisData.remove(0);
}
}
}
redisVo.addAll(redisData);
switch (type) {
case 1:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (i == 0) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
if (redisVo.size() == 0) {
vo.add(voItem);
}
dataUtils.setOrderList(userId, vo);
return true;
case 2:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (redisVo.get(i).getOrderTicketsId().equals(orderId)) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
dataUtils.setOrderList(userId, vo);
return true;
default:
return false;
}
}
}
......@@ -5,9 +5,13 @@ import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
......@@ -34,7 +38,6 @@ public class OrderUtils {
int isTrueName
) {
Integer[] integers;
System.out.println("TYPE = " + type);
if (101 == type) {
integers = festivalOrderLimit(userId, idCard, performanceId, ticketId, performanceBuyCount, ticketBuyCount, isTrueName);
} else {
......@@ -118,4 +121,67 @@ public class OrderUtils {
List<AdamEntersVo> vos = (List<AdamEntersVo>) redisUtil.get(rk);
return vos.stream().filter(r -> r.getEntersId().equals(entersId)).findAny().orElse(null);
}
/**
* @param userId 用户id
* @param type 1新增 2修改
* @param orderId 订单id [需要新增或者修改的订单id]
*/
public Boolean resetOrderListVo(String userId, Integer type, String orderId, KylinOrderTicketVo dataSingle) {
List<KylinOrderListVo> vo = new ArrayList<>();
List<KylinOrderListVo> redisVo = new ArrayList();
KylinOrderListVo voItem = new KylinOrderListVo();
KylinOrderTicketVo data;
if (dataSingle == null) {
data = dataUtils.getOrderTicketVo(orderId);
} else {
data = dataSingle;
}
BeanUtils.copyProperties(data, voItem);
List<KylinOrderListVo> redisData = dataUtils.getOrderList(userId);
if (type == 1) {
redisVo.add(voItem);
if (redisData.size() > 0) {
if (redisData.get(0).getOrderTicketsId().equals(orderId)) {
redisData.remove(0);
}
}
}
redisVo.addAll(redisData);
switch (type) {
case 1:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (i == 0) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
if (redisVo.size() == 0) {
vo.add(voItem);
}
dataUtils.setOrderList(userId, vo);
return true;
case 2:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (redisVo.get(i).getOrderTicketsId().equals(orderId)) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
dataUtils.setOrderList(userId, vo);
return true;
default:
return false;
}
}
}
......@@ -36,8 +36,6 @@ public class OtherUtils {
sign = sign.toUpperCase();
httpData.add("sign", sign);
System.out.println("data = = = "+httpData.toString());
String returnData = HttpUtil.post(serviceUrl + "sendSmsMessageJ", httpData);
JsonNode postResultNew = JsonUtils.fromJson(returnData, JsonNode.class);
if (!postResultNew.get("message").toString().equals("OK")) {
......
......@@ -12,9 +12,6 @@ public class TaobaoTicketUtils {
private String SECRET = "900025efc616fd2446344bb8fa21d039";
private String SUPPLIER_SECRET= "444d0752439f921a75eaf5951a8bc03c";
private Long SYSTEM_ID= 15669L;
// private String url = "http://gw.api.tbsandbox.com/router/rest";
// private String appkey = "4272";
// private String secret = "0ebbcccfee18d7ad1aebc5b135ffa906";
private TaobaoClient client = null;
public TaobaoClient initTaobaoClient() {
......
package com.liquidnet.service.order.test;
import com.alibaba.fastjson.JSON;
import com.liquidnet.service.base.codec.util.CodecUtil;
import com.liquidnet.service.base.codec.vo.EncryptedReq;
import com.liquidnet.service.kylin.dto.param.PayOrderParam;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Base64Utils;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: CodecTest
* @Package com.liquidnet.service.order.test
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/7/6 12:29
*/
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class CodecTest {
@Test
public void testEncrypt(){
System.out.println("CodecUtil.AES_SECRET_KEY_BYTES=== "+ Base64Utils.encodeToString(CodecUtil.AES_SECRET_KEY_BYTES));
System.out.println(CodecUtil.sha1Encrypt("this is a test"));
long timestamp = System.currentTimeMillis();
System.out.println("时间戳:" + timestamp);
// UserLoginReq userLoginReq = new UserLoginReq("admin", "admin");
// String data = JSON.toJSONString(userLoginReq);
String data = "{\"number\":1,\"ticketId\":\"2811887059054592999181\",\"isElectronic\":1,\"isExpress\":0,\"deviceFrom\":\"wap\",\"actual\":0.01,\"performanceId\":\"2811713813327872196937\",\"timeId\":\"2811766812553216086853\",\"returnUrl\":\"http://testm.zhengzai.tv/#/order/status?order_type=ticket&order_id=\",\"showUrl\":\"http://testm.zhengzai.tv/#/order/status?order_type=ticket&order_id=\",\"expressType\":2,\"agentId\":0,\"payType\":\"alipay\"}";
System.out.println("加密前的数据:" + data);
String encryptedData = CodecUtil.aesEncrypt(data);
System.out.println("加密后的数据:" + encryptedData);
String sign = CodecUtil.sha1Encrypt(encryptedData + timestamp);
System.out.println("签名:" + sign);
EncryptedReq<PayOrderParam> encryptedReq = new EncryptedReq<>();
encryptedReq.setEncryptedData(encryptedData);
encryptedReq.setTimestamp(timestamp);
encryptedReq.setSign(sign);
System.out.println("加密后的请求:" + JSON.toJSONString(encryptedReq));
}
}
......@@ -34,7 +34,6 @@ public class OrderUtils {
int isTrueName
) {
Integer[] integers;
System.out.println("TYPE = " + type);
if (101 == type) {
integers = festivalOrderLimit(userId, idCard, performanceId, ticketId, performanceBuyCount, ticketBuyCount, isTrueName);
} else {
......
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