diff --git a/bweb/src/main/java/com/bweb/controller/BsProductConfigController.java b/bweb/src/main/java/com/bweb/controller/BsProductConfigController.java new file mode 100644 index 0000000..645e8a7 --- /dev/null +++ b/bweb/src/main/java/com/bweb/controller/BsProductConfigController.java @@ -0,0 +1,141 @@ +package com.bweb.controller; + +import com.bweb.controller.goods.GoodsController; +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.ResponseMsgUtil; +import com.hfkj.entity.BsProductConfig; +import com.hfkj.model.ResponseData; +import com.hfkj.model.SecUserSessionObject; +import com.hfkj.service.BsProductConfigService; +import com.hfkj.sysenum.order.OrderChildProductTypeEnum; +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.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Date; + + +@Controller +@RequestMapping(value="/productConfig") +@Api(value="商户产品折扣配置") +public class BsProductConfigController { + + private static final Logger log = LoggerFactory.getLogger(GoodsController.class); + + @Resource + private UserCenter userCenter; + + @Resource + private BsProductConfigService bsProductConfigService; + + + @RequestMapping(value="/editProductConfig",method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "编辑产品配置") + public ResponseData editProductConfig(@RequestBody BsProductConfig body, HttpServletRequest request) { + try { + + SessionObject sessionObject = userCenter.getSessionObject(request); + SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); + + if (body == null + || body.getMerId() == null + || body.getProductType() == null + ) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); + } + + BsProductConfig productConfig = bsProductConfigService.queryDetail(body.getProductType()); + + if (productConfig != null && !productConfig.getMerId().equals(body.getMerId())) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "当前产品已有商户配置,不可配置!"); + } + + if (productConfig != null) { + body.setId(productConfig.getId()); + } + + BsProductConfig bsProductConfig; + + if (body.getId() != null) { + // 查询 + bsProductConfig = bsProductConfigService.queryDetail(body.getId()); + if (bsProductConfig == null) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.CONTENT_NOT_FOUND, ""); + } + } else { + bsProductConfig = new BsProductConfig(); + bsProductConfig.setCreateTime(new Date()); + + } + bsProductConfig.setProductType(body.getProductType()); + bsProductConfig.setDiscount(body.getDiscount()); + bsProductConfig.setMerId(body.getMerId()); + bsProductConfig.setUpdateTime(new Date()); + bsProductConfig.setStatus(1); + + OrderChildProductTypeEnum typeEnum = OrderChildProductTypeEnum.getData(body.getProductType()); + if (typeEnum == null) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "当前产品类型未配置!"); + } + + bsProductConfig.setProductName(typeEnum.getName()); + bsProductConfig.setOpId(userModel.getAccount().getId()); + bsProductConfig.setOpName(userModel.getAccount().getUserName()); + + if (body.getId() != null) { + bsProductConfigService.update(bsProductConfig); + } else { + bsProductConfigService.create(bsProductConfig); + } + + return ResponseMsgUtil.success("操作成功"); + + } catch (Exception e) { + log.error("error!",e); + return ResponseMsgUtil.exception(e); + } + + } + + @RequestMapping(value="/getList",method = RequestMethod.GET) + @ResponseBody + @ApiOperation(value = "查询列表") + public ResponseData getList(@RequestParam(value = "merId" , required = false) Long merId) { + try { + + return ResponseMsgUtil.success(bsProductConfigService.getList(merId)); + + } catch (Exception e) { + log.error("error!",e); + return ResponseMsgUtil.exception(e); + } + } + + @RequestMapping(value="/delete",method = RequestMethod.GET) + @ResponseBody + @ApiOperation(value = "删除") + public ResponseData delete(@RequestParam(value = "id" , required = false) Long id) { + try { + + + bsProductConfigService.delete(id , false); + + return ResponseMsgUtil.success("删除成功"); + + } catch (Exception e) { + log.error("error!",e); + return ResponseMsgUtil.exception(e); + } + } + +} diff --git a/bweb/src/main/java/com/bweb/controller/FileUploadController.java b/bweb/src/main/java/com/bweb/controller/FileUploadController.java index 251a9b1..07ba0cb 100644 --- a/bweb/src/main/java/com/bweb/controller/FileUploadController.java +++ b/bweb/src/main/java/com/bweb/controller/FileUploadController.java @@ -19,8 +19,10 @@ import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import javax.annotation.Resource; +import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -129,6 +131,7 @@ public class FileUploadController { if (!dir.exists()) { dir.mkdirs(); } + out = new FileOutputStream(destDirName + File.separator + fileName); out.write(file.getBytes()); out.flush(); diff --git a/bweb/src/main/java/com/bweb/controller/goods/GoodsBrandController.java b/bweb/src/main/java/com/bweb/controller/goods/GoodsBrandController.java index 7f614e9..9067b20 100644 --- a/bweb/src/main/java/com/bweb/controller/goods/GoodsBrandController.java +++ b/bweb/src/main/java/com/bweb/controller/goods/GoodsBrandController.java @@ -43,43 +43,50 @@ public class GoodsBrandController { @ResponseBody @ApiOperation(value = "编辑商品品牌") public ResponseData editGoodsBrand(@RequestBody GoodsBrand body, HttpServletRequest request) { + try { - SessionObject sessionObject = userCenter.getSessionObject(request); - SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); + SessionObject sessionObject = userCenter.getSessionObject(request); + SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); - if (body == null - || body.getImgUrl() == null - || StringUtils.isBlank(body.getTitle())) { - throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); - } + if (body == null + || body.getImgUrl() == null + || StringUtils.isBlank(body.getTitle())) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); + } - GoodsBrand goodsBrand; + GoodsBrand goodsBrand; + + if (body.getId() != null) { + // 查询品牌 + goodsBrand = goodsBrandService.queryDetail(body.getId()); + if (goodsBrand == null) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.CONTENT_NOT_FOUND, ""); + } + } else { + goodsBrand = new GoodsBrand(); + goodsBrand.setCreateTime(new Date()); + } - if (body.getId() != null) { - // 查询品牌 - goodsBrand = goodsBrandService.queryDetail(body.getId()); - if (goodsBrand == null) { - throw ErrorHelp.genException(SysCode.System, ErrorCode.CONTENT_NOT_FOUND, ""); + goodsBrand.setUpdateTime(new Date()); + goodsBrand.setStatus(1); + goodsBrand.setTitle(body.getTitle()); + goodsBrand.setImgUrl(body.getImgUrl()); + goodsBrand.setOpId(userModel.getAccount().getId()); + goodsBrand.setOpName(userModel.getAccount().getUserName()); + + if (body.getId() != null) { + goodsBrandService.update(goodsBrand); + } else { + goodsBrandService.create(goodsBrand); } - } else { - goodsBrand = new GoodsBrand(); - goodsBrand.setCreateTime(new Date()); - } - goodsBrand.setUpdateTime(new Date()); - goodsBrand.setStatus(1); - goodsBrand.setTitle(body.getTitle()); - goodsBrand.setImgUrl(body.getImgUrl()); - goodsBrand.setOpId(userModel.getAccount().getId()); - goodsBrand.setOpName(userModel.getAccount().getUserName()); - - if (body.getId() != null) { - goodsBrandService.update(goodsBrand); - } else { - goodsBrandService.create(goodsBrand); + return ResponseMsgUtil.success("操作成功"); + + } catch (Exception e) { + log.error("error!",e); + return ResponseMsgUtil.exception(e); } - return ResponseMsgUtil.success("操作成功"); } @RequestMapping(value="/getListBrand",method = RequestMethod.GET) diff --git a/bweb/src/main/java/com/bweb/controller/goods/GoodsController.java b/bweb/src/main/java/com/bweb/controller/goods/GoodsController.java index 339bfda..da39b4f 100644 --- a/bweb/src/main/java/com/bweb/controller/goods/GoodsController.java +++ b/bweb/src/main/java/com/bweb/controller/goods/GoodsController.java @@ -364,9 +364,10 @@ public class GoodsController { } } - @RequestMapping(value="/deleteGoodsMsg",method = RequestMethod.GET) - @ApiOperation(value = "删除") - public ResponseData deleteGoodsMsg(@RequestParam(value = "id" , required = false) Long id) { + @RequestMapping(value="/deleteGoods",method = RequestMethod.GET) + @ResponseBody + @ApiOperation(value = "删除") + public ResponseData deleteGoods(@RequestParam(value = "id" , required = false) Long id) { try { goodsMsgService.delete(id , false); diff --git a/cweb/src/main/java/com/cweb/controller/CommonController.java b/cweb/src/main/java/com/cweb/controller/CommonController.java index 8e0531d..249db42 100644 --- a/cweb/src/main/java/com/cweb/controller/CommonController.java +++ b/cweb/src/main/java/com/cweb/controller/CommonController.java @@ -7,7 +7,6 @@ import com.hfkj.common.exception.ErrorHelp; import com.hfkj.common.exception.SysCode; import com.hfkj.common.utils.RedisUtil; import com.hfkj.common.utils.ResponseMsgUtil; -import com.hfkj.entity.BsOrderGoods; import com.hfkj.entity.GoodsLogistics; import com.hfkj.model.ResponseData; import com.hfkj.qianzhu.channel.QianZhuService; @@ -21,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.stream.Collectors; @@ -130,7 +130,23 @@ public class CommonController { public ResponseData locateByLngAndLat(@RequestParam(name = "lng", required = true) String lng, @RequestParam(name = "lat", required = true) String lat) { try { - String cityName = "重庆市"; + + + JSONObject params = commonService.locateByLngAndLat(lng + "," + lat); + + if (params.getInteger("status") == 0) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未查询到任何城市!"); + } + + JSONObject addressComponent = params.getJSONObject("regeocode").getJSONObject("addressComponent"); + + Object value = addressComponent.get("city"); + String cityName; + if (value instanceof String) { + cityName = addressComponent.getString("city"); + } else { + cityName = addressComponent.getString("province"); + } ResponseData data = getAllQzCities(); @@ -145,7 +161,6 @@ public class CommonController { return ResponseMsgUtil.success("未查询到任何内容!"); - } else { return ResponseMsgUtil.success(data.getReturn_msg()); } diff --git a/cweb/src/main/java/com/cweb/controller/FileUploadController.java b/cweb/src/main/java/com/cweb/controller/FileUploadController.java index 5beb98c..3f89c0e 100644 --- a/cweb/src/main/java/com/cweb/controller/FileUploadController.java +++ b/cweb/src/main/java/com/cweb/controller/FileUploadController.java @@ -101,7 +101,7 @@ public class FileUploadController { } @RequestMapping(value = "/fileUpload", method = RequestMethod.POST) - @ApiOperation(value = "上传文件(超过500KB压缩)") + @ApiOperation(value = "上传文件(超过3000KB压缩)") @ResponseBody public ResponseData fileUpload(@RequestParam(value = "files" , required = false) MultipartFile files, HttpServletRequest request, @@ -138,7 +138,7 @@ public class FileUploadController { fileNames.add(childPath + "/" + fileName); // 图片压缩 InputStream fis = new FileInputStream(destDirName + File.separator + fileName); - if (fis.available() > 500000) { + if (fis.available() > 3000000) { Thumbnails.of(new FileInputStream(destDirName + File.separator + fileName)).scale(0.5).toFile(new File(destDirName + File.separator + fileName)); } PutObjectResult putObjectResult = HuaWeiYunObs.putObject(CommonSysConst.getSysConfig().getObsBucketName(), diff --git a/cweb/src/main/java/com/cweb/controller/qianZhu/CinemaController.java b/cweb/src/main/java/com/cweb/controller/qianZhu/CinemaController.java index 6318821..6ad369b 100644 --- a/cweb/src/main/java/com/cweb/controller/qianZhu/CinemaController.java +++ b/cweb/src/main/java/com/cweb/controller/qianZhu/CinemaController.java @@ -1,9 +1,14 @@ package com.cweb.controller.qianZhu; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.hfkj.common.utils.DateUtil; import com.hfkj.common.utils.ResponseMsgUtil; +import com.hfkj.entity.BsProductConfig; import com.hfkj.model.ResponseData; import com.hfkj.qianzhu.channel.CinemaService; +import com.hfkj.service.BsProductConfigService; +import com.hfkj.sysenum.order.OrderChildProductTypeEnum; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; @@ -14,10 +19,12 @@ 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 java.math.BigDecimal; -import java.util.Date; +import java.util.Comparator; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; @Controller @RequestMapping(value="/cinema") @@ -26,6 +33,9 @@ public class CinemaController { Logger log = LoggerFactory.getLogger(CinemaController.class); + @Resource + private BsProductConfigService productConfigService; + @RequestMapping(value="/filmsPagedQuery",method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "根据城市分页查询影片") @@ -101,6 +111,7 @@ public class CinemaController { public ResponseData cinemasPagedQuery(@RequestParam(value = "cityId", required = false) Integer cityId, @RequestParam(value = "cityCode", required = false) String cityCode, @RequestParam(value = "regionId", required = false) Integer regionId, + @RequestParam(value = "filmId", required = false) Integer filmId, @RequestParam(value = "cinemaId", required = false) String cinemaId, @RequestParam(value = "showDate", required = false) String showDate, @RequestParam(value = "brandKeyword", required = false) String brandKeyword, @@ -122,6 +133,9 @@ public class CinemaController { if (cinemaId != null) { params.put("cinemaId", cinemaId); } + if (filmId != null) { + params.put("filmId", filmId); + } if (regionId != null) { params.put("regionId", regionId); } @@ -191,8 +205,8 @@ public class CinemaController { @RequestParam(name = "cityCode", required = false) String cityCode, @RequestParam(name = "cinemaId", required = false) Integer cinemaId, @RequestParam(name = "filmId", required = false) Integer filmId, - @RequestParam(value = "showTimeBeginTime" , required = false) Long showTimeBeginTime, - @RequestParam(value = "showTimeEndTime" , required = false) Long showTimeEndTime, + @RequestParam(value = "showTimeBeginTime" , required = false) String showTimeBeginTime, + @RequestParam(value = "showTimeEndTime" , required = false) String showTimeEndTime, @RequestParam(name = "pageNum", required = true) Integer pageNum, @RequestParam(name = "pageSize", required = true) Integer pageSize ) { @@ -222,7 +236,21 @@ public class CinemaController { params.put("pageIndex", pageNum); params.put("pageSize", pageSize); - return ResponseMsgUtil.success(CinemaService.pagedQuery(params)); + JSONObject object = CinemaService.pagedQuery(params); + JSONArray jsonArray = object.getJSONArray("data"); + + JSONArray newJSONArray = jsonArray.stream().sorted( + // 根据对象中的ID进行升序排序 小到大 + Comparator.comparingLong( + e -> DateUtil.timesTamp(JSONObject.parseObject(e.toString()).getString("showTime")) + ) + // 放开下面的注释,使用reversed()方法,就是降序 大到小 + // .reversed() + ).collect(Collectors.toCollection(JSONArray::new)); + + object.put("data" , newJSONArray); + + return ResponseMsgUtil.success(object); } catch (Exception e) { log.error("error!",e); @@ -242,7 +270,34 @@ public class CinemaController { Map params = new HashMap<>(); params.put("showId", showId); - return ResponseMsgUtil.success(CinemaService.getRealTimeSeatByShowId(params)); + JSONObject object = CinemaService.getRealTimeSeatByShowId(params).getJSONObject("data"); + JSONArray jsonArray = object.getJSONArray("seats"); + + BsProductConfig productConfig = productConfigService.queryDetail(OrderChildProductTypeEnum.type3.getCode()); + + for(Object array : jsonArray) { + JSONArray seats = (JSONArray) array; + if (!seats.isEmpty()) { + for(Object s : seats) { + JSONObject jsonObject = (JSONObject) s; + if (jsonObject != null) { + BigDecimal salePrice = jsonObject.getBigDecimal("fastDrawModePrice").multiply(productConfig.getDiscount()).divide(new BigDecimal(100) , 2, BigDecimal.ROUND_HALF_UP); + + if (salePrice.compareTo(jsonObject.getBigDecimal("price")) > 0) { + jsonObject.put("salePrice" , salePrice); + } else { + jsonObject.put("salePrice" , jsonObject.getBigDecimal("price")); + } + } + } + } + + } + + object.put("seats" , jsonArray); + + + return ResponseMsgUtil.success(object); } catch (Exception e) { log.error("error!",e); diff --git a/order/src/main/java/com/order/controller/OrderController.java b/order/src/main/java/com/order/controller/OrderController.java index 950a430..b9f9633 100644 --- a/order/src/main/java/com/order/controller/OrderController.java +++ b/order/src/main/java/com/order/controller/OrderController.java @@ -72,8 +72,7 @@ public class OrderController { // 子订单必填项校验 for (OrderChildModel orderChild : body.getOrderChildList()) { if (orderChild.getProductType() == null - || orderChild.getProductId() == null - || orderChild.getProductCount() == null) { + ) { throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); } if ((orderChild.getProductType().equals(OrderChildProductTypeEnum.type1.getCode()) @@ -105,6 +104,7 @@ public class OrderController { throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); } + return ResponseMsgUtil.success(orderService.cancel(body.getString("orderNo"), false)); } catch (Exception e) { diff --git a/order/src/main/java/com/order/controller/business/BsOrderCinemaController.java b/order/src/main/java/com/order/controller/business/BsOrderCinemaController.java new file mode 100644 index 0000000..dd2de69 --- /dev/null +++ b/order/src/main/java/com/order/controller/business/BsOrderCinemaController.java @@ -0,0 +1,85 @@ +package com.order.controller.business; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.hfkj.common.security.SessionObject; +import com.hfkj.common.security.UserCenter; +import com.hfkj.common.utils.ResponseMsgUtil; +import com.hfkj.model.ResponseData; +import com.hfkj.model.SecUserSessionObject; +import com.hfkj.service.goods.BsOrderCinemaService; +import com.hfkj.sysenum.SecUserObjectTypeEnum; +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.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.util.HashMap; +import java.util.Map; + +@Controller +@RequestMapping(value="/orderCinema") +@Api(value="电影票订单管理") +public class BsOrderCinemaController { + private static final Logger log = LoggerFactory.getLogger(BsOrderCinemaController.class); + + @Resource + private UserCenter userCenter; + + @Resource + private BsOrderCinemaService bsOrderCinemaService; + + + @RequestMapping(value="/getListCinema",method = RequestMethod.GET) + @ResponseBody + @ApiOperation(value = "查询列表") + public ResponseData getListCinema( + @RequestParam(value = "orderNo" , required = false) String orderNo, + @RequestParam(value = "childOrderNo" , required = false) String childOrderNo, + @RequestParam(value = "userPhone" , required = false) String userPhone, + @RequestParam(value = "goodsSpecsName" , required = false) String goodsSpecsName, + @RequestParam(value = "goodsName" , required = false) String goodsName, + @RequestParam(value = "payType" , required = false) Integer payType, + @RequestParam(value = "status" , required = false) Integer status, + @RequestParam(value = "createTimeS" , required = false) Long createTimeS, + @RequestParam(value = "createTimeE" , required = false) Long createTimeE, + @RequestParam(value = "pageNum" , required = true) Integer pageNum, + @RequestParam(value = "pageSize" , required = true) Integer pageSize, HttpServletRequest request) { + try { + + SessionObject sessionObject = userCenter.getSessionObject(request); + SecUserSessionObject userModel = (SecUserSessionObject) sessionObject.getObject(); + + Map map = new HashMap<>(); + + if (userModel.getAccount().getObjectType().equals(SecUserObjectTypeEnum.type2.getCode())) { + map.put("merId", userModel.getAccount().getObjectId()); + } + + map.put("orderNo", orderNo); + map.put("childOrderNo", childOrderNo); + map.put("userPhone", userPhone); + map.put("goodsSpecsName", goodsSpecsName); + map.put("goodsName", goodsName); + map.put("payType", payType); + map.put("createTimeS", createTimeS); + map.put("createTimeE", createTimeE); + map.put("status", status); + PageHelper.startPage(pageNum, pageSize); + + return ResponseMsgUtil.success(new PageInfo<>(bsOrderCinemaService.getList(map))); + + } catch (Exception e) { + log.error("error!",e); + return ResponseMsgUtil.exception(e); + } + } + +} diff --git a/order/src/main/java/com/order/controller/notify/QzCinemaNotify.java b/order/src/main/java/com/order/controller/notify/QzCinemaNotify.java new file mode 100644 index 0000000..f3266c9 --- /dev/null +++ b/order/src/main/java/com/order/controller/notify/QzCinemaNotify.java @@ -0,0 +1,49 @@ +package com.order.controller.notify; + +import com.alibaba.fastjson.JSONObject; +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.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +@Controller +@RequestMapping(value = "/cinemaNotify") +@Api(value = "千猪电影票通知") +public class QzCinemaNotify { + + private static final Logger log = LoggerFactory.getLogger(QzCinemaNotify.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); + } + } + +} diff --git a/service/src/main/java/com/hfkj/common/utils/DateUtil.java b/service/src/main/java/com/hfkj/common/utils/DateUtil.java index a2d8917..b654326 100644 --- a/service/src/main/java/com/hfkj/common/utils/DateUtil.java +++ b/service/src/main/java/com/hfkj/common/utils/DateUtil.java @@ -128,6 +128,25 @@ public class DateUtil { } + /** + * @MethodName timesTamp + * @Description:date转换成UNIX时间戳,毫秒 + * @param dateString + * @return: java.lang.Long + * @Author: Sum1Dream + * @Date: 2024/7/3 下午6:10 + */ + public static Long timesTamp(String dateString) { + try { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = formatter.parse(dateString); + return date.getTime(); + }catch (Exception e){ + return null; + } + + } + /** * 获取某月第一天日期 * @return Date diff --git a/service/src/main/java/com/hfkj/config/CommonSysConfig.java b/service/src/main/java/com/hfkj/config/CommonSysConfig.java index d603e4d..b189753 100644 --- a/service/src/main/java/com/hfkj/config/CommonSysConfig.java +++ b/service/src/main/java/com/hfkj/config/CommonSysConfig.java @@ -106,6 +106,7 @@ public class CommonSysConfig { private String qianZhuH5url; private String qianZhuPlatformId; private String qianZhuSecret; + private String qianZhuCinemaNotify; /** * 话费接口请求参数 diff --git a/service/src/main/java/com/hfkj/dao/BsOrderGoodsMapper.java b/service/src/main/java/com/hfkj/dao/BsOrderGoodsMapper.java index ed2b500..26183f3 100644 --- a/service/src/main/java/com/hfkj/dao/BsOrderGoodsMapper.java +++ b/service/src/main/java/com/hfkj/dao/BsOrderGoodsMapper.java @@ -56,7 +56,8 @@ public interface BsOrderGoodsMapper extends BsOrderGoodsMapperExt { "logistics_status, create_time, ", "pay_time, cancel_time, ", "refund_time, finish_time, ", - "update_time, ext_1, ", + "update_time, exception_status, ", + "exception_msg, ext_1, ", "ext_2, ext_3)", "values (#{logisticsNo,jdbcType=VARCHAR}, #{freightPrice,jdbcType=DECIMAL}, ", "#{deliveryAddressId,jdbcType=BIGINT}, #{deliveryAddress,jdbcType=VARCHAR}, ", @@ -75,7 +76,8 @@ public interface BsOrderGoodsMapper extends BsOrderGoodsMapperExt { "#{logisticsStatus,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, ", "#{payTime,jdbcType=TIMESTAMP}, #{cancelTime,jdbcType=TIMESTAMP}, ", "#{refundTime,jdbcType=TIMESTAMP}, #{finishTime,jdbcType=TIMESTAMP}, ", - "#{updateTime,jdbcType=TIMESTAMP}, #{ext1,jdbcType=VARCHAR}, ", + "#{updateTime,jdbcType=TIMESTAMP}, #{exceptionStatus,jdbcType=BIT}, ", + "#{exceptionMsg,jdbcType=VARCHAR}, #{ext1,jdbcType=VARCHAR}, ", "#{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})" }) @Options(useGeneratedKeys=true,keyProperty="id") @@ -125,6 +127,8 @@ public interface BsOrderGoodsMapper extends BsOrderGoodsMapperExt { @Result(column="refund_time", property="refundTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="finish_time", property="finishTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="exception_status", property="exceptionStatus", jdbcType=JdbcType.BIT), + @Result(column="exception_msg", property="exceptionMsg", jdbcType=JdbcType.VARCHAR), @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR), @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR), @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR) @@ -139,8 +143,8 @@ public interface BsOrderGoodsMapper extends BsOrderGoodsMapperExt { "goods_specs_original_price, goods_count, total_price, total_deduction_price, ", "coupon_discount_price, integral_discount_price, pay_real_price, pay_channel, ", "pay_serial_no, pay_type, `status`, logistics_status_desc, logistics_status, ", - "create_time, pay_time, cancel_time, refund_time, finish_time, update_time, ext_1, ", - "ext_2, ext_3", + "create_time, pay_time, cancel_time, refund_time, finish_time, update_time, exception_status, ", + "exception_msg, ext_1, ext_2, ext_3", "from bs_order_goods", "where id = #{id,jdbcType=BIGINT}" }) @@ -183,6 +187,8 @@ public interface BsOrderGoodsMapper extends BsOrderGoodsMapperExt { @Result(column="refund_time", property="refundTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="finish_time", property="finishTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="exception_status", property="exceptionStatus", jdbcType=JdbcType.BIT), + @Result(column="exception_msg", property="exceptionMsg", jdbcType=JdbcType.VARCHAR), @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR), @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR), @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR) @@ -237,6 +243,8 @@ public interface BsOrderGoodsMapper extends BsOrderGoodsMapperExt { "refund_time = #{refundTime,jdbcType=TIMESTAMP},", "finish_time = #{finishTime,jdbcType=TIMESTAMP},", "update_time = #{updateTime,jdbcType=TIMESTAMP},", + "exception_status = #{exceptionStatus,jdbcType=BIT},", + "exception_msg = #{exceptionMsg,jdbcType=VARCHAR},", "ext_1 = #{ext1,jdbcType=VARCHAR},", "ext_2 = #{ext2,jdbcType=VARCHAR},", "ext_3 = #{ext3,jdbcType=VARCHAR}", diff --git a/service/src/main/java/com/hfkj/dao/BsOrderGoodsSqlProvider.java b/service/src/main/java/com/hfkj/dao/BsOrderGoodsSqlProvider.java index 6b2f795..1694752 100644 --- a/service/src/main/java/com/hfkj/dao/BsOrderGoodsSqlProvider.java +++ b/service/src/main/java/com/hfkj/dao/BsOrderGoodsSqlProvider.java @@ -176,6 +176,14 @@ public class BsOrderGoodsSqlProvider { sql.VALUES("update_time", "#{updateTime,jdbcType=TIMESTAMP}"); } + if (record.getExceptionStatus() != null) { + sql.VALUES("exception_status", "#{exceptionStatus,jdbcType=BIT}"); + } + + if (record.getExceptionMsg() != null) { + sql.VALUES("exception_msg", "#{exceptionMsg,jdbcType=VARCHAR}"); + } + if (record.getExt1() != null) { sql.VALUES("ext_1", "#{ext1,jdbcType=VARCHAR}"); } @@ -235,6 +243,8 @@ public class BsOrderGoodsSqlProvider { sql.SELECT("refund_time"); sql.SELECT("finish_time"); sql.SELECT("update_time"); + sql.SELECT("exception_status"); + sql.SELECT("exception_msg"); sql.SELECT("ext_1"); sql.SELECT("ext_2"); sql.SELECT("ext_3"); @@ -407,6 +417,14 @@ public class BsOrderGoodsSqlProvider { sql.SET("update_time = #{record.updateTime,jdbcType=TIMESTAMP}"); } + if (record.getExceptionStatus() != null) { + sql.SET("exception_status = #{record.exceptionStatus,jdbcType=BIT}"); + } + + if (record.getExceptionMsg() != null) { + sql.SET("exception_msg = #{record.exceptionMsg,jdbcType=VARCHAR}"); + } + if (record.getExt1() != null) { sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}"); } @@ -465,6 +483,8 @@ public class BsOrderGoodsSqlProvider { sql.SET("refund_time = #{record.refundTime,jdbcType=TIMESTAMP}"); sql.SET("finish_time = #{record.finishTime,jdbcType=TIMESTAMP}"); sql.SET("update_time = #{record.updateTime,jdbcType=TIMESTAMP}"); + sql.SET("exception_status = #{record.exceptionStatus,jdbcType=BIT}"); + sql.SET("exception_msg = #{record.exceptionMsg,jdbcType=VARCHAR}"); sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}"); sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}"); sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}"); @@ -626,6 +646,14 @@ public class BsOrderGoodsSqlProvider { sql.SET("update_time = #{updateTime,jdbcType=TIMESTAMP}"); } + if (record.getExceptionStatus() != null) { + sql.SET("exception_status = #{exceptionStatus,jdbcType=BIT}"); + } + + if (record.getExceptionMsg() != null) { + sql.SET("exception_msg = #{exceptionMsg,jdbcType=VARCHAR}"); + } + if (record.getExt1() != null) { sql.SET("ext_1 = #{ext1,jdbcType=VARCHAR}"); } diff --git a/service/src/main/java/com/hfkj/entity/BsOrderGoods.java b/service/src/main/java/com/hfkj/entity/BsOrderGoods.java index 74e159e..a6cc449 100644 --- a/service/src/main/java/com/hfkj/entity/BsOrderGoods.java +++ b/service/src/main/java/com/hfkj/entity/BsOrderGoods.java @@ -204,6 +204,16 @@ public class BsOrderGoods implements Serializable { */ private Date updateTime; + /** + * 异常状态 0:正常 1:异常 + */ + private Boolean exceptionStatus; + + /** + * 异常内容 + */ + private String exceptionMsg; + private String ext1; private String ext2; @@ -516,6 +526,22 @@ public class BsOrderGoods implements Serializable { this.updateTime = updateTime; } + public Boolean getExceptionStatus() { + return exceptionStatus; + } + + public void setExceptionStatus(Boolean exceptionStatus) { + this.exceptionStatus = exceptionStatus; + } + + public String getExceptionMsg() { + return exceptionMsg; + } + + public void setExceptionMsg(String exceptionMsg) { + this.exceptionMsg = exceptionMsg; + } + public String getExt1() { return ext1; } @@ -590,6 +616,8 @@ public class BsOrderGoods implements Serializable { && (this.getRefundTime() == null ? other.getRefundTime() == null : this.getRefundTime().equals(other.getRefundTime())) && (this.getFinishTime() == null ? other.getFinishTime() == null : this.getFinishTime().equals(other.getFinishTime())) && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime())) + && (this.getExceptionStatus() == null ? other.getExceptionStatus() == null : this.getExceptionStatus().equals(other.getExceptionStatus())) + && (this.getExceptionMsg() == null ? other.getExceptionMsg() == null : this.getExceptionMsg().equals(other.getExceptionMsg())) && (this.getExt1() == null ? other.getExt1() == null : this.getExt1().equals(other.getExt1())) && (this.getExt2() == null ? other.getExt2() == null : this.getExt2().equals(other.getExt2())) && (this.getExt3() == null ? other.getExt3() == null : this.getExt3().equals(other.getExt3())); @@ -637,6 +665,8 @@ public class BsOrderGoods implements Serializable { result = prime * result + ((getRefundTime() == null) ? 0 : getRefundTime().hashCode()); result = prime * result + ((getFinishTime() == null) ? 0 : getFinishTime().hashCode()); result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode()); + result = prime * result + ((getExceptionStatus() == null) ? 0 : getExceptionStatus().hashCode()); + result = prime * result + ((getExceptionMsg() == null) ? 0 : getExceptionMsg().hashCode()); result = prime * result + ((getExt1() == null) ? 0 : getExt1().hashCode()); result = prime * result + ((getExt2() == null) ? 0 : getExt2().hashCode()); result = prime * result + ((getExt3() == null) ? 0 : getExt3().hashCode()); @@ -687,6 +717,8 @@ public class BsOrderGoods implements Serializable { sb.append(", refundTime=").append(refundTime); sb.append(", finishTime=").append(finishTime); sb.append(", updateTime=").append(updateTime); + sb.append(", exceptionStatus=").append(exceptionStatus); + sb.append(", exceptionMsg=").append(exceptionMsg); sb.append(", ext1=").append(ext1); sb.append(", ext2=").append(ext2); sb.append(", ext3=").append(ext3); diff --git a/service/src/main/java/com/hfkj/entity/BsOrderGoodsExample.java b/service/src/main/java/com/hfkj/entity/BsOrderGoodsExample.java index 2f42d35..c22abdc 100644 --- a/service/src/main/java/com/hfkj/entity/BsOrderGoodsExample.java +++ b/service/src/main/java/com/hfkj/entity/BsOrderGoodsExample.java @@ -2536,6 +2536,136 @@ public class BsOrderGoodsExample { return (Criteria) this; } + public Criteria andExceptionStatusIsNull() { + addCriterion("exception_status is null"); + return (Criteria) this; + } + + public Criteria andExceptionStatusIsNotNull() { + addCriterion("exception_status is not null"); + return (Criteria) this; + } + + public Criteria andExceptionStatusEqualTo(Boolean value) { + addCriterion("exception_status =", value, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionStatusNotEqualTo(Boolean value) { + addCriterion("exception_status <>", value, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionStatusGreaterThan(Boolean value) { + addCriterion("exception_status >", value, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionStatusGreaterThanOrEqualTo(Boolean value) { + addCriterion("exception_status >=", value, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionStatusLessThan(Boolean value) { + addCriterion("exception_status <", value, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionStatusLessThanOrEqualTo(Boolean value) { + addCriterion("exception_status <=", value, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionStatusIn(List values) { + addCriterion("exception_status in", values, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionStatusNotIn(List values) { + addCriterion("exception_status not in", values, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionStatusBetween(Boolean value1, Boolean value2) { + addCriterion("exception_status between", value1, value2, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionStatusNotBetween(Boolean value1, Boolean value2) { + addCriterion("exception_status not between", value1, value2, "exceptionStatus"); + return (Criteria) this; + } + + public Criteria andExceptionMsgIsNull() { + addCriterion("exception_msg is null"); + return (Criteria) this; + } + + public Criteria andExceptionMsgIsNotNull() { + addCriterion("exception_msg is not null"); + return (Criteria) this; + } + + public Criteria andExceptionMsgEqualTo(String value) { + addCriterion("exception_msg =", value, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgNotEqualTo(String value) { + addCriterion("exception_msg <>", value, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgGreaterThan(String value) { + addCriterion("exception_msg >", value, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgGreaterThanOrEqualTo(String value) { + addCriterion("exception_msg >=", value, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgLessThan(String value) { + addCriterion("exception_msg <", value, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgLessThanOrEqualTo(String value) { + addCriterion("exception_msg <=", value, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgLike(String value) { + addCriterion("exception_msg like", value, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgNotLike(String value) { + addCriterion("exception_msg not like", value, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgIn(List values) { + addCriterion("exception_msg in", values, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgNotIn(List values) { + addCriterion("exception_msg not in", values, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgBetween(String value1, String value2) { + addCriterion("exception_msg between", value1, value2, "exceptionMsg"); + return (Criteria) this; + } + + public Criteria andExceptionMsgNotBetween(String value1, String value2) { + addCriterion("exception_msg not between", value1, value2, "exceptionMsg"); + return (Criteria) this; + } + public Criteria andExt1IsNull() { addCriterion("ext_1 is null"); return (Criteria) this; diff --git a/service/src/main/java/com/hfkj/qianzhu/channel/CinemaService.java b/service/src/main/java/com/hfkj/qianzhu/channel/CinemaService.java index 1723a70..4e002a7 100644 --- a/service/src/main/java/com/hfkj/qianzhu/channel/CinemaService.java +++ b/service/src/main/java/com/hfkj/qianzhu/channel/CinemaService.java @@ -1,12 +1,19 @@ package com.hfkj.qianzhu.channel; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.hfkj.common.exception.ErrorCode; import com.hfkj.common.exception.ErrorHelp; import com.hfkj.common.exception.SysCode; +import com.hfkj.entity.BsProductConfig; +import com.hfkj.service.BsProductConfigService; +import com.hfkj.sysenum.order.OrderChildProductTypeEnum; +import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; +import java.util.Objects; /** * @ClassName CinemaService @@ -16,6 +23,7 @@ import java.util.Map; **/ public class CinemaService { + /** * @MethodName filmsPagedQuery * @Description: 根据城市分页查询影片 @@ -26,7 +34,7 @@ public class CinemaService { */ public static JSONObject filmsPagedQuery(Map map) throws Exception { - JSONObject object = QianZhuService.request("/openApi/v1/films/filmsPagedQuery" , map); + JSONObject object = QianZhuService.request("/openApi/v1/films/pagedQuery" , map); if (object.getBoolean("success") && object.getInteger("code") == 10000) { return object; @@ -175,6 +183,89 @@ public class CinemaService { } + /** + * @MethodName getByFilmsId + * @Description:查询影片id查询影片 + * @param map + * @return: com.alibaba.fastjson.JSONObject + * @Author: Sum1Dream + * @Date: 2024/7/4 下午1:59 + */ + public static JSONObject getByFilmsId(Map map) throws Exception { + + JSONObject object = QianZhuService.request("/openApi/v1/films/getById" , map); + + if (object.getBoolean("success") && object.getInteger("code") == 10000) { + return object; + } else { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "查询失败!"); + } + + } + + /** + * @MethodName createMovieOrder + * @Description: 创建订单(备用金模式),会直接扣除账户余额,最多只能选择 4 个座位 + * @param map + * @return: com.alibaba.fastjson.JSONObject + * @Author: Sum1Dream + * @Date: 2024/7/3 上午9:48 + */ + public static JSONObject createMovieOrder(Map map) throws Exception { + + JSONObject object = QianZhuService.request("/openApi/v5/orders/createMovieOrder" , map); + + if (object.getBoolean("success") && object.getInteger("code") == 10000) { + return object; + } else { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, object.getInteger("code")); + } + + } + + /** + * @MethodName getByOrderNo + * @Description:根据订单号查询订单 + * @param map + * @return: com.alibaba.fastjson.JSONObject + * @Author: Sum1Dream + * @Date: 2024/7/4 下午5:07 + */ + public static JSONObject getByOrderNo(Map map) { + + try { + JSONObject object = QianZhuService.request("/openApi/v1/orders/getByOrderNo" , map); + + if (object.getBoolean("success") && object.getInteger("code") == 10000) { + return object; + } else { + return null; + } + } catch (Exception e) { + return null; + } + + } + + /** + * @MethodName refundMovieOrder + * @Description:订单退款接口 + * @param map + * @return: com.alibaba.fastjson.JSONObject + * @Author: Sum1Dream + * @Date: 2024/7/4 下午5:25 + */ + public static JSONObject refundMovieOrder(Map map) throws Exception { + + JSONObject object = QianZhuService.request("/openApi/v1/orders/refundMovieOrder" , map); + + if (object.getBoolean("success") && object.getInteger("code") == 10000) { + return object; + } else { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "查询失败!"); + } + + } } diff --git a/service/src/main/java/com/hfkj/service/BsMerService.java b/service/src/main/java/com/hfkj/service/BsMerService.java index 1914ef7..170dd8a 100644 --- a/service/src/main/java/com/hfkj/service/BsMerService.java +++ b/service/src/main/java/com/hfkj/service/BsMerService.java @@ -44,6 +44,15 @@ public interface BsMerService { * @return */ BsMerModel getDetail(String merNo); + + /** + * @MethodName getDetailById + * @Description: + * @param id + * @return: com.hfkj.entity.BsMer + * @Author: Sum1Dream + * @Date: 2024/7/3 下午5:33 + */ BsMer getDetailById(Long id); /** diff --git a/service/src/main/java/com/hfkj/service/BsProductConfigService.java b/service/src/main/java/com/hfkj/service/BsProductConfigService.java new file mode 100644 index 0000000..02b2936 --- /dev/null +++ b/service/src/main/java/com/hfkj/service/BsProductConfigService.java @@ -0,0 +1,78 @@ +package com.hfkj.service; + +import com.hfkj.entity.BsProductConfig; + +import java.util.List; +import java.util.Map; + +public interface BsProductConfigService { + + /** + * @MethodName create + * @Description:创建 + * @param productConfig + * @Author: Sum1Dream + * @Date: 2024/7/3 下午5:20 + */ + void create(BsProductConfig productConfig); + + /** + * @MethodName update + * @Description:更新 + * @param productConfig + * @Author: Sum1Dream + * @Date: 2024/7/3 下午5:20 + */ + void update(BsProductConfig productConfig); + + /** + * @MethodName delete + * @Description:删除 + * @param id + * @param fullDelete + * @Author: Sum1Dream + * @Date: 2024/7/3 下午5:20 + */ + void delete(Long id , Boolean fullDelete); + + /** + * @MethodName queryDetail + * @Description:根据id查询 + * @param id + * @return: com.hfkj.entity.BsProductConfig + * @Author: Sum1Dream + * @Date: 2024/7/3 下午5:20 + */ + BsProductConfig queryDetail(Long id); + + /** + * @MethodName queryDetailByProductType + * @Description:根据产品类型查询 + * @param productType + * @return: com.hfkj.entity.BsProductConfig + * @Author: Sum1Dream + * @Date: 2024/7/3 下午5:20 + */ + BsProductConfig queryDetail(Integer productType); + + /** + * @MethodName queryDetailByMap + * @Description:根据map查询 + * @param map + * @return: com.hfkj.entity.BsProductConfig + * @Author: Sum1Dream + * @Date: 2024/7/3 下午5:20 + */ + BsProductConfig queryDetailByMap(Map map); + + /** + * @MethodName getList + * @Description:根据map查询列表 + * @param merId + * @return: java.util.List + * @Author: Sum1Dream + * @Date: 2024/7/3 下午5:20 + */ + List getList(Long merId); + +} diff --git a/service/src/main/java/com/hfkj/service/CommonService.java b/service/src/main/java/com/hfkj/service/CommonService.java index 32f1154..8bcca8b 100644 --- a/service/src/main/java/com/hfkj/service/CommonService.java +++ b/service/src/main/java/com/hfkj/service/CommonService.java @@ -28,5 +28,14 @@ public interface CommonService { */ List getCity(String code , String name , String child); + /** + * @MethodName locateByLngAndLat + * @Description: 逆地理编码 + * @param location 传入内容规则:经度在前,纬度在后,经纬度间以“,”分割,经纬度小数点后不要超过 6 位。 + * @return: com.alibaba.fastjson.JSONObject + * @Author: Sum1Dream + * @Date: 2024/6/28 上午10:59 + */ + JSONObject locateByLngAndLat(String location); } diff --git a/service/src/main/java/com/hfkj/service/goods/BsOrderCinemaService.java b/service/src/main/java/com/hfkj/service/goods/BsOrderCinemaService.java new file mode 100644 index 0000000..f274be1 --- /dev/null +++ b/service/src/main/java/com/hfkj/service/goods/BsOrderCinemaService.java @@ -0,0 +1,77 @@ +package com.hfkj.service.goods; + +import com.hfkj.entity.BsOrderCinema; + +import java.util.List; +import java.util.Map; + +public interface BsOrderCinemaService { + + /** + * @MethodName create + * @Description: 创建 + * @param orderCinema + * @Author: Sum1Dream + * @Date: 2024/7/4 下午2:30 + */ + void create(BsOrderCinema orderCinema); + + /** + * @MethodName update + * @Description: 更新 + * @param orderCinema + * @Author: Sum1Dream + * @Date: 2024/7/4 下午2:30 + */ + void update(BsOrderCinema orderCinema); + + /** + * @MethodName delete + * @Description: 删除 + * @param id + * @param fullDelete + * @Author: Sum1Dream + * @Date: 2024/7/4 下午2:30 + */ + void delete(Long id , Boolean fullDelete); + + /** + * @MethodName queryDetail + * @Description:查询详情 + * @param id + * @return: com.hfkj.entity.BsOrderCinema + * @Author: Sum1Dream + * @Date: 2024/7/4 下午2:30 + */ + BsOrderCinema queryDetail(Long id); + + /** + * @MethodName findGoodsOrder + * @Description: + * @param orderNo + * @return: com.hfkj.entity.BsOrderCinema + * @Author: Sum1Dream + * @Date: 2024/7/4 下午2:30 + */ + BsOrderCinema findGoodsOrder(String orderNo); + + /** + * @MethodName queryDetailByMap + * @Description: 查询 + * @param map + * @return: com.hfkj.entity.BsOrderCinema + * @Author: Sum1Dream + * @Date: 2024/7/4 下午2:34 + */ + BsOrderCinema queryDetailByMap(Map map); + + /** + * @MethodName getList + * @Description: 查询列表 + * @param map + * @return: java.util.List + * @Author: Sum1Dream + * @Date: 2024/7/4 下午2:35 + */ + List getList(Map map); +} diff --git a/service/src/main/java/com/hfkj/service/goods/impl/BsOrderCinemaServiceImpl.java b/service/src/main/java/com/hfkj/service/goods/impl/BsOrderCinemaServiceImpl.java new file mode 100644 index 0000000..4e51a07 --- /dev/null +++ b/service/src/main/java/com/hfkj/service/goods/impl/BsOrderCinemaServiceImpl.java @@ -0,0 +1,109 @@ +package com.hfkj.service.goods.impl; + +import com.hfkj.dao.BsOrderCinemaMapper; +import com.hfkj.entity.BsOrderCinema; +import com.hfkj.entity.BsOrderCinemaExample; +import com.hfkj.entity.BsOrderGoods; +import com.hfkj.entity.BsOrderGoodsExample; +import com.hfkj.service.goods.BsOrderCinemaService; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service("bsOrderCinemaService") +public class BsOrderCinemaServiceImpl implements BsOrderCinemaService { + + @Resource + private BsOrderCinemaMapper bsOrderCinemaMapper; + + @Override + public void create(BsOrderCinema orderCinema) { + bsOrderCinemaMapper.insert(orderCinema); + } + + @Override + public void update(BsOrderCinema orderCinema) { + bsOrderCinemaMapper.updateByPrimaryKeySelective(orderCinema); + } + + @Override + public void delete(Long id, Boolean fullDelete) { + bsOrderCinemaMapper.deleteByPrimaryKey(id); + } + + @Override + public BsOrderCinema queryDetail(Long id) { + return bsOrderCinemaMapper.selectByPrimaryKey(id); + } + + @Override + public BsOrderCinema findGoodsOrder(String orderNo) { + BsOrderCinemaExample example = new BsOrderCinemaExample(); + example.createCriteria().andOrderNoEqualTo(orderNo); + + List list = bsOrderCinemaMapper.selectByExample(example); + + if (!list.isEmpty()) { + return list.get(0); + } + + return null; + } + + @Override + public BsOrderCinema queryDetailByMap(Map map) { + return null; + } + + @Override + public List getList(Map map) { + BsOrderCinemaExample example = new BsOrderCinemaExample(); + BsOrderCinemaExample.Criteria criteria = example.createCriteria(); + + + if (MapUtils.getLong(map, "merId") != null) { + criteria.andMerIdEqualTo(MapUtils.getLong(map, "merId")); + } + + if (StringUtils.isNotBlank(MapUtils.getString(map, "orderNo"))) { + criteria.andOrderNoEqualTo(MapUtils.getString(map, "orderNo")); + } + if (StringUtils.isNotBlank(MapUtils.getString(map, "childOrderNo"))) { + criteria.andChildOrderNoEqualTo(MapUtils.getString(map, "childOrderNo")); + } + if (StringUtils.isNotBlank(MapUtils.getString(map, "userPhone"))) { + criteria.andUserPhoneEqualTo(MapUtils.getString(map, "userPhone")); + } + + if (StringUtils.isNotBlank(MapUtils.getString(map, "goodsSpecsName"))) { + criteria.andGoodsSpecsNameEqualTo(MapUtils.getString(map, "goodsSpecsName")); + } + + if (StringUtils.isNotBlank(MapUtils.getString(map, "goodsName"))) { + criteria.andGoodsNameLike("%"+MapUtils.getString(map, "goodsName")+"%"); + } + + if (MapUtils.getInteger(map, "payType") != null) { + criteria.andPayTypeEqualTo(MapUtils.getInteger(map, "payType")); + } + if (MapUtils.getLong(map, "createTimeS") != null) { + criteria.andCreateTimeGreaterThanOrEqualTo(new Date(MapUtils.getLong(map, "createTimeS"))); + } + if (MapUtils.getLong(map, "createTimeE") != null) { + criteria.andCreateTimeLessThan(new Date(MapUtils.getLong(map, "createTimeE"))); + } + if (MapUtils.getInteger(map, "status") != null) { + criteria.andStatusEqualTo(MapUtils.getInteger(map, "status")); + } else { + criteria.andStatusNotEqualTo(0); + } + example.setOrderByClause("create_time desc"); + return bsOrderCinemaMapper.selectByExample(example); + } +} diff --git a/service/src/main/java/com/hfkj/service/impl/BsProductConfigServiceImpl.java b/service/src/main/java/com/hfkj/service/impl/BsProductConfigServiceImpl.java new file mode 100644 index 0000000..8c5263d --- /dev/null +++ b/service/src/main/java/com/hfkj/service/impl/BsProductConfigServiceImpl.java @@ -0,0 +1,73 @@ +package com.hfkj.service.impl; + +import com.hfkj.dao.BsProductConfigMapper; +import com.hfkj.entity.BsProductConfig; +import com.hfkj.entity.BsProductConfigExample; +import com.hfkj.service.BsProductConfigService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service("bsProductConfigService") +public class BsProductConfigServiceImpl implements BsProductConfigService { + + @Resource + private BsProductConfigMapper bsProductConfigMapper; + + @Override + public void create(BsProductConfig productConfig) { + bsProductConfigMapper.insert(productConfig); + } + + @Override + public void update(BsProductConfig productConfig) { + bsProductConfigMapper.updateByPrimaryKeySelective(productConfig); + } + + @Override + public void delete(Long id, Boolean fullDelete) { + if (fullDelete) { + bsProductConfigMapper.deleteByPrimaryKey(id); + } else { + BsProductConfig productConfig = queryDetail(id); + productConfig.setStatus(0); + productConfig.setUpdateTime(new Date()); + update(productConfig); + } + + } + + @Override + public BsProductConfig queryDetail(Long id) { + return bsProductConfigMapper.selectByPrimaryKey(id); + } + + @Override + public BsProductConfig queryDetail(Integer productType) { + BsProductConfigExample example = new BsProductConfigExample(); + example.createCriteria().andProductTypeEqualTo(productType).andStatusEqualTo(1); + + List list = bsProductConfigMapper.selectByExample(example); + + if (!list.isEmpty()) { + return list.get(0); + } + + return null; + } + + @Override + public BsProductConfig queryDetailByMap(Map map) { + return null; + } + + @Override + public List getList(Long merId) { + BsProductConfigExample example = new BsProductConfigExample(); + example.createCriteria().andMerIdEqualTo(merId).andStatusEqualTo(1); + return bsProductConfigMapper.selectByExample(example); + } +} diff --git a/service/src/main/java/com/hfkj/service/impl/CommonServiceImpl.java b/service/src/main/java/com/hfkj/service/impl/CommonServiceImpl.java index 80aadd3..f0b331b 100644 --- a/service/src/main/java/com/hfkj/service/impl/CommonServiceImpl.java +++ b/service/src/main/java/com/hfkj/service/impl/CommonServiceImpl.java @@ -1,6 +1,7 @@ package com.hfkj.service.impl; import com.alibaba.fastjson.JSONObject; +import com.hfkj.common.utils.HttpsUtils; import com.hfkj.dao.BsCityMapper; import com.hfkj.entity.BsCity; import com.hfkj.entity.BsCityExample; @@ -9,9 +10,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; @Service("commonService") public class CommonServiceImpl implements CommonService { @@ -80,4 +79,16 @@ public class CommonServiceImpl implements CommonService { return jsonProvince; } + + @Override + public JSONObject locateByLngAndLat(String location) { + + Map map = new HashMap<>(); + map.put("key" , "b7f6a6c5cd9801a82a0dc827f271a75d"); + map.put("location" , location); + + return HttpsUtils.doGet("https://restapi.amap.com/v3/geocode/regeo" , map); + + } + } diff --git a/service/src/main/java/com/hfkj/service/order/BsOrderService.java b/service/src/main/java/com/hfkj/service/order/BsOrderService.java index 6060e11..ec1db47 100644 --- a/service/src/main/java/com/hfkj/service/order/BsOrderService.java +++ b/service/src/main/java/com/hfkj/service/order/BsOrderService.java @@ -1,8 +1,10 @@ package com.hfkj.service.order; +import com.alibaba.fastjson.JSONArray; import com.hfkj.entity.BsOrder; import com.hfkj.model.order.OrderModel; +import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -82,5 +84,15 @@ public interface BsOrderService { */ List getOrderList(Map param); + /** + * @MethodName cinemaComputePrice + * @Description:计算电影票金额 + * @param jsonArray + * @param seatsIdArray + * @return: java.math.BigDecimal + * @Author: Sum1Dream + * @Date: 2024/7/5 下午3:40 + */ + BigDecimal cinemaComputePrice(JSONArray jsonArray, String[] seatsIdArray); } diff --git a/service/src/main/java/com/hfkj/service/order/OrderCreateService.java b/service/src/main/java/com/hfkj/service/order/OrderCreateService.java index b59ef3d..8303ef4 100644 --- a/service/src/main/java/com/hfkj/service/order/OrderCreateService.java +++ b/service/src/main/java/com/hfkj/service/order/OrderCreateService.java @@ -1,5 +1,6 @@ package com.hfkj.service.order; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.hfkj.common.exception.ErrorCode; import com.hfkj.common.exception.ErrorHelp; @@ -9,16 +10,16 @@ import com.hfkj.common.utils.RedisUtil; import com.hfkj.entity.*; import com.hfkj.model.order.OrderChildModel; import com.hfkj.model.order.OrderModel; +import com.hfkj.qianzhu.channel.CinemaService; +import com.hfkj.service.BsProductConfigService; import com.hfkj.service.coupon.BsOrderCouponNoService; import com.hfkj.service.coupon.BsOrderCouponService; import com.hfkj.service.coupon.channel.HuiLianTongCouponService; import com.hfkj.service.goods.*; import com.hfkj.service.hlt.HuiLianTongUnionCardService; import com.hfkj.sysenum.GoodsVpdSourceEnum; -import com.hfkj.sysenum.order.OrderChildProductTypeEnum; -import com.hfkj.sysenum.order.OrderChildStatusEnum; -import com.hfkj.sysenum.order.OrderCouponNoStatusEnum; -import com.hfkj.sysenum.order.OrderGoodsStatusEnum; +import com.hfkj.sysenum.order.*; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Date; +import java.util.HashMap; import java.util.Map; /** @@ -58,6 +60,12 @@ public class OrderCreateService { private BsOrderGoodsService bsOrderGoodsService; @Resource private GoodsShoppingCartService shoppingCartService; + @Resource + private BsProductConfigService bsProductConfigService; + @Resource + private BsOrderCinemaService bsOrderCinemaService; + @Resource + private BsOrderService bsOrderService; /** * 事务产品 @@ -239,4 +247,79 @@ public class OrderCreateService { return orderChild; } + + public OrderChildModel cinema(OrderModel order, OrderChildModel orderChild) throws Exception { + + JSONObject object = new JSONObject((Map) orderChild.getBusiness()); + + BsProductConfig productConfig = bsProductConfigService.queryDetail(OrderChildProductTypeEnum.type3.getCode()); + + if (object == null || + object.getLong("filmId") == null || + object.getLong("showId") == null || + object.getBoolean("acceptAdjust") == null || + StringUtils.isBlank(object.getString("seats")) || + StringUtils.isBlank(object.getString("phone")) || + StringUtils.isBlank(object.getString("seatsName")) + ) { + throw ErrorHelp.genException(SysCode.System , ErrorCode.REQ_PARAMS_ERROR ); + } + + // 查询影片id查询影片 + Map params = new HashMap<>(); + params.put("filmId", object.getLong("filmId")); + + JSONObject jsonObject = CinemaService.getByFilmsId(params); + JSONObject data = jsonObject.getJSONObject("data"); + + // 查询场次 + Map showParams = new HashMap<>(); + showParams.put("showId", object.getLong("showId")); + + JSONObject objectShow = CinemaService.getRealTimeSeatByShowId(showParams).getJSONObject("data"); + JSONArray jsonArray = objectShow.getJSONArray("seats"); + + if (jsonArray == null) { + throw ErrorHelp.genException(SysCode.System , ErrorCode.COMMON_ERROR , "下单失败!"); + } + + orderChild.setMerId(productConfig.getMerId()); + orderChild.setProductName(data.getString("name")); + orderChild.setProductCount(1); + orderChild.setProductImg(data.getString("pic")); + orderChild.setProductSpecName( + objectShow.getString("movieInformation") + "
" + + objectShow.getString("cinemaName") + "-" +objectShow.getString("hallName") + "
" + + object.getString("seatsName") + ); + + String[] seatsIdArray = object.getString("seats").split(","); + + orderChild.setProductPrice(bsOrderService.cinemaComputePrice(jsonArray , seatsIdArray)); + + // 创建电影票订单实体 + BsOrderCinema bsOrderCinema = new BsOrderCinema(); + bsOrderCinema.setOrderNo(orderChild.getOrderNo()); + bsOrderCinema.setChildOrderNo(orderChild.getChildOrderNo()); + bsOrderCinema.setMerId(productConfig.getMerId()); + bsOrderCinema.setUserId(order.getUserId()); + bsOrderCinema.setUserPhone(object.getString("phone")); + bsOrderCinema.setImg(data.getString("pic")); + bsOrderCinema.setGoodsName(data.getString("name")); + bsOrderCinema.setGoodsSpecsName(orderChild.getProductSpecName()); + bsOrderCinema.setCinemaId(objectShow.getInteger("cinemaId")); + bsOrderCinema.setShowId(object.getLong("showId")); + bsOrderCinema.setFilmId(object.getInteger("filmId")); + bsOrderCinema.setAcceptAdjust(object.getBoolean("acceptAdjust")); + bsOrderCinema.setDrawMode(0); + bsOrderCinema.setSeatsCount(seatsIdArray.length); + bsOrderCinema.setSeats(object.getString("seatsName")); + bsOrderCinema.setCreateTime(new Date()); + bsOrderCinema.setUpdateTime(new Date()); + bsOrderCinema.setStatus(OrderCinemaStatusEnum.status0.getCode()); + + bsOrderCinemaService.create(bsOrderCinema); + + return orderChild; + } } diff --git a/service/src/main/java/com/hfkj/service/order/OrderPaySuccessService.java b/service/src/main/java/com/hfkj/service/order/OrderPaySuccessService.java index 566da3e..02b6987 100644 --- a/service/src/main/java/com/hfkj/service/order/OrderPaySuccessService.java +++ b/service/src/main/java/com/hfkj/service/order/OrderPaySuccessService.java @@ -6,14 +6,17 @@ import com.hfkj.common.exception.ErrorCode; import com.hfkj.common.exception.ErrorHelp; import com.hfkj.common.exception.SysCode; import com.hfkj.common.utils.DateUtil; +import com.hfkj.config.CommonSysConst; import com.hfkj.entity.*; import com.hfkj.model.order.OrderModel; +import com.hfkj.qianzhu.channel.CinemaService; import com.hfkj.service.coupon.BsOrderCouponNoService; import com.hfkj.service.coupon.BsOrderCouponService; import com.hfkj.service.coupon.channel.ChongQingCNPCCouponService; import com.hfkj.service.coupon.channel.HuiLianTongCouponService; import com.hfkj.service.coupon.channel.PcytCNPCCouponConfig; import com.hfkj.service.coupon.channel.PetroConfig; +import com.hfkj.service.goods.BsOrderCinemaService; import com.hfkj.service.goods.BsOrderGoodsService; import com.hfkj.service.goods.GoodsMsgService; import com.hfkj.service.goods.GoodsVpdService; @@ -27,7 +30,9 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @className: OrderPaySuccesService @@ -49,7 +54,10 @@ public class OrderPaySuccessService { private GoodsMsgService goodsMsgService; @Resource private GoodsVpdService goodsVpdService; + @Resource private GoodsSpecsServiceImpl goodsSpecsService; + @Resource + private BsOrderCinemaService bsOrderCinemaService; /** * 订单业务处理 @@ -63,6 +71,8 @@ public class OrderPaySuccessService { goods(order, childOrder); } else if (childOrder.getProductType().equals(OrderChildProductTypeEnum.type2.getCode())) { product(order, childOrder); + } else if (childOrder.getProductType().equals(OrderChildProductTypeEnum.type3.getCode())) { + cinema(order, childOrder); } } catch (Exception e) { @@ -184,27 +194,76 @@ public class OrderPaySuccessService { * 实物产品 * @param order */ - public void goods(OrderModel order, BsOrderChild childOrder) throws Exception { + public void goods(OrderModel order, BsOrderChild childOrder) { BsOrderGoods goodsOrder = bsOrderGoodsService.findGoodsOrder(order.getOrderNo()); + try { - if (goodsOrder == null) { - throw ErrorHelp.genException(SysCode.System , ErrorCode.COMMON_ERROR , "未查询到相关内容"); - } + if (goodsOrder == null) { + throw ErrorHelp.genException(SysCode.System , ErrorCode.COMMON_ERROR , "未查询到相关内容"); + } + + goodsMsgService.editSaleNum(goodsOrder.getGoodsId() , goodsOrder.getGoodsCount() , 1); + + goodsOrder.setTotalPrice(childOrder.getProductTotalPrice()); + goodsOrder.setTotalDeductionPrice(childOrder.getTotalDeductionPrice()); + goodsOrder.setCouponDiscountPrice(childOrder.getCouponDiscountPrice()); + goodsOrder.setIntegralDiscountPrice(childOrder.getIntegralDiscountPrice()); + goodsOrder.setPayRealPrice(childOrder.getSurplusRefundPrice()); + goodsOrder.setPayChannel(order.getPayChannel()); + goodsOrder.setPayType(order.getPayType()); + goodsOrder.setPaySerialNo(order.getPaySerialNo()); + goodsOrder.setPayTime(order.getPayTime()); + goodsOrder.setUpdateTime(new Date()); + goodsOrder.setStatus(1); - goodsMsgService.editSaleNum(goodsOrder.getGoodsId() , goodsOrder.getGoodsCount() , 1); - - goodsOrder.setTotalPrice(childOrder.getProductTotalPrice()); - goodsOrder.setTotalDeductionPrice(childOrder.getTotalDeductionPrice()); - goodsOrder.setCouponDiscountPrice(childOrder.getCouponDiscountPrice()); - goodsOrder.setIntegralDiscountPrice(childOrder.getIntegralDiscountPrice()); - goodsOrder.setPayRealPrice(childOrder.getSurplusRefundPrice()); - goodsOrder.setPayChannel(order.getPayChannel()); - goodsOrder.setPayType(order.getPayType()); - goodsOrder.setPaySerialNo(order.getPaySerialNo()); - goodsOrder.setPayTime(order.getPayTime()); - goodsOrder.setUpdateTime(new Date()); - goodsOrder.setStatus(1); + } catch (Exception e) { + goodsOrder.setExceptionStatus(true); + goodsOrder.setExceptionMsg(e.getMessage()); + + } bsOrderGoodsService.update(goodsOrder); } + public void cinema(OrderModel order,BsOrderChild childOrder) { + // 查询电影票订单 + BsOrderCinema orderCinema = bsOrderCinemaService.findGoodsOrder(order.getOrderNo()); + try { + + if (orderCinema == null) { + throw ErrorHelp.genException(SysCode.System , ErrorCode.COMMON_ERROR , "未查询到对应!"); + } + + // 创建订单(备用金模式),会直接扣除账户余额,最多只能选择 4 个座位 + Map params = new HashMap<>(); + params.put("drawMode", orderCinema.getDrawMode()); + params.put("acceptAdjust", orderCinema.getAcceptAdjust()); + params.put("showId", orderCinema.getShowId()); + params.put("seatsCount", orderCinema.getSeatsCount()); + params.put("seats", orderCinema.getSeats()); + params.put("platformUniqueId", order.getOrderNo()); + params.put("platformOrderNo", childOrder.getChildOrderNo()); + params.put("mobile", orderCinema.getUserPhone()); + params.put("notifyUrl", CommonSysConst.getSysConfig().getQianZhuCinemaNotify()); + JSONObject jsonObject = CinemaService.createMovieOrder(params); + + if (jsonObject == null) { + throw ErrorHelp.genException(SysCode.System , ErrorCode.COMMON_ERROR , "上送订单失败!"); + } + + orderCinema.setStatus(jsonObject.getJSONObject("data").getInteger("status")); + orderCinema.setChannelOrderNo(jsonObject.getJSONObject("data").getString("orderNo")); + orderCinema.setUpdateTime(new Date()); + + } catch (Exception e) { + orderCinema.setExceptionStatus(true); + orderCinema.setExceptionMsg(e.getMessage()); + } finally { + bsOrderCinemaService.update(orderCinema); + } + + + + + } + } diff --git a/service/src/main/java/com/hfkj/service/order/OrderRefundSuccessService.java b/service/src/main/java/com/hfkj/service/order/OrderRefundSuccessService.java new file mode 100644 index 0000000..1f8993e --- /dev/null +++ b/service/src/main/java/com/hfkj/service/order/OrderRefundSuccessService.java @@ -0,0 +1,74 @@ +package com.hfkj.service.order; + +import com.alibaba.fastjson.JSONObject; +import com.hfkj.common.exception.ErrorCode; +import com.hfkj.common.exception.ErrorHelp; +import com.hfkj.common.exception.SysCode; +import com.hfkj.config.CommonSysConst; +import com.hfkj.entity.BsOrderChild; +import com.hfkj.entity.BsOrderCinema; +import com.hfkj.model.order.OrderChildModel; +import com.hfkj.model.order.OrderModel; +import com.hfkj.qianzhu.channel.CinemaService; +import com.hfkj.service.goods.BsOrderCinemaService; +import com.hfkj.sysenum.order.OrderChildProductTypeEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + + +/** + * @ClassName OrderRefundSuccessService + * @Author Sum1Dream + * @Description 退款成功业务处理 + * @Date 2024/7/4 下午5:31 + **/ +@Component +public class OrderRefundSuccessService { + + @Resource + private BsOrderCinemaService bsOrderCinemaService; + + /** + * 订单业务处理 + * @param orderChild + * @throws Exception + */ + public void orderRefundHandle(OrderChildModel orderChild) { + try { + if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type1.getCode())) { + // todo 实物产品退款业务 + } else if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type2.getCode())) { + // todo 虚拟产品退款业务 + } else if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type3.getCode())) { + // 电影票退款业务 + cinema(orderChild); + } + } catch (Exception e) { + + } + } + + public void cinema(BsOrderChild childOrder) { + // 查询电影票订单 + BsOrderCinema orderCinema = bsOrderCinemaService.findGoodsOrder(childOrder.getOrderNo()); + + try { + + if (orderCinema != null) { + Map map = new HashMap<>(); + map.put("orderNo", childOrder.getOrderNo()); + CinemaService.refundMovieOrder(map); + orderCinema.setStatus(-5); + bsOrderCinemaService.update(orderCinema); + } + } catch (Exception e) { + orderCinema.setExceptionStatus(true); + orderCinema.setExceptionMsg(e.getMessage()); + bsOrderCinemaService.update(orderCinema); + } + + } +} diff --git a/service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java b/service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java index 2b0c3e3..6b8317b 100644 --- a/service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java +++ b/service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java @@ -18,8 +18,8 @@ import com.hfkj.model.order.OrderModel; import com.hfkj.service.order.BsOrderChildService; import com.hfkj.service.order.BsOrderRefundService; import com.hfkj.service.order.BsOrderService; +import com.hfkj.service.order.OrderRefundSuccessService; import com.hfkj.service.pay.HuiPayService; -import com.hfkj.service.pay.huift.TradeService; import com.hfkj.service.user.UserIntegralService; import com.hfkj.sysenum.UserIntegralRecordOpUserTypeEnum; import com.hfkj.sysenum.UserIntegralRecordSourceTypeEnum; @@ -59,7 +59,7 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService { @Resource private BsMerPayConfigService merPayConfigService; @Resource - private TradeService huiftTradeService; + private OrderRefundSuccessService orderRefundSuccessService; @Override public void editData(BsOrderRefund data) { data.setUpdateTime(new Date()); @@ -92,13 +92,12 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService { editData(orderRefund); } - } else if (OrderPayChannelEnum.type3.getCode() == orderRefund.getRefundPayChannel()) { - // 商户退款 - JSONObject refundObj = huiftTradeService.thirdPayRefund(orderRefund.getRefundOrderNo(), orderRefund.getRefundPrice(), orderRefund.getOrderNo()); - orderRefund.setRefundSerialNo(refundObj.getString("refundTraceNo")); - orderRefund.setRefundPayChannelOrderNo(refundObj.getString("refundOrderNo")); - return true; - } else { + }/* else if (OrderPayChannelEnum.type2.getCode() == orderRefund.getRefundPayChannel()) { + // TODO 暂无该支付方式 + + } else if (OrderPayChannelEnum.type3.getCode() ==orderRefund.getRefundPayChannel()) { + // TODO 暂无该支付方式 + }*/ else { throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款失败!该支付方式暂不支持退款"); } } catch (BaseException e) { @@ -219,6 +218,12 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService { orderChild.setSurplusRefundPrice(orderChild.getSurplusRefundPrice().subtract(orderRefund.getRefundPrice())); orderChild.setSurplusRefundIntegral(orderChild.getSurplusRefundIntegral() - orderRefund.getRefundIntegral()); orderChild.setStatus(orderChild.getSurplusRefundCount()==0?OrderChildStatusEnum.status4.getCode():orderChild.getStatus()); + + // 退款业务处理 + if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type3.getCode())) { + orderRefundSuccessService.orderRefundHandle(orderChild); + } + orderChildService.editData(orderChild); } diff --git a/service/src/main/java/com/hfkj/service/order/impl/BsOrderServiceImpl.java b/service/src/main/java/com/hfkj/service/order/impl/BsOrderServiceImpl.java index 2bee58a..76ad627 100644 --- a/service/src/main/java/com/hfkj/service/order/impl/BsOrderServiceImpl.java +++ b/service/src/main/java/com/hfkj/service/order/impl/BsOrderServiceImpl.java @@ -1,5 +1,7 @@ package com.hfkj.service.order.impl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.hfkj.common.exception.BaseException; import com.hfkj.common.exception.ErrorCode; import com.hfkj.common.exception.ErrorHelp; @@ -12,8 +14,11 @@ import com.hfkj.entity.*; import com.hfkj.model.order.OrderChildModel; import com.hfkj.model.order.OrderModel; import com.hfkj.mqtopic.OrderTopic; +import com.hfkj.qianzhu.channel.CinemaService; +import com.hfkj.service.BsProductConfigService; import com.hfkj.service.discount.CouponDiscountService; import com.hfkj.service.discount.CouponDiscountUserRelService; +import com.hfkj.service.goods.BsOrderCinemaService; import com.hfkj.service.order.*; import com.hfkj.service.user.UserIntegralService; import com.hfkj.sysenum.UserIntegralRecordOpUserTypeEnum; @@ -77,6 +82,12 @@ public class BsOrderServiceImpl implements BsOrderService { private CouponDiscountUserRelService couponDiscountUserRelService; @Resource private CouponDiscountService couponDiscountService; + @Resource + private BsOrderCinemaService bsOrderCinemaService; + @Resource + private BsProductConfigService productConfigService; + + @Override public BsOrder editData(BsOrder order) { order.setUpdateTime(new Date()); @@ -131,6 +142,8 @@ public class BsOrderServiceImpl implements BsOrderService { } else if (child.getProductType().equals(OrderChildProductTypeEnum.type2.getCode())) { // 提交订单虚拟商品处理 child = orderCreateService.product(order, child); + }else if (child.getProductType().equals(OrderChildProductTypeEnum.type3.getCode())) { + child = orderCreateService.cinema(order, child); } child.setProductTotalPrice(child.getProductPrice().multiply(new BigDecimal(child.getProductCount().toString()))); child.setStatus(OrderChildStatusEnum.status1.getCode()); @@ -466,12 +479,8 @@ public class BsOrderServiceImpl implements BsOrderService { } @Override - public OrderModel getDetail(String orderNo) { - // 获取缓存 - Object cacheObj = redisUtil.get(CACHE_KEY + orderNo); - if (cacheObj != null) { - return (OrderModel) cacheObj; - } + public OrderModel getDetail(String orderNo){ + OrderModel orderModel = new OrderModel(); BeanUtils.copyProperties(getOrder(orderNo), orderModel); // 优惠 @@ -485,10 +494,30 @@ public class BsOrderServiceImpl implements BsOrderService { if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type1.getCode())) { orderModel.setBusiness(orderChild.getBusiness()); } + if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type3.getCode())) { + + + + BsOrderCinema bsOrderCinema = bsOrderCinemaService.findGoodsOrder(orderNo); + + Map map = new HashMap<>(); + map.put("orderNo" , bsOrderCinema.getChannelOrderNo()); + JSONObject object = CinemaService.getByOrderNo(map); + if (object != null && object.getJSONObject("data") != null) { + orderModel.setBusiness(object.getJSONObject("data")); + bsOrderCinema.setStatus(object.getJSONObject("data").getInteger("status")); + } + + + bsOrderCinemaService.update(bsOrderCinema); + + if (bsOrderCinema.getStatus() == 10) { + // 子订单完成 + childOrderComplete(orderChild.getChildOrderNo()); + } + } } - // 更新缓存 - cache(orderModel); return orderModel; } @@ -544,4 +573,39 @@ public class BsOrderServiceImpl implements BsOrderService { return orderMapper.selectByExample(example); } + @Override + public BigDecimal cinemaComputePrice(JSONArray jsonArray, String[] seatsIdArray) { + + BsProductConfig productConfig = productConfigService.queryDetail(OrderChildProductTypeEnum.type3.getCode()); + + BigDecimal totalPrice = new BigDecimal(0); + + for (String string : seatsIdArray) { + Integer seatsId = Integer.valueOf(string); + for (Object array : jsonArray) { + JSONArray seats = (JSONArray) array; + if (!seats.isEmpty()) { + for (Object s : seats) { + JSONObject jsonObject = (JSONObject) s; + if (jsonObject != null) { + BigDecimal salePrice = jsonObject.getBigDecimal("fastDrawModePrice").multiply(productConfig.getDiscount()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP); + + if (salePrice.compareTo(jsonObject.getBigDecimal("price")) > 0) { + jsonObject.put("salePrice", salePrice); + } else { + jsonObject.put("salePrice", jsonObject.getBigDecimal("price")); + } + + if (Objects.equals(jsonObject.getInteger("id"), seatsId)) { + totalPrice = totalPrice.add(jsonObject.getBigDecimal("salePrice")); + } + + } + } + } + + } + } + return totalPrice; + } } diff --git a/service/src/main/java/com/hfkj/sysenum/order/OrderChildProductTypeEnum.java b/service/src/main/java/com/hfkj/sysenum/order/OrderChildProductTypeEnum.java index b79c791..2f87ac7 100644 --- a/service/src/main/java/com/hfkj/sysenum/order/OrderChildProductTypeEnum.java +++ b/service/src/main/java/com/hfkj/sysenum/order/OrderChildProductTypeEnum.java @@ -1,5 +1,7 @@ package com.hfkj.sysenum.order; +import java.util.Objects; + /** * @className: OrderChildProductType * @author: HuRui @@ -11,6 +13,7 @@ public enum OrderChildProductTypeEnum { */ type1(1, "实物产品"), type2(2, "虚拟产品"), + type3(3, "千猪电影票"), ; private int code; @@ -23,6 +26,13 @@ public enum OrderChildProductTypeEnum { this.name = name; } + public static OrderChildProductTypeEnum getData(Integer type) { + for (OrderChildProductTypeEnum ele : values()) { + if(Objects.equals(type,ele.getCode())) return ele; + } + return null; + } + public int getCode() { return code; } diff --git a/service/src/main/java/com/hfkj/sysenum/order/OrderCinemaStatusEnum.java b/service/src/main/java/com/hfkj/sysenum/order/OrderCinemaStatusEnum.java new file mode 100644 index 0000000..cacb2a9 --- /dev/null +++ b/service/src/main/java/com/hfkj/sysenum/order/OrderCinemaStatusEnum.java @@ -0,0 +1,50 @@ +package com.hfkj.sysenum.order; + +import lombok.Getter; + +/** + * @ClassName OrderCinemaStatusEnum + * @Author Sum1Dream + * @Description 电影票状态枚举 + * @Date 2024/7/4 下午3:32 + **/ +@Getter +public enum OrderCinemaStatusEnum { + + /** + * 待付款 + */ + status0(0, "待付款"), + + /** + * 待出票 + */ + status5(5, "待出票"), + + /** + * 已出票 + */ + status10(10, "已出票"), + + /** + * 已退款 + */ + status15(15, "交易成功"), + + /** + * 已取消 + */ + statusNegative5(-5, "已取消"), + + ; + + private final int code; + + private final String name; + + + OrderCinemaStatusEnum(int code, String name) { + this.code = code; + this.name = name; + } +} diff --git a/service/src/main/resources/dev/commonConfig.properties b/service/src/main/resources/dev/commonConfig.properties index c4c164e..f2613b0 100644 --- a/service/src/main/resources/dev/commonConfig.properties +++ b/service/src/main/resources/dev/commonConfig.properties @@ -57,6 +57,7 @@ qianZhuUrl=https://live-test.qianzhu8.com qianzhuH5url=https://nf-test.qianzhu8.com/gateway qianZhuPlatformId=10376 qianZhuSecret=ktxb49sh2jfhgn8g +qianZhuCinemaNotify=https://phgcs.dctpay.com/order/cinemaNotify/notify #CT ctNotifyUrl = 1 diff --git a/service/src/main/resources/prod/commonConfig.properties b/service/src/main/resources/prod/commonConfig.properties index df3163b..01fbe8c 100644 --- a/service/src/main/resources/prod/commonConfig.properties +++ b/service/src/main/resources/prod/commonConfig.properties @@ -56,6 +56,7 @@ qinzhuUrl=https://live.qianzhu8.com qianzhuH5url=https://nf.qianzhu8.com/gateway qinzhuPlatformId=10458 qinzhuSecret=nnl3gg4ss0pka11t +qianZhuCinemaNotify=https://phg.dctpay.com/order/cinemaNotify/notify #CT HgNotifyUrl = 1