Merge branch 'dev' of http://gitea.dctpay.com/hurui/puhui-go into dev
commit
1910b4c537
Binary file not shown.
@ -0,0 +1,455 @@ |
||||
package com.order.controller.business; |
||||
|
||||
import com.alibaba.excel.EasyExcel; |
||||
import com.hfkj.common.exception.ErrorCode; |
||||
import com.hfkj.common.exception.ErrorHelp; |
||||
import com.hfkj.common.exception.SysCode; |
||||
import com.hfkj.common.security.SessionObject; |
||||
import com.hfkj.common.security.UserCenter; |
||||
import com.hfkj.common.utils.DateUtil; |
||||
import com.hfkj.common.utils.ResponseMsgUtil; |
||||
import com.hfkj.config.CommonSysConst; |
||||
import com.hfkj.entity.BsOrderGoods; |
||||
import com.hfkj.entity.FileRecords; |
||||
import com.hfkj.model.ResponseData; |
||||
import com.hfkj.model.SecUserSessionObject; |
||||
|
||||
import com.hfkj.model.order.orderExport.MerOrderSettlementDetailModel; |
||||
import com.hfkj.model.order.orderExport.OrderGoodsExportModel; |
||||
import com.hfkj.model.order.orderExport.OrderSettlementModel; |
||||
import com.hfkj.model.order.orderExport.OrderSettlementSumModel; |
||||
import com.hfkj.service.file.FileRecordsService; |
||||
import com.hfkj.service.order.OrderSettlementService; |
||||
import com.hfkj.sysenum.SecUserObjectTypeEnum; |
||||
import com.hfkj.sysenum.fileRecords.FileRecordsEnum; |
||||
import com.hfkj.sysenum.order.OrderChildStatusEnum; |
||||
import com.hfkj.sysenum.order.OrderPayChannelEnum; |
||||
import com.hfkj.sysenum.order.OrderPayTypeEnum; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import org.apache.commons.beanutils.BeanUtils; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
import org.springframework.stereotype.Controller; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RequestMethod; |
||||
import org.springframework.web.bind.annotation.RequestParam; |
||||
import org.springframework.web.bind.annotation.ResponseBody; |
||||
|
||||
import javax.annotation.Resource; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.io.File; |
||||
import java.math.BigDecimal; |
||||
import java.util.*; |
||||
import java.util.concurrent.ArrayBlockingQueue; |
||||
import java.util.concurrent.ThreadPoolExecutor; |
||||
import java.util.concurrent.TimeUnit; |
||||
|
||||
@Controller |
||||
@RequestMapping(value="/settlement") |
||||
@Api(value="订单统计业务") |
||||
public class OrderSettlementController { |
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(OrderSettlementController.class); |
||||
|
||||
@Resource |
||||
private UserCenter userCenter; |
||||
@Resource |
||||
private OrderSettlementService orderSettlementService; |
||||
@Resource |
||||
private FileRecordsService fileRecordsService; |
||||
|
||||
|
||||
@RequestMapping(value="/settlementDetail",method = RequestMethod.GET) |
||||
@ResponseBody |
||||
@ApiOperation(value = "结算详情") |
||||
public ResponseData settlementDetail(@RequestParam(value = "platform" , required = false) String platform, |
||||
@RequestParam(value = "merId" , required = false) Long merId, |
||||
@RequestParam(value = "payType" , required = false) Long payType, |
||||
@RequestParam(value = "finishTimeS" , required = false) Long finishTimeS, |
||||
@RequestParam(value = "finishTimeE" , required = false) Long finishTimeE, HttpServletRequest request) { |
||||
try { |
||||
Map<String,Object> param = new HashMap<>(); |
||||
SessionObject sessionObject = userCenter.getSessionObject(request); |
||||
SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); |
||||
if (userModel.getAccount().getObjectType().equals(SecUserObjectTypeEnum.type1.getCode())) { |
||||
param.put("merId", merId); |
||||
} |
||||
if (SecUserObjectTypeEnum.type2.getCode() == userModel.getAccount().getObjectType()) { |
||||
param.put("merId", userModel.getAccount().getObjectId()); |
||||
} |
||||
param.put("platform", platform); |
||||
param.put("payType", payType); |
||||
param.put("finishTimeS", finishTimeS); |
||||
param.put("finishTimeE", finishTimeE); |
||||
|
||||
return ResponseMsgUtil.success(orderSettlementService.getDetail(param)); |
||||
|
||||
} catch (Exception e) { |
||||
log.error("error!",e); |
||||
return ResponseMsgUtil.exception(e); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value="/exportSettlementDetail",method = RequestMethod.GET) |
||||
@ResponseBody |
||||
@ApiOperation(value = "导出结算详情") |
||||
public ResponseData exportSettlementDetail(@RequestParam(value = "platform" , required = false) String platform, |
||||
@RequestParam(value = "merId" , required = false) Long merId, |
||||
@RequestParam(value = "payType" , required = false) Long payType, |
||||
@RequestParam(value = "finishTimeS" , required = false) Long finishTimeS, |
||||
@RequestParam(value = "finishTimeE" , required = false) Long finishTimeE, HttpServletRequest request) { |
||||
// 插入下载记录
|
||||
FileRecords fileRecords = new FileRecords(); |
||||
try { |
||||
|
||||
Map<String,Object> param = new HashMap<>(); |
||||
SessionObject sessionObject = userCenter.getSessionObject(request); |
||||
SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); |
||||
if (userModel.getAccount().getObjectType().equals(SecUserObjectTypeEnum.type1.getCode())) { |
||||
param.put("merId", merId); |
||||
} |
||||
if (SecUserObjectTypeEnum.type2.getCode() == userModel.getAccount().getObjectType()) { |
||||
param.put("merId", userModel.getAccount().getObjectId()); |
||||
} |
||||
param.put("platform", platform); |
||||
param.put("payType", payType); |
||||
param.put("finishTimeS", finishTimeS); |
||||
param.put("finishTimeE", finishTimeE); |
||||
|
||||
String dataSting = DateUtil.date2String(new Date(), DateUtil.YMDHMS); |
||||
|
||||
String fileUrl = CommonSysConst.getSysConfig().getFileUrl(); |
||||
String filePath = "/temporary/" + userModel.getAccount().getId() + "/" ; |
||||
String pathName = filePath + FileRecordsEnum.status10.getName() + "交易数据导出" + dataSting +".xlsx"; |
||||
|
||||
if (fileRecordsService.findExported(param.toString() , userModel.getAccount().getId())) { |
||||
throw ErrorHelp.genException(SysCode.System , ErrorCode.COMMON_ERROR , "相同导出内容请勿重复点击!"); |
||||
} |
||||
|
||||
fileRecords.setCreateTime(new Date()); |
||||
fileRecords.setBusinessType(FileRecordsEnum.status10.getCode()); |
||||
fileRecords.setDownloadConditions(param.toString()); |
||||
fileRecords.setOpId(userModel.getAccount().getId()); |
||||
fileRecords.setOpName(userModel.getAccount().getUserName()); |
||||
fileRecords.setStatus(2); |
||||
fileRecords.setDownloadStatus(2); |
||||
fileRecords.setFileUrl(CommonSysConst.getSysConfig().getDomainName() + "/filesystem" + pathName); |
||||
fileRecords.setType("2"); |
||||
fileRecords.setTitle(FileRecordsEnum.status10.getName() + "交易数据导出" + dataSting + ".xls"); |
||||
fileRecordsService.create(fileRecords); |
||||
|
||||
// 创建线程
|
||||
ThreadPoolExecutor executor = new ThreadPoolExecutor( |
||||
2, // 核心线程数
|
||||
5, // 最大线程数
|
||||
1, // 线程空闲时间
|
||||
TimeUnit.MINUTES, // 时间单位
|
||||
new ArrayBlockingQueue<>(5), // 任务队列
|
||||
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
|
||||
); |
||||
|
||||
// 提交任务给线程池
|
||||
executor.execute(() -> { |
||||
|
||||
try { |
||||
|
||||
List<MerOrderSettlementDetailModel> list = orderSettlementService.getDetail(param); |
||||
|
||||
File file = new File(fileUrl + filePath); |
||||
if (!file.exists()) { |
||||
file.mkdirs(); |
||||
} |
||||
|
||||
EasyExcel.write(fileUrl+pathName) |
||||
.head(MerOrderSettlementDetailModel.class) |
||||
.sheet(fileRecords.getTitle()) |
||||
.doWrite(list); |
||||
|
||||
fileRecords.setStatus(1); |
||||
fileRecords.setUpdateTime(new Date()); |
||||
fileRecordsService.update(fileRecords); |
||||
} catch (Exception e) { |
||||
fileRecords.setStatus(3); |
||||
fileRecords.setUpdateTime(new Date()); |
||||
fileRecords.setExt1(e.toString()); |
||||
fileRecordsService.update(fileRecords); |
||||
log.error("error!",e); |
||||
} |
||||
}); |
||||
|
||||
// 关闭线程池
|
||||
executor.shutdown(); |
||||
return ResponseMsgUtil.success(fileRecords); |
||||
|
||||
} catch (Exception e) { |
||||
fileRecords.setStatus(3); |
||||
fileRecords.setUpdateTime(new Date()); |
||||
fileRecordsService.update(fileRecords); |
||||
log.error("error!",e); |
||||
return ResponseMsgUtil.exception(e); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value="/getSettlement",method = RequestMethod.GET) |
||||
@ResponseBody |
||||
@ApiOperation(value = "结算详情") |
||||
public ResponseData getSettlement(@RequestParam(value = "platform" , required = false) String platform, |
||||
@RequestParam(value = "merId" , required = false) Long merId, |
||||
@RequestParam(value = "payType" , required = false) Long payType, |
||||
@RequestParam(value = "finishTimeS" , required = false) Long finishTimeS, |
||||
@RequestParam(value = "finishTimeE" , required = false) Long finishTimeE, HttpServletRequest request) { |
||||
try { |
||||
Map<String,Object> param = new HashMap<>(); |
||||
SessionObject sessionObject = userCenter.getSessionObject(request); |
||||
SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); |
||||
if (userModel.getAccount().getObjectType().equals(SecUserObjectTypeEnum.type1.getCode())) { |
||||
param.put("merId", merId); |
||||
} |
||||
if (SecUserObjectTypeEnum.type2.getCode() == userModel.getAccount().getObjectType()) { |
||||
param.put("merId", userModel.getAccount().getObjectId()); |
||||
} |
||||
param.put("platform", platform); |
||||
param.put("payType", payType); |
||||
param.put("finishTimeS", finishTimeS); |
||||
param.put("finishTimeE", finishTimeE); |
||||
|
||||
return ResponseMsgUtil.success(orderSettlementService.getSettlement(param)); |
||||
|
||||
} catch (Exception e) { |
||||
log.error("error!",e); |
||||
return ResponseMsgUtil.exception(e); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value="/exportSettlement",method = RequestMethod.GET) |
||||
@ResponseBody |
||||
@ApiOperation(value = "导出结算") |
||||
public ResponseData exportSettlement(@RequestParam(value = "platform" , required = false) String platform, |
||||
@RequestParam(value = "merId" , required = false) Long merId, |
||||
@RequestParam(value = "payType" , required = false) Long payType, |
||||
@RequestParam(value = "finishTimeS" , required = false) Long finishTimeS, |
||||
@RequestParam(value = "finishTimeE" , required = false) Long finishTimeE, HttpServletRequest request) { |
||||
// 插入下载记录
|
||||
FileRecords fileRecords = new FileRecords(); |
||||
try { |
||||
|
||||
Map<String,Object> param = new HashMap<>(); |
||||
SessionObject sessionObject = userCenter.getSessionObject(request); |
||||
SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); |
||||
if (userModel.getAccount().getObjectType().equals(SecUserObjectTypeEnum.type1.getCode())) { |
||||
param.put("merId", merId); |
||||
} |
||||
if (SecUserObjectTypeEnum.type2.getCode() == userModel.getAccount().getObjectType()) { |
||||
param.put("merId", userModel.getAccount().getObjectId()); |
||||
} |
||||
param.put("platform", platform); |
||||
param.put("payType", payType); |
||||
param.put("finishTimeS", finishTimeS); |
||||
param.put("finishTimeE", finishTimeE); |
||||
|
||||
String dataSting = DateUtil.date2String(new Date(), DateUtil.YMDHMS); |
||||
|
||||
String fileUrl = CommonSysConst.getSysConfig().getFileUrl(); |
||||
String filePath = "/temporary/" + userModel.getAccount().getId() + "/" ; |
||||
String pathName = filePath + FileRecordsEnum.status11.getName() + "交易数据导出" + dataSting +".xlsx"; |
||||
|
||||
if (fileRecordsService.findExported(param.toString() , userModel.getAccount().getId())) { |
||||
throw ErrorHelp.genException(SysCode.System , ErrorCode.COMMON_ERROR , "相同导出内容请勿重复点击!"); |
||||
} |
||||
|
||||
fileRecords.setCreateTime(new Date()); |
||||
fileRecords.setBusinessType(FileRecordsEnum.status11.getCode()); |
||||
fileRecords.setDownloadConditions(param.toString()); |
||||
fileRecords.setOpId(userModel.getAccount().getId()); |
||||
fileRecords.setOpName(userModel.getAccount().getUserName()); |
||||
fileRecords.setStatus(2); |
||||
fileRecords.setDownloadStatus(2); |
||||
fileRecords.setFileUrl(CommonSysConst.getSysConfig().getDomainName() + "/filesystem" + pathName); |
||||
fileRecords.setType("2"); |
||||
fileRecords.setTitle(FileRecordsEnum.status11.getName() + "交易数据导出" + dataSting + ".xls"); |
||||
fileRecordsService.create(fileRecords); |
||||
|
||||
// 创建线程
|
||||
ThreadPoolExecutor executor = new ThreadPoolExecutor( |
||||
2, // 核心线程数
|
||||
5, // 最大线程数
|
||||
1, // 线程空闲时间
|
||||
TimeUnit.MINUTES, // 时间单位
|
||||
new ArrayBlockingQueue<>(5), // 任务队列
|
||||
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
|
||||
); |
||||
|
||||
// 提交任务给线程池
|
||||
executor.execute(() -> { |
||||
|
||||
try { |
||||
|
||||
List<OrderSettlementModel> list = orderSettlementService.getSettlement(param); |
||||
|
||||
File file = new File(fileUrl + filePath); |
||||
if (!file.exists()) { |
||||
file.mkdirs(); |
||||
} |
||||
|
||||
EasyExcel.write(fileUrl+pathName) |
||||
.head(OrderSettlementModel.class) |
||||
.sheet(fileRecords.getTitle()) |
||||
.doWrite(list); |
||||
|
||||
fileRecords.setStatus(1); |
||||
fileRecords.setUpdateTime(new Date()); |
||||
fileRecordsService.update(fileRecords); |
||||
} catch (Exception e) { |
||||
fileRecords.setStatus(3); |
||||
fileRecords.setUpdateTime(new Date()); |
||||
fileRecords.setExt1(e.toString()); |
||||
fileRecordsService.update(fileRecords); |
||||
log.error("error!",e); |
||||
} |
||||
}); |
||||
|
||||
// 关闭线程池
|
||||
executor.shutdown(); |
||||
return ResponseMsgUtil.success(fileRecords); |
||||
|
||||
} catch (Exception e) { |
||||
fileRecords.setStatus(3); |
||||
fileRecords.setUpdateTime(new Date()); |
||||
fileRecordsService.update(fileRecords); |
||||
log.error("error!",e); |
||||
return ResponseMsgUtil.exception(e); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value="/getSum",method = RequestMethod.GET) |
||||
@ResponseBody |
||||
@ApiOperation(value = "结算总和") |
||||
public ResponseData getSum(@RequestParam(value = "platform" , required = false) String platform, |
||||
@RequestParam(value = "merId" , required = false) Long merId, |
||||
@RequestParam(value = "payType" , required = false) Long payType, |
||||
@RequestParam(value = "finishTimeS" , required = false) Long finishTimeS, |
||||
@RequestParam(value = "finishTimeE" , required = false) Long finishTimeE, HttpServletRequest request) { |
||||
try { |
||||
Map<String,Object> param = new HashMap<>(); |
||||
SessionObject sessionObject = userCenter.getSessionObject(request); |
||||
SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); |
||||
if (userModel.getAccount().getObjectType().equals(SecUserObjectTypeEnum.type1.getCode())) { |
||||
param.put("merId", merId); |
||||
} |
||||
if (SecUserObjectTypeEnum.type2.getCode() == userModel.getAccount().getObjectType()) { |
||||
param.put("merId", userModel.getAccount().getObjectId()); |
||||
} |
||||
param.put("platform", platform); |
||||
param.put("payType", payType); |
||||
param.put("finishTimeS", finishTimeS); |
||||
param.put("finishTimeE", finishTimeE); |
||||
|
||||
return ResponseMsgUtil.success(orderSettlementService.getSum(param)); |
||||
|
||||
} catch (Exception e) { |
||||
log.error("error!",e); |
||||
return ResponseMsgUtil.exception(e); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value="/exportSettlementSum",method = RequestMethod.GET) |
||||
@ResponseBody |
||||
@ApiOperation(value = "导出结算总和") |
||||
public ResponseData exportSettlementSum(@RequestParam(value = "platform" , required = false) String platform, |
||||
@RequestParam(value = "merId" , required = false) Long merId, |
||||
@RequestParam(value = "payType" , required = false) Long payType, |
||||
@RequestParam(value = "finishTimeS" , required = false) Long finishTimeS, |
||||
@RequestParam(value = "finishTimeE" , required = false) Long finishTimeE, HttpServletRequest request) { |
||||
// 插入下载记录
|
||||
FileRecords fileRecords = new FileRecords(); |
||||
try { |
||||
|
||||
Map<String,Object> param = new HashMap<>(); |
||||
SessionObject sessionObject = userCenter.getSessionObject(request); |
||||
SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); |
||||
if (userModel.getAccount().getObjectType().equals(SecUserObjectTypeEnum.type1.getCode())) { |
||||
param.put("merId", merId); |
||||
} |
||||
if (SecUserObjectTypeEnum.type2.getCode() == userModel.getAccount().getObjectType()) { |
||||
param.put("merId", userModel.getAccount().getObjectId()); |
||||
} |
||||
param.put("platform", platform); |
||||
param.put("payType", payType); |
||||
param.put("finishTimeS", finishTimeS); |
||||
param.put("finishTimeE", finishTimeE); |
||||
|
||||
String dataSting = DateUtil.date2String(new Date(), DateUtil.YMDHMS); |
||||
|
||||
String fileUrl = CommonSysConst.getSysConfig().getFileUrl(); |
||||
String filePath = "/temporary/" + userModel.getAccount().getId() + "/" ; |
||||
String pathName = filePath + FileRecordsEnum.status12.getName() + "交易数据导出" + dataSting +".xlsx"; |
||||
|
||||
if (fileRecordsService.findExported(param.toString() , userModel.getAccount().getId())) { |
||||
throw ErrorHelp.genException(SysCode.System , ErrorCode.COMMON_ERROR , "相同导出内容请勿重复点击!"); |
||||
} |
||||
|
||||
fileRecords.setCreateTime(new Date()); |
||||
fileRecords.setBusinessType(FileRecordsEnum.status12.getCode()); |
||||
fileRecords.setDownloadConditions(param.toString()); |
||||
fileRecords.setOpId(userModel.getAccount().getId()); |
||||
fileRecords.setOpName(userModel.getAccount().getUserName()); |
||||
fileRecords.setStatus(2); |
||||
fileRecords.setDownloadStatus(2); |
||||
fileRecords.setFileUrl(CommonSysConst.getSysConfig().getDomainName() + "/filesystem" + pathName); |
||||
fileRecords.setType("2"); |
||||
fileRecords.setTitle(FileRecordsEnum.status12.getName() + "交易数据导出" + dataSting + ".xls"); |
||||
fileRecordsService.create(fileRecords); |
||||
|
||||
// 创建线程
|
||||
ThreadPoolExecutor executor = new ThreadPoolExecutor( |
||||
2, // 核心线程数
|
||||
5, // 最大线程数
|
||||
1, // 线程空闲时间
|
||||
TimeUnit.MINUTES, // 时间单位
|
||||
new ArrayBlockingQueue<>(5), // 任务队列
|
||||
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
|
||||
); |
||||
|
||||
// 提交任务给线程池
|
||||
executor.execute(() -> { |
||||
|
||||
try { |
||||
|
||||
List<OrderSettlementSumModel> list = orderSettlementService.getSum(param); |
||||
|
||||
File file = new File(fileUrl + filePath); |
||||
if (!file.exists()) { |
||||
file.mkdirs(); |
||||
} |
||||
|
||||
EasyExcel.write(fileUrl+pathName) |
||||
.head(OrderSettlementSumModel.class) |
||||
.sheet(fileRecords.getTitle()) |
||||
.doWrite(list); |
||||
|
||||
fileRecords.setStatus(1); |
||||
fileRecords.setUpdateTime(new Date()); |
||||
fileRecordsService.update(fileRecords); |
||||
} catch (Exception e) { |
||||
fileRecords.setStatus(3); |
||||
fileRecords.setUpdateTime(new Date()); |
||||
fileRecords.setExt1(e.toString()); |
||||
fileRecordsService.update(fileRecords); |
||||
log.error("error!",e); |
||||
} |
||||
}); |
||||
|
||||
// 关闭线程池
|
||||
executor.shutdown(); |
||||
return ResponseMsgUtil.success(fileRecords); |
||||
|
||||
} catch (Exception e) { |
||||
fileRecords.setStatus(3); |
||||
fileRecords.setUpdateTime(new Date()); |
||||
fileRecordsService.update(fileRecords); |
||||
log.error("error!",e); |
||||
return ResponseMsgUtil.exception(e); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,69 @@ |
||||
package com.order.controller.notify; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.hfkj.common.utils.HttpsUtils; |
||||
import com.hfkj.config.CommonSysConst; |
||||
import com.hfkj.jd.JdService; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
import org.springframework.stereotype.Controller; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.PrintWriter; |
||||
|
||||
@Controller |
||||
@RequestMapping(value = "/jdNotify") |
||||
@Api(value = "京东回调") |
||||
public class JdNotify { |
||||
private static final Logger log = LoggerFactory.getLogger(JdService.class); |
||||
|
||||
@RequestMapping(value = "/notify", method = RequestMethod.POST) |
||||
@ApiOperation(value = "回调") |
||||
@ResponseBody |
||||
public void notify(@RequestBody String reqBodyStr, HttpServletRequest request, HttpServletResponse response) { |
||||
try { |
||||
|
||||
JSONObject dataObject = JSONObject.parseObject(reqBodyStr, JSONObject.class); |
||||
|
||||
log.info("============回调任务Start============="); |
||||
log.info("尖椒订单充值-回调参数: " + dataObject); |
||||
log.info("============回调任务End============="); |
||||
|
||||
|
||||
response.setCharacterEncoding("UTF-8"); |
||||
response.setContentType("text/html;charset=utf-8"); |
||||
PrintWriter writer= response.getWriter(); |
||||
writer.write("SUCCESS"); |
||||
|
||||
|
||||
} catch (Exception e) { |
||||
log.error("WechatPayController --> wechatNotify() error!", e); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value = "/callbackToken", method = RequestMethod.GET) |
||||
@ApiOperation(value = "token回调") |
||||
@ResponseBody |
||||
public void notify(@RequestParam("code") String code) { |
||||
try { |
||||
|
||||
log.info("============token回调任务Start============="); |
||||
log.info("token回调-回调参数: " + code); |
||||
JSONObject object = new JSONObject(); |
||||
object.put("app_key", CommonSysConst.getSysConfig().getJDAppKey()); |
||||
object.put("app_secret", CommonSysConst.getSysConfig().getJDAppSecret()); |
||||
object.put("code", code); |
||||
object.put("grant_type", "authorization_code"); |
||||
JSONObject jsonObject = HttpsUtils.doGet("https://open-oauth.jd.com/oauth2/authorizeForVOP", object); |
||||
log.info("token回调-回调参数: " + jsonObject); |
||||
log.info("============token回调任务End============="); |
||||
|
||||
} catch (Exception e) { |
||||
log.error("WechatPayController --> wechatNotify() error!", e); |
||||
} |
||||
} |
||||
} |
Binary file not shown.
@ -0,0 +1,113 @@ |
||||
package com.hfkj.common.utils; |
||||
|
||||
import javafx.util.Pair; |
||||
import org.apache.commons.codec.binary.Base64; |
||||
|
||||
import javax.crypto.Cipher; |
||||
import java.nio.charset.StandardCharsets; |
||||
import java.security.*; |
||||
import java.security.interfaces.RSAPrivateKey; |
||||
import java.security.interfaces.RSAPublicKey; |
||||
import java.security.spec.PKCS8EncodedKeySpec; |
||||
import java.security.spec.X509EncodedKeySpec; |
||||
|
||||
public final class RsaCoderUtils { |
||||
|
||||
/** |
||||
* 生成公私钥 |
||||
* |
||||
* @return |
||||
* @throws NoSuchAlgorithmException |
||||
*/ |
||||
public static Pair<String, String> genKeyPair() throws NoSuchAlgorithmException { |
||||
// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
|
||||
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); |
||||
// 初始化密钥对生成器,密钥大小为96-1024位
|
||||
keyPairGen.initialize(1024, new SecureRandom()); |
||||
// 生成一个密钥对,保存在keyPair中
|
||||
KeyPair keyPair = keyPairGen.generateKeyPair(); |
||||
// 得到私钥
|
||||
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); |
||||
// 得到公钥
|
||||
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); |
||||
String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded())); |
||||
// 得到私钥字符串
|
||||
String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded()))); |
||||
return new Pair<>(publicKeyString, privateKeyString); |
||||
} |
||||
|
||||
/** |
||||
* RSA私钥加密 |
||||
* |
||||
* @param str 加密字符串 |
||||
* @param privateKey 私钥 |
||||
* @return 密文 |
||||
* @throws Exception 加密过程中的异常信息 |
||||
*/ |
||||
public static String encryptByPrivateKey(String str, String privateKey) throws Exception { |
||||
//base64编码的公钥
|
||||
byte[] decoded = Base64.decodeBase64(privateKey); |
||||
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); |
||||
//RSA解密
|
||||
Cipher cipher = Cipher.getInstance("RSA"); |
||||
cipher.init(Cipher.ENCRYPT_MODE, priKey); |
||||
return Base64.encodeBase64String(cipher.doFinal(str.getBytes(StandardCharsets.UTF_8))); |
||||
} |
||||
|
||||
/** |
||||
* RSA公钥加密 |
||||
* |
||||
* @param str 加密字符串 |
||||
* @return 密文 |
||||
* @throws Exception 加密过程中的异常信息 |
||||
*/ |
||||
public static String encryptByPublicKey(String str, String publicKey) throws Exception { |
||||
//base64编码的公钥
|
||||
byte[] decoded = Base64.decodeBase64(publicKey); |
||||
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); |
||||
//RSA加密
|
||||
Cipher cipher = Cipher.getInstance("RSA"); |
||||
cipher.init(Cipher.ENCRYPT_MODE, pubKey); |
||||
return Base64.encodeBase64String(cipher.doFinal(str.getBytes(StandardCharsets.UTF_8))); |
||||
} |
||||
|
||||
/** |
||||
* RSA公钥解密 |
||||
* |
||||
* @param str 加密字符串 |
||||
* @param publicKey 公钥 |
||||
* @return 铭文 |
||||
* @throws Exception 解密过程中的异常信息 |
||||
*/ |
||||
public static String decryptByPublicKey(String str, String publicKey) throws Exception { |
||||
//64位解码加密后的字符串
|
||||
byte[] inputByte = Base64.decodeBase64(str.getBytes(StandardCharsets.UTF_8)); |
||||
//base64编码的私钥
|
||||
byte[] decoded = Base64.decodeBase64(publicKey); |
||||
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); |
||||
//RSA加密
|
||||
Cipher cipher = Cipher.getInstance("RSA"); |
||||
cipher.init(Cipher.DECRYPT_MODE, pubKey); |
||||
return new String(cipher.doFinal(inputByte)); |
||||
} |
||||
|
||||
/** |
||||
* RSA私钥解密 |
||||
* |
||||
* @param str 加密字符串 |
||||
* @return 铭文 |
||||
* @throws Exception 解密过程中的异常信息 |
||||
*/ |
||||
public static String decryptByPrivateKey(String str, String privateKey) throws Exception { |
||||
//64位解码加密后的字符串
|
||||
byte[] inputByte = Base64.decodeBase64(str.getBytes(StandardCharsets.UTF_8)); |
||||
//base64编码的私钥
|
||||
byte[] decoded = Base64.decodeBase64(privateKey); |
||||
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); |
||||
//RSA解密
|
||||
Cipher cipher = Cipher.getInstance("RSA"); |
||||
cipher.init(Cipher.DECRYPT_MODE, priKey); |
||||
return new String(cipher.doFinal(inputByte)); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,63 @@ |
||||
package com.hfkj.entity; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
/** |
||||
* goods_user_address |
||||
* @author |
||||
*/ |
||||
public class GoodsUserAddressWithBLOBs extends GoodsUserAddress implements Serializable { |
||||
/** |
||||
* 一级地址编号 |
||||
*/ |
||||
private String provinceId; |
||||
|
||||
/** |
||||
* 二级地址编号 |
||||
*/ |
||||
private String cityId; |
||||
|
||||
/** |
||||
* 三级地址编号 |
||||
*/ |
||||
private String countyId; |
||||
|
||||
/** |
||||
* 四级地址编号 |
||||
*/ |
||||
private String townId; |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
public String getProvinceId() { |
||||
return provinceId; |
||||
} |
||||
|
||||
public void setProvinceId(String provinceId) { |
||||
this.provinceId = provinceId; |
||||
} |
||||
|
||||
public String getCityId() { |
||||
return cityId; |
||||
} |
||||
|
||||
public void setCityId(String cityId) { |
||||
this.cityId = cityId; |
||||
} |
||||
|
||||
public String getCountyId() { |
||||
return countyId; |
||||
} |
||||
|
||||
public void setCountyId(String countyId) { |
||||
this.countyId = countyId; |
||||
} |
||||
|
||||
public String getTownId() { |
||||
return townId; |
||||
} |
||||
|
||||
public void setTownId(String townId) { |
||||
this.townId = townId; |
||||
} |
||||
} |
@ -0,0 +1,63 @@ |
||||
package com.hfkj.jd; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.hfkj.common.utils.HttpsUtils; |
||||
import com.hfkj.common.utils.RsaCoderUtils; |
||||
import com.hfkj.config.CommonSysConst; |
||||
import com.hfkj.meituan.MeiTuanService; |
||||
import com.jd.open.api.sdk.DefaultJdClient; |
||||
import com.jd.open.api.sdk.JdClient; |
||||
import org.apache.commons.codec.digest.DigestUtils; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import java.net.URLEncoder; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @ClassName JdService |
||||
* @Author Sum1Dream |
||||
* @Description 京东服务 |
||||
* @Date 2024/10/11 下午3:25 |
||||
**/ |
||||
public class JdService { |
||||
private static Logger log = LoggerFactory.getLogger(JdService.class); |
||||
|
||||
/** |
||||
* UTF_8 |
||||
*/ |
||||
public static final String UTF_8 = "utf-8"; |
||||
/** |
||||
* 用户名 |
||||
*/ |
||||
private static final String USERNAME = "惠兑重庆VOP", |
||||
/** |
||||
* 明文密码,后续需要通过RSA加密 |
||||
*/ |
||||
PLAINTEXT_PASSWORD = "hdcs1234", |
||||
/** |
||||
* 回调地址,注册应用时配置的授权回调地址 |
||||
*/ |
||||
REDIRECT_URI = CommonSysConst.getSysConfig().getDomainName() + "/order/jdNotify/callbackToken", |
||||
/** |
||||
* RSA私钥 |
||||
*/ |
||||
PRIVATE_RSA_KEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMEtt0kF02YBxPXzXyqzCtr1zkuj8NXLiqqSCDAfU6zWB1T1GUEpCfNukPBeZ9nXGj+jbTom8RFllNXbnOkW01Zn2VoyePh8TRWQbToXi+i/JQ162GzpF0GdPsUhJSrB5Z2QzK4UVXXkpPHhQHR8NKQhvTRkoRLfOy+oXWL8PS2hAgMBAAECgYBySo/j/jRiZ62WLlUhuCg1/7P8AJSeiPwTiq6Zeg9RdJeF5jT43kTq54GNFO2wbpkzCYe4Hg4GUulJ1dLx/PUvYquRpM4jGznxDxBA10mNyjx0O+SHcY+ZlOYWIKhEq4MeeJhtHhoFrlgcMNIyofhRDbFzrRak48GrcZDQC4/cIQJBAPwxtEwMnetPveLExR1UsygdVKwoWoGNL5Hkhcx6b2N2Qapk5aHB5haUEXeg1ShrL4C/kE1lsMAIdpVS9lWd4x0CQQDEGASnnB2oPHjvNfj88klpYTvPJRi3ORQPtlfz36kv+29QFxB9Mt1u39ttopw5G2x7QvTtL542w878brrmS8lVAkEA4k7QFjZ0N8cVBLvCjrGFG4hGhT6pCPxjJa5GCtoLvttNzdRA5EkVaklw60LeRSj6NbSxj2Kjm498qj8KYoYOWQJATJhRISMy1mcgmdeMNUlycW4gjY4g9FigRG7mNgU0MeDVnwQTVcQLiGZ6cH2m5guXOSJzRz5lX2DmteWOrawGrQJBAMKLfeTnYkVpXw9MABcR/9L9myG3FKwOHBIqD0wK+QVahi9byFk8GFXD4OlBQ1ZSxHqsUuxWqLVSa3sWBCKpLo8="; |
||||
|
||||
public static JSONObject getAccessToken() throws Exception { |
||||
String encodeRedirectUri = URLEncoder.encode(REDIRECT_URI, UTF_8); |
||||
String encodeUsername = URLEncoder.encode(USERNAME, UTF_8); |
||||
String md5Password = DigestUtils.md5Hex(PLAINTEXT_PASSWORD); |
||||
String ciphertextPassword = RsaCoderUtils.encryptByPrivateKey(md5Password, PRIVATE_RSA_KEY); |
||||
String encodePassword = URLEncoder.encode(ciphertextPassword, UTF_8); |
||||
|
||||
JSONObject object = new JSONObject(); |
||||
object.put("app_key", CommonSysConst.getSysConfig().getJDAppKey()); |
||||
object.put("redirect_uri", encodeRedirectUri); |
||||
object.put("username", encodeUsername); |
||||
object.put("password", encodePassword); |
||||
object.put("response_type", "code"); |
||||
object.put("scope", "snsapi_base"); |
||||
return HttpsUtils.doGet("https://open-oauth.jd.com/oauth2/authorizeForVOP", object); |
||||
} |
||||
} |
@ -0,0 +1,58 @@ |
||||
package com.hfkj.model.order.orderExport; |
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty; |
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth; |
||||
import lombok.Data; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* @ClassName MerOrderSettlementDetailModel |
||||
* @Author Sum1Dream |
||||
* @Description 商户订单结算详情 |
||||
* @Date 2024/9/29 上午10:50 |
||||
**/ |
||||
@Data |
||||
public class MerOrderSettlementDetailModel { |
||||
|
||||
@ColumnWidth(50) |
||||
@ExcelProperty("商品名称") |
||||
public String goodsName; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("商户名称") |
||||
public String merName; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("业务类型") |
||||
public String businessType; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("登录平台") |
||||
public String platform; |
||||
|
||||
@ColumnWidth(40) |
||||
@ExcelProperty("订单号") |
||||
public String orderNo; |
||||
|
||||
@ColumnWidth(15) |
||||
@ExcelProperty("子订单号") |
||||
public String childOrderNo; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("业务信息") |
||||
public String business; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"支付金额"}) |
||||
public BigDecimal payRealPrice; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"支付方式"}) |
||||
public String payType; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("收货时间") |
||||
public String finishTime; |
||||
} |
@ -0,0 +1,120 @@ |
||||
package com.hfkj.model.order.orderExport; |
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty; |
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth; |
||||
import lombok.Data; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* @ClassName OrderGoodsExportModel |
||||
* @Author Sum1Dream |
||||
* @Description 实物订单导出 |
||||
* @Date 2024/8/12 下午5:07 |
||||
**/ |
||||
@Data |
||||
public class OrderMeiTuanExportModel { |
||||
|
||||
@ColumnWidth(50) |
||||
@ExcelProperty("商品名称") |
||||
public String goodsName; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("商户名称") |
||||
public String merName; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("类型名称") |
||||
public String goodsTypeName; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("品牌名称") |
||||
public String goodsBrandName; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("用户手机号") |
||||
public String userPhone; |
||||
|
||||
@ColumnWidth(40) |
||||
@ExcelProperty("订单号") |
||||
public String orderNo; |
||||
|
||||
@ColumnWidth(15) |
||||
@ExcelProperty("子订单号") |
||||
public String childOrderNo; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("物流单号") |
||||
public String logisticsNo; |
||||
|
||||
@ColumnWidth(30) |
||||
@ExcelProperty("商品规格") |
||||
public String goodsSpecsName; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("商品价格") |
||||
public BigDecimal goodsPrice; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("购买数量") |
||||
public Integer goodsCount; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "订单金额"}) |
||||
public BigDecimal totalPrice; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "总优惠"}) |
||||
public BigDecimal totalDeductionPrice; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "优惠券优惠"}) |
||||
public BigDecimal couponDiscountPrice; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "积分抵扣"}) |
||||
public BigDecimal integralDiscountPrice; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "实付金额"}) |
||||
public BigDecimal payRealPrice; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "支付渠道"}) |
||||
public String payChannel; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "支付方式"}) |
||||
public String payType; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "支付单号"}) |
||||
public String paySerialNo; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "交易状态"}) |
||||
public String tradeStatus; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "创建时间"}) |
||||
public Date createTime; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"交易信息", "支付时间"}) |
||||
public Date payTime; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("物流状态") |
||||
public String logisticsStatusDesc; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("更新时间") |
||||
public Date updateTime; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("确认收货时间") |
||||
public Date finishTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,39 @@ |
||||
package com.hfkj.model.order.orderExport; |
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty; |
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth; |
||||
import lombok.Data; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* @ClassName MerOrderSettlementDetailModel |
||||
* @Author Sum1Dream |
||||
* @Description 商户订单结算详情 |
||||
* @Date 2024/9/29 上午10:50 |
||||
**/ |
||||
@Data |
||||
public class OrderSettlementModel { |
||||
|
||||
|
||||
@ColumnWidth(40) |
||||
@ExcelProperty("商户名称") |
||||
public String merName; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("支付方式") |
||||
public String payType; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("业务类型") |
||||
public String businessType; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"结算金额"}) |
||||
public BigDecimal payRealPrice; |
||||
|
||||
@ColumnWidth(30) |
||||
@ExcelProperty("结算日期") |
||||
public String time; |
||||
} |
@ -0,0 +1,34 @@ |
||||
package com.hfkj.model.order.orderExport; |
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty; |
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth; |
||||
import lombok.Data; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* @ClassName MerOrderSettlementDetailModel |
||||
* @Author Sum1Dream |
||||
* @Description 商户订单结算详情 |
||||
* @Date 2024/9/29 上午10:50 |
||||
**/ |
||||
@Data |
||||
public class OrderSettlementSumModel { |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("业务类型") |
||||
public String businessType; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty("支付方式") |
||||
public String payType; |
||||
|
||||
@ColumnWidth(20) |
||||
@ExcelProperty({"结算金额"}) |
||||
public BigDecimal payRealPrice; |
||||
|
||||
@ColumnWidth(30) |
||||
@ExcelProperty("结算日期") |
||||
public String time; |
||||
} |
@ -0,0 +1,47 @@ |
||||
package com.hfkj.service.order; |
||||
|
||||
import com.hfkj.model.order.orderExport.MerOrderSettlementDetailModel; |
||||
import com.hfkj.model.order.orderExport.OrderSettlementModel; |
||||
import com.hfkj.model.order.orderExport.OrderSettlementSumModel; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @ClassName OrderSettlementService |
||||
* @Author Sum1Dream |
||||
* @Description 订单结算 |
||||
* @Date 2024/9/29 下午4:12 |
||||
**/ |
||||
public interface OrderSettlementService { |
||||
|
||||
/** |
||||
* @MethodName getDetail |
||||
* @Description: 获取结算订单详情 |
||||
* @param map |
||||
* @return: java.util.List<com.hfkj.model.order.orderExport.MerOrderSettlementDetailModel> |
||||
* @Author: Sum1Dream |
||||
* @Date: 2024/9/29 下午4:14 |
||||
*/ |
||||
List<MerOrderSettlementDetailModel> getDetail(Map<String,Object> map); |
||||
|
||||
/** |
||||
* @MethodName getSettlement |
||||
* @Description: 结算订单 |
||||
* @param map |
||||
* @return: java.util.List<com.hfkj.model.order.orderExport.OrderSettlementModel> |
||||
* @Author: Sum1Dream |
||||
* @Date: 2024/9/29 下午4:14 |
||||
*/ |
||||
List<OrderSettlementModel> getSettlement(Map<String,Object> map); |
||||
|
||||
/** |
||||
* @MethodName getSum |
||||
* @Description: 结算总和 |
||||
* @param map |
||||
* @return: java.util.List<com.hfkj.model.order.orderExport.OrderSettlementSumModel> |
||||
* @Author: Sum1Dream |
||||
* @Date: 2024/9/29 下午4:14 |
||||
*/ |
||||
List<OrderSettlementSumModel> getSum(Map<String,Object> map); |
||||
} |
@ -0,0 +1,370 @@ |
||||
package com.hfkj.service.order.impl; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.hfkj.common.utils.DateUtil; |
||||
import com.hfkj.entity.*; |
||||
import com.hfkj.model.order.OrderCouponModel; |
||||
import com.hfkj.model.order.orderExport.MerOrderSettlementDetailModel; |
||||
import com.hfkj.model.order.orderExport.OrderSettlementModel; |
||||
import com.hfkj.model.order.orderExport.OrderSettlementSumModel; |
||||
import com.hfkj.service.BsMerService; |
||||
import com.hfkj.service.coupon.BsOrderCouponService; |
||||
import com.hfkj.service.goods.*; |
||||
import com.hfkj.service.order.OrderSettlementService; |
||||
import com.hfkj.sysenum.UserLoginPlatform; |
||||
import com.hfkj.sysenum.order.OrderPayTypeEnum; |
||||
import org.apache.commons.collections4.MapUtils; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import javax.annotation.Resource; |
||||
import java.math.BigDecimal; |
||||
import java.util.*; |
||||
import java.util.stream.Collectors; |
||||
|
||||
@Service("orderSettlementService") |
||||
public class OrderSettlementServiceImpl implements OrderSettlementService { |
||||
|
||||
@Resource |
||||
private BsOrderCouponService orderCouponService; |
||||
@Resource |
||||
private BsOrderGoodsService goodsService; |
||||
@Resource |
||||
private BsOrderCinemaService cinemaService; |
||||
@Resource |
||||
private BsOrderStarbucksService starbucksService; |
||||
@Resource |
||||
private BsOrderMeiTuanService meiTuanService; |
||||
@Resource |
||||
private BsOrderMemberService memberService; |
||||
@Resource |
||||
private BsMerService bsMerService; |
||||
@Override |
||||
public List<MerOrderSettlementDetailModel> getDetail(Map<String, Object> map) { |
||||
return settlementData(map); |
||||
} |
||||
|
||||
@Override |
||||
public List<OrderSettlementModel> getSettlement(Map<String, Object> map) { |
||||
|
||||
List<MerOrderSettlementDetailModel> list = settlementData(map); |
||||
|
||||
Map<String, List<MerOrderSettlementDetailModel>> merList = list.stream().collect(Collectors.groupingBy(MerOrderSettlementDetailModel:: getMerName)); |
||||
|
||||
List<OrderSettlementModel> settlementModels = new ArrayList<>(); |
||||
OrderSettlementModel settlementModel; |
||||
|
||||
for (String key : merList.keySet()) { |
||||
Map<String, List<MerOrderSettlementDetailModel>> detailList = merList.get(key).stream().collect(Collectors.groupingBy(MerOrderSettlementDetailModel:: getBusinessType)); |
||||
for (String key1 : detailList.keySet()) { |
||||
Map<String, List<MerOrderSettlementDetailModel>> listMap = detailList.get(key1).stream().collect(Collectors.groupingBy(MerOrderSettlementDetailModel:: getPayType)); |
||||
for (String key2 : listMap.keySet()) { |
||||
settlementModel = new OrderSettlementModel(); |
||||
if (map.get("finishTimeS") == null) { |
||||
settlementModel.setTime("全时间段"); |
||||
} else { |
||||
settlementModel.setTime(DateUtil.date2String(DateUtil.long2Date(MapUtils.getLong(map , "finishTimeS")) , DateUtil.Y_M_D) + "-" + DateUtil.date2String(DateUtil.long2Date(MapUtils.getLong(map , "finishTimeE")) , DateUtil.Y_M_D)); |
||||
} |
||||
settlementModel.setPayType(key2); |
||||
settlementModel.setBusinessType(key1); |
||||
settlementModel.setMerName(key); |
||||
BigDecimal reduce = listMap.get(key2).stream().map(MerOrderSettlementDetailModel::getPayRealPrice).reduce(BigDecimal.ZERO, BigDecimal::add); |
||||
settlementModel.setPayRealPrice(reduce); |
||||
settlementModels.add(settlementModel); |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
} |
||||
return settlementModels; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public List<OrderSettlementSumModel> getSum(Map<String, Object> map) { |
||||
|
||||
List<MerOrderSettlementDetailModel> list = settlementData(map); |
||||
|
||||
List<OrderSettlementSumModel> sumModels = new ArrayList<>(); |
||||
OrderSettlementSumModel sumModel; |
||||
|
||||
Map<String, List<MerOrderSettlementDetailModel>> detailList = list.stream().collect(Collectors.groupingBy(MerOrderSettlementDetailModel:: getBusinessType)); |
||||
for (String key1 : detailList.keySet()) { |
||||
Map<String, List<MerOrderSettlementDetailModel>> listMap = detailList.get(key1).stream().collect(Collectors.groupingBy(MerOrderSettlementDetailModel:: getPayType)); |
||||
for (String key2 : listMap.keySet()) { |
||||
sumModel = new OrderSettlementSumModel(); |
||||
if (map.get("finishTimeS") == null) { |
||||
sumModel.setTime("全时间段"); |
||||
} else { |
||||
sumModel.setTime(DateUtil.date2String(DateUtil.long2Date(MapUtils.getLong(map , "finishTimeS")) , DateUtil.Y_M_D) + "-" + DateUtil.date2String(DateUtil.long2Date(MapUtils.getLong(map , "finishTimeE")) , DateUtil.Y_M_D)); |
||||
} |
||||
sumModel.setPayType(key2); |
||||
sumModel.setBusinessType(key1); |
||||
BigDecimal reduce = listMap.get(key2).stream().map(MerOrderSettlementDetailModel::getPayRealPrice).reduce(BigDecimal.ZERO, BigDecimal::add); |
||||
sumModel.setPayRealPrice(reduce); |
||||
sumModels.add(sumModel); |
||||
} |
||||
|
||||
|
||||
} |
||||
return sumModels; |
||||
} |
||||
|
||||
// 查询结算订单详情
|
||||
private List<MerOrderSettlementDetailModel> settlementData(Map<String, Object> map) { |
||||
List<MerOrderSettlementDetailModel> list = new ArrayList<>(); |
||||
// 卡券订单整合
|
||||
list = couponOrder(map , list); |
||||
// 查询实物订单
|
||||
list = goodsOrder(map , list); |
||||
// 查询电影票订单
|
||||
list = cinemaOrder(map , list); |
||||
// 查询星巴克
|
||||
list = starbucksOrder(map , list); |
||||
// 查询美团订单
|
||||
list = meiTuanOrder(map , list); |
||||
// 查询会员订单
|
||||
list = membersOrder(map , list); |
||||
|
||||
return list; |
||||
} |
||||
|
||||
// 实物订单整合
|
||||
private List<MerOrderSettlementDetailModel> goodsOrder(Map<String, Object> map, List<MerOrderSettlementDetailModel> list) { |
||||
// 查询实物订单
|
||||
List<BsOrderGoods> orderGoodsList = goodsService.getListFinish(map); |
||||
MerOrderSettlementDetailModel model; |
||||
for (BsOrderGoods orderGoods : orderGoodsList) { |
||||
model = new MerOrderSettlementDetailModel(); |
||||
model.setBusinessType("实物订单"); |
||||
model.setGoodsName(orderGoods.getGoodsName()); |
||||
model.setMerName(findMerName(orderGoods.getMerId())); |
||||
if (orderGoods.getPlatformCode() != null) { |
||||
model.setPlatform(UserLoginPlatform.getDataByType(orderGoods.getPlatformCode()).getName()); |
||||
} |
||||
model.setOrderNo(orderGoods.getOrderNo()); |
||||
model.setChildOrderNo(orderGoods.getChildOrderNo()); |
||||
model.setBusiness(orderGoods.getLogisticsNo()); |
||||
if (orderGoods.getPayRealPrice() == null) { |
||||
model.setPayRealPrice(new BigDecimal(0)); |
||||
} else { |
||||
model.setPayRealPrice(orderGoods.getPayRealPrice()); |
||||
} |
||||
|
||||
if (orderGoods.getPayType() != null) { |
||||
model.setPayType(OrderPayTypeEnum.getData(orderGoods.getPayType()).getName()); |
||||
} else { |
||||
model.setPayType("未知"); |
||||
} |
||||
if (orderGoods.getFinishTime() != null) { |
||||
model.setFinishTime(DateUtil.date2String(orderGoods.getFinishTime() , DateUtil.Y_M_D_HMS)); |
||||
} else { |
||||
model.setFinishTime(DateUtil.date2String(orderGoods.getUpdateTime() , DateUtil.Y_M_D_HMS)); |
||||
} |
||||
|
||||
list.add(model); |
||||
} |
||||
return list; |
||||
} |
||||
|
||||
// 卡券订单整合
|
||||
private List<MerOrderSettlementDetailModel> couponOrder(Map<String, Object> map , List<MerOrderSettlementDetailModel> list) { |
||||
// 查询卡券订单
|
||||
List<BsOrderCoupon> orderCouponList = orderCouponService.getOrderCouponList(map); |
||||
Map<String , Object> mapCou = new HashMap<>(); |
||||
mapCou.put("couStatus", 2); |
||||
// 查询卡券订单卡密
|
||||
List<OrderCouponModel> orderCouponModelList = orderCouponService.getOrderList(mapCou); |
||||
|
||||
MerOrderSettlementDetailModel model; |
||||
for (BsOrderCoupon orderCoupon : orderCouponList) { |
||||
String business = couponCode(orderCoupon.getChildOrderNo() , orderCouponModelList); |
||||
if (business != null) { |
||||
model = new MerOrderSettlementDetailModel(); |
||||
model.setGoodsName(orderCoupon.getGoodsName()); |
||||
model.setBusinessType("卡券订单"); |
||||
model.setMerName(findMerName(orderCoupon.getMerId())); |
||||
if (orderCoupon.getPlatformCode() != null) { |
||||
model.setPlatform(UserLoginPlatform.getDataByType(orderCoupon.getPlatformCode()).getName()); |
||||
} |
||||
model.setOrderNo(orderCoupon.getOrderNo()); |
||||
model.setChildOrderNo(orderCoupon.getChildOrderNo()); |
||||
model.setBusiness(business); |
||||
if (orderCoupon.getPayRealPrice() == null) { |
||||
model.setPayRealPrice(new BigDecimal(0)); |
||||
} else { |
||||
model.setPayRealPrice(orderCoupon.getPayRealPrice()); |
||||
} |
||||
if (orderCoupon.getPayType() != null) { |
||||
model.setPayType(OrderPayTypeEnum.getData(orderCoupon.getPayType()).getName()); |
||||
} else { |
||||
model.setPayType("未知"); |
||||
} |
||||
model.setFinishTime(DateUtil.date2String(orderCoupon.getUpdateTime() , DateUtil.Y_M_D_HMS)); |
||||
list.add(model); |
||||
} |
||||
|
||||
} |
||||
|
||||
return list; |
||||
} |
||||
// 整合电影票订单
|
||||
private List<MerOrderSettlementDetailModel> cinemaOrder(Map<String, Object> map, List<MerOrderSettlementDetailModel> list) { |
||||
// 查询电影票订单
|
||||
List<BsOrderCinema> orderCinemaList = cinemaService.getListFinish(map); |
||||
MerOrderSettlementDetailModel model; |
||||
for (BsOrderCinema orderCinema : orderCinemaList) { |
||||
model = new MerOrderSettlementDetailModel(); |
||||
model.setBusinessType("电影票订单"); |
||||
model.setGoodsName(orderCinema.getGoodsName()); |
||||
model.setMerName(findMerName(orderCinema.getMerId())); |
||||
if (orderCinema.getPlatformCode() != null) { |
||||
model.setPlatform(UserLoginPlatform.getDataByType(orderCinema.getPlatformCode()).getName()); |
||||
} |
||||
model.setOrderNo(orderCinema.getOrderNo()); |
||||
model.setChildOrderNo(orderCinema.getChildOrderNo()); |
||||
if (orderCinema.getPayRealPrice() == null) { |
||||
model.setPayRealPrice(new BigDecimal(0)); |
||||
} else { |
||||
model.setPayRealPrice(orderCinema.getPayRealPrice()); |
||||
} |
||||
if (orderCinema.getPayType() != null) { |
||||
model.setPayType(OrderPayTypeEnum.getData(orderCinema.getPayType()).getName()); |
||||
} else { |
||||
model.setPayType("未知"); |
||||
} |
||||
|
||||
model.setFinishTime(DateUtil.date2String(orderCinema.getCreateTime() , DateUtil.Y_M_D_HMS)); |
||||
list.add(model); |
||||
} |
||||
return list; |
||||
} |
||||
|
||||
// 整合星巴克订单
|
||||
private List<MerOrderSettlementDetailModel> starbucksOrder(Map<String, Object> map, List<MerOrderSettlementDetailModel> list) { |
||||
// 查询星巴克
|
||||
List<BsOrderStarbucks> orderStarbucksList = starbucksService.getListFinish(map); |
||||
MerOrderSettlementDetailModel model; |
||||
for (BsOrderStarbucks orderStarbucks : orderStarbucksList) { |
||||
model = new MerOrderSettlementDetailModel(); |
||||
model.setBusinessType("星巴克订单"); |
||||
model.setGoodsName(orderStarbucks.getName()); |
||||
model.setMerName(findMerName(orderStarbucks.getMerId())); |
||||
if (orderStarbucks.getPlatformCode() != null) { |
||||
model.setPlatform(UserLoginPlatform.getDataByType(orderStarbucks.getPlatformCode()).getName()); |
||||
} |
||||
model.setOrderNo(orderStarbucks.getOrderNo()); |
||||
model.setChildOrderNo(orderStarbucks.getChildOrderNo()); |
||||
if (orderStarbucks.getPrice() == null) { |
||||
model.setPayRealPrice(new BigDecimal(0)); |
||||
} else { |
||||
model.setPayRealPrice(orderStarbucks.getPrice()); |
||||
} |
||||
if (orderStarbucks.getPayType() != null) { |
||||
model.setPayType(OrderPayTypeEnum.getData(orderStarbucks.getPayType()).getName()); |
||||
} else { |
||||
model.setPayType("未知"); |
||||
} |
||||
model.setFinishTime(DateUtil.date2String(orderStarbucks.getCreateTime() , DateUtil.Y_M_D_HMS)); |
||||
list.add(model); |
||||
} |
||||
return list; |
||||
} |
||||
// 整合美团订单
|
||||
private List<MerOrderSettlementDetailModel> meiTuanOrder(Map<String, Object> map, List<MerOrderSettlementDetailModel> list) { |
||||
// 查询美团订单
|
||||
List<BsOrderMeituan> orderMeituanList = meiTuanService.getOrderListFinish(map); |
||||
MerOrderSettlementDetailModel model; |
||||
for (BsOrderMeituan orderMeiTuan : orderMeituanList) { |
||||
model = new MerOrderSettlementDetailModel(); |
||||
model.setBusinessType("美团订单"); |
||||
model.setBusiness(orderMeiTuan.getSqtBizOrderId()); |
||||
model.setGoodsName(orderMeiTuan.getGoodsName()); |
||||
model.setMerName(findMerName(orderMeiTuan.getMerId())); |
||||
if (orderMeiTuan.getPlatformCode() != null) { |
||||
model.setPlatform(UserLoginPlatform.getDataByType(orderMeiTuan.getPlatformCode()).getName()); |
||||
} |
||||
model.setOrderNo(orderMeiTuan.getOrderNo()); |
||||
model.setChildOrderNo(orderMeiTuan.getChildOrderNo()); |
||||
if (orderMeiTuan.getPayRealPrice() == null) { |
||||
model.setPayRealPrice(new BigDecimal(0)); |
||||
} else { |
||||
model.setPayRealPrice(orderMeiTuan.getPayRealPrice()); |
||||
} |
||||
if (orderMeiTuan.getPayType() != null) { |
||||
model.setPayType(OrderPayTypeEnum.getData(orderMeiTuan.getPayType()).getName()); |
||||
} else { |
||||
model.setPayType("未知"); |
||||
} |
||||
if (orderMeiTuan.getFinishTime() != null) { |
||||
model.setFinishTime(DateUtil.date2String(orderMeiTuan.getFinishTime() , DateUtil.Y_M_D_HMS)); |
||||
} else { |
||||
model.setFinishTime(DateUtil.date2String(orderMeiTuan.getUpdateTime() , DateUtil.Y_M_D_HMS)); |
||||
} |
||||
list.add(model); |
||||
} |
||||
return list; |
||||
} |
||||
// 整合会员订单
|
||||
private List<MerOrderSettlementDetailModel> membersOrder(Map<String, Object> map, List<MerOrderSettlementDetailModel> list) { |
||||
// 查询会员订单
|
||||
List<BsOrderMember> orderMembersList = memberService.getListFinish(map); |
||||
MerOrderSettlementDetailModel model; |
||||
for (BsOrderMember orderMember : orderMembersList) { |
||||
model = new MerOrderSettlementDetailModel(); |
||||
model.setBusinessType("会员订单"); |
||||
model.setGoodsName(orderMember.getGoodsName()); |
||||
model.setMerName(findMerName(orderMember.getMerId())); |
||||
if (orderMember.getPlatformCode() != null) { |
||||
model.setPlatform(UserLoginPlatform.getDataByType(orderMember.getPlatformCode()).getName()); |
||||
} |
||||
model.setOrderNo(orderMember.getOrderNo()); |
||||
model.setChildOrderNo(orderMember.getChildOrderNo()); |
||||
if (orderMember.getPayRealPrice() == null) { |
||||
model.setPayRealPrice(new BigDecimal(0)); |
||||
} else { |
||||
model.setPayRealPrice(orderMember.getPayRealPrice()); |
||||
} |
||||
if (orderMember.getPayType() != null) { |
||||
model.setPayType(OrderPayTypeEnum.getData(orderMember.getPayType()).getName()); |
||||
} else { |
||||
model.setPayType("未知"); |
||||
} |
||||
if (orderMember.getFinishTime() != null) { |
||||
model.setFinishTime(DateUtil.date2String(orderMember.getFinishTime() , DateUtil.Y_M_D_HMS)); |
||||
} else { |
||||
model.setFinishTime(DateUtil.date2String(orderMember.getUpdateTime() , DateUtil.Y_M_D_HMS)); |
||||
} |
||||
list.add(model); |
||||
} |
||||
return list; |
||||
} |
||||
|
||||
|
||||
private String findMerName(Long merId) { |
||||
// 查询商户
|
||||
List<BsMer> bsMerList = bsMerService.getList(new HashMap<>()); |
||||
|
||||
bsMerList = bsMerList.stream().filter(s -> s.getId().equals(merId)).collect(Collectors.toList()); |
||||
|
||||
if (bsMerList.size() > 0) { |
||||
return bsMerList.get(0).getMerName(); |
||||
} |
||||
return merId.toString(); |
||||
} |
||||
|
||||
private String couponCode(String childOrderNo , List<OrderCouponModel> orderCouponModelList) { |
||||
|
||||
orderCouponModelList = orderCouponModelList.stream().filter(s -> s.getChildOrderNo().equals(childOrderNo)).collect(Collectors.toList()); |
||||
|
||||
if (!orderCouponModelList.isEmpty()) { |
||||
StringBuilder sb = new StringBuilder(); |
||||
|
||||
for (OrderCouponModel orderCouponModel : orderCouponModelList) { |
||||
sb.append(orderCouponModel.getCouNo()).append(","); |
||||
} |
||||
return sb.substring(0, sb.length() - 1); |
||||
} |
||||
return null; |
||||
} |
||||
} |
Loading…
Reference in new issue