diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/GroupOrderController.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/GroupOrderController.java new file mode 100644 index 0000000..7aa46b7 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/GroupOrderController.java @@ -0,0 +1,472 @@ +package com.lyms.talkonlineweb.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.lyms.talkonlineweb.annotation.Resubmit; +import com.lyms.talkonlineweb.annotation.TokenRequired; +import com.lyms.talkonlineweb.domain.*; +import com.lyms.talkonlineweb.enums.PayStatus; +import com.lyms.talkonlineweb.result.BaseResponse; +import com.lyms.talkonlineweb.service.*; +import com.lyms.talkonlineweb.util.*; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.*; + +/** + * @ProjectName: talkonline + * @Package: com.lyms.talkonlineweb.controller + * @ClassName: GroupOrderController + * @Author: sy + * @Description: 支付订单类 + * @Date: 2022-04-22 09:57 + * @Version: + */ +@RestController +@RequestMapping("GroupOrder") +@Log4j2 +public class GroupOrderController { + + /** + * 商品信息 + */ + @Autowired + private LymsGroupGoodsService lymsGroupGoodsService; + + /** + * 患者 + */ + @Autowired + private LymsPatientService lymsPatientService; + + /** + * 订单信息 + */ + @Autowired + private LymsGroupOrderService lymsGroupOrderService; + + /** + * 订单量 + */ + @Autowired + private LymsOrderDataService lymsOrderDataService; + + /** + * 微信回调通知接口 + */ + @Value("${notify.url}") + private String notifyUrl; + /** + * 终端ip + */ + @Value("${weixin.createIP}") + private String createIP; + + + /** + * 创建支付订单,并把订单提交到微信平台 + * 传入患者id和购买数量 + * https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1 微信统一下单api文档地址 + * @param lymsOrder + * @param request + * @param response + */ + @PostMapping("createPayOrder") + @TokenRequired + @Resubmit + @Transactional(rollbackFor = Exception.class) + public BaseResponse createPayOrder(@RequestBody LymsGroupOrder lymsOrder, + HttpServletRequest request, HttpServletResponse response) { + + log.info("create pay order request info : {}",lymsOrder.toString()); + + BaseResponse baseResponse = new BaseResponse(); + //参数校验 + if (lymsOrder.getPid() == null || CollectionUtils.isEmpty(lymsOrder.getOrderData())) + { + baseResponse.setErrorcode(1); + baseResponse.setErrormsg("创建订单参数错误"); + return baseResponse; + } + for (LymsOrderData orderData : lymsOrder.getOrderData()) { + if (null==orderData.getGid() || null==orderData.getOrderNum()) { + baseResponse.setErrorcode(1); + baseResponse.setErrormsg("创建订单参数错误"); + return baseResponse; + } + } + LymsPatient patient = lymsPatientService.getById(lymsOrder.getPid()); + if (patient == null) + { + baseResponse.setErrorcode(1); + baseResponse.setErrormsg("用户不存在"); + return baseResponse; + } + if (StringUtil.isEmpty(patient.getOpenid())) + { + baseResponse.setErrorcode(1); + baseResponse.setErrormsg("用户Openid不存在"); + return baseResponse; + } + + try + { + //生成系统订单号 + String orderNo = StringUtil.getUniqueNo(); + String wieXinOrderNo = StringUtil.getUniqueWeixNo(); + lymsOrder.setPaytime(new Date()); + lymsOrder.setOrderno(orderNo); + lymsOrder.setPayorderid(wieXinOrderNo); + lymsOrder.setStatus(PayStatus.CREATED.getCode()); + lymsOrder.setOpenid(patient.getOpenid()); + lymsGroupOrderService.save(lymsOrder); + //处理订单量&更新订单 + Integer total= 0; + for (LymsOrderData orderData : lymsOrder.getOrderData()) { + LambdaQueryWrapper wrapper = new QueryWrapper().lambda(); + wrapper.eq(LymsGroupGoods::getId, orderData.getGid()); + LymsGroupGoods goods = lymsGroupGoodsService.getOne(wrapper); + if (goods == null || goods.getPrice() <= 0 ) + { + baseResponse.setErrorcode(1); + baseResponse.setErrormsg("商品价格配置不存在"); + return baseResponse; + } + if(null ==lymsOrder.getId()){ + baseResponse.setErrorcode(1); + baseResponse.setErrormsg("订单信息id获取异常!"); + return baseResponse; + } + orderData.setOrderId(lymsOrder.getId()); + orderData.setGid(goods.getId()); + orderData.setStartTime(new Date()); + orderData.setEndTime(DateUtil.addDay(new Date(), orderData.getOrderNum()*goods.getTimeLimit())); + total+=orderData.getOrderNum() * goods.getPrice(); + lymsOrderDataService.save(orderData); + } + lymsOrder.setTotalPrices(total); + //创建微信订单 + Map data = createWxOrder(lymsOrder); + if (data != null) { + //更新订单总金额 + lymsGroupOrderService.updateById(lymsOrder); + data.put("orderNo", orderNo); + baseResponse.setObject(data); + return baseResponse; + } + + }catch (Exception e){ + log.error("create order error.",e); + } + baseResponse.setErrorcode(1); + baseResponse.setErrormsg("创建订单失败"); + return baseResponse; + } + + /** + * 创建微信订单 + */ + private Map createWxOrder(LymsGroupOrder lymsOrder) throws Exception + { + try { + String xml = buildRequestXml(lymsOrder); + log.info("create order pid : {},buildRequestMap xml : {}",lymsOrder.getPid(),xml); + + //调用微信统一下单接口 + String result = HttpUtil.postData(Constant.PAY_URL, xml); + log.info("wx create order result : {}" ,result); + + return parseWxResult(result); + } catch (Exception e) { + log.error("createWxOrder error.",e); + throw e; + } + } + + + /** + * 解析微信创建订单的结果 + * @param resultXml + * @throws Exception + */ + private Map parseWxResult(String resultXml) throws Exception{ + try + { + Map data = new HashMap(5); + Map retMap = XmlUtil.xmlToMap(resultXml); + System.out.println("retMap:"+retMap); + String success = "SUCCESS"; + if (retMap != null && retMap.size() > 0 && success.equals(retMap.get("return_code")) && success.equals(retMap.get("result_code"))) + { + SortedMap map=new TreeMap<>(); + //重新拼接支付sign + String nonceStr=NumberUtil.getRandomString(16); + String timeStamp=System.currentTimeMillis()/1000+""; + map.put("appId",Constant.PAT_APP_ID); + map.put("nonceStr",nonceStr); + map.put("package","prepay_id="+retMap.get("prepay_id")); + map.put("signType","MD5"); + map.put("timeStamp",timeStamp); + //System.out.println("createSign:"+createSign(null, map)); + //返给前端加密后的sign, + data.put("packageValue",retMap.get("prepay_id")); + data.put("nonceStr",nonceStr); + data.put("paySign",createSign(null, map)); + data.put("timeStamp",timeStamp); + return data; + } + } + catch (Exception e) + { + log.error("parse wx result error.",e); + throw e; + } + return null; + } + + + /** + * 构建微信订单参数 + * @param lymsOrder + * @return + * @throws Exception + */ + public String buildRequestXml(LymsGroupOrder lymsOrder) throws Exception { + Map paramMap = new TreeMap((key1,key2) -> { + return key1.toString().compareTo(key2.toString()); + } + ); + //小程序ID + paramMap.put("appid", Constant.PAT_APP_ID); + //商户号 + paramMap.put("mch_id", Constant.MCHID); + //随机字符串 + paramMap.put("nonce_str", NumberUtil.getRandomString(16)); + //签名类型 + paramMap.put("sign_type", "MD5"); + //商户订单号 + paramMap.put("out_trade_no", lymsOrder.getPayorderid()); + //标价金额 + paramMap.put("total_fee", String.valueOf(lymsOrder.getTotalPrices())); + //终端IP + paramMap.put("spbill_create_ip", createIP); + //通知地址 + paramMap.put("notify_url", notifyUrl); + //交易类型 + paramMap.put("trade_type", "JSAPI"); + //用户标识 + paramMap.put("openid", lymsOrder.getOpenid()); + //商品描述 + paramMap.put("body", "问诊支付"); + + String reqSign = PayDigestUtil.getSign(paramMap, Constant.REQ_KEY); + // 签名 + paramMap.put("sign", reqSign); + return XmlUtil.mapToXml(paramMap); + } + + + /** + * 微信支付成功后回调接口 + * https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8 + * @param request + * @param response + * @return + */ + @PostMapping("payNotify") + public void payNotify(HttpServletRequest request, HttpServletResponse response) { + + Map result = new HashMap<>(2); + result.put("return_code",""); + result.put("return_msg","参数错误"); + try { + Map paramMap = getPayNotifyParamMap(request); + + //验证支付通知的参数合法性 + if (!verifyPayNotify(paramMap)) { + //微信支付订单号 + String payOrderId = paramMap.get("transaction_id"); + //商户订单号 + String mchOrderNo = paramMap.get("out_trade_no"); + LambdaQueryWrapper wrapper = new QueryWrapper().lambda(); + wrapper.eq(LymsGroupOrder::getOrderno, mchOrderNo); + LymsGroupOrder order=new LymsGroupOrder(); + order.setPayorderid(payOrderId); + boolean f=lymsGroupOrderService.update(order, wrapper); + + } + outResult(response, XmlUtil.mapToXml(result)); + }catch (Exception e){ + log.error("pay notify error.",e); + try + { + outResult(response, XmlUtil.mapToXml(result)); + }catch (Exception e1) { + + } + } + } + + + /** + * 回调接口响应微信 + * @param response + * @param content + */ + private void outResult(HttpServletResponse response, String content) { + response.setContentType("text/html"); + PrintWriter pw; + try { + pw = response.getWriter(); + pw.print(content); + log.info("response pay complete."); + } catch (IOException e) { + log.error("response pay write exception.", e); + } + } + + + /** + * 解析支付通知参数为map + * @param request + * @return + * @throws Exception + */ + public Map getPayNotifyParamMap(HttpServletRequest request) throws Exception{ + try + { + String resultXml = IOUtils.toString(request.getInputStream(),"utf-8"); + log.info("pay notify info : {}",resultXml); + if (StringUtil.isNotEmpty(resultXml)) + { + Map retMap = XmlUtil.xmlToMap(resultXml); + String success = "SUCCESS"; + if (retMap != null && retMap.size() > 0 && success.equals(retMap.get("return_code")) && success.equals(retMap.get("result_code"))) + { + return retMap; + } + } + }catch (Exception e) + { + log.error("get pay notify error.",e); + throw e; + } + return null; + } + + /** + * 微信回调参数验证 + * @param map + * @return + */ + public boolean verifyPayNotify(Map map) { + //商户id + String mchId = map.get("mch_id"); + //微信支付订单号 + String payOrderId = map.get("transaction_id"); + //商户订单号 + String mchOrderNo = map.get("out_trade_no"); + //现金支付金额 + String amount = map.get("cash_fee"); + //签名 + String sign = map.get("sign"); + + if (StringUtil.isEmpty(mchId)) { + log.warn("Params error. mchId : {}", mchId); + return false; + } + if (StringUtil.isEmpty(payOrderId)) { + log.warn("Params error. payOrderId : {}", payOrderId); + return false; + } + if (StringUtil.isEmpty(amount)) { + log.warn("Params error. amount : {}", amount); + return false; + } + if (StringUtil.isEmpty(sign)) { + log.warn("Params error. sign : {}", sign); + return false; + } + + // 验证签名 + if (!verifySign(map)) { + log.warn("verify params sign failed. payOrderId={}", payOrderId); + return false; + } + + // 根据payOrderId查询业务订单,验证订单是否存在 + LambdaQueryWrapper wrapper = new QueryWrapper().lambda(); + wrapper.eq(LymsGroupOrder::getOrderno, mchOrderNo); + List lymsOrders = lymsGroupOrderService.list(wrapper); + if (CollectionUtils.isNotEmpty(lymsOrders)) { + log.warn("local orderno not exists,payOrderId : {},orderno : {}", payOrderId, mchOrderNo); + return false; + } + // 核对金额 + if (lymsOrders.get(0).getTotalPrices() != Integer.parseInt(amount)) { + log.warn("Inconsistent payment amount ,dbPayPrice : {},payPrice : {}", lymsOrders.get(0).getTotalPrices(), amount); + return false; + } + return true; + } + + + /** + * 回调参数的签名验证 + * @param map + * @return + */ + public boolean verifySign(Map map) { + String mchId = map.get("mch_id"); + //检查商户id + if (!Constant.MCHID.equals(mchId) ) { + return false; + } + String localSign = PayDigestUtil.getSign(map, Constant.REQ_KEY, "sign"); + String sign = map.get("sign"); + return localSign.equalsIgnoreCase(sign); + } + + + /** + * 微信支付签名算法sign + * @param characterEncoding + * @param parameters + * @return + */ + public static String createSign(String characterEncoding,SortedMap parameters){ + StringBuffer sb = new StringBuffer(); + Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序) + Iterator it = es.iterator(); + while(it.hasNext()) { + Map.Entry entry = (Map.Entry)it.next(); + String k = (String)entry.getKey(); + Object v = entry.getValue(); + if(null != v && !"".equals(v) + && !"sign".equals(k) && !"key".equals(k)) { + sb.append(k + "=" + v + "&"); + } + } + + sb.append("key=" + Constant.REQ_KEY); + System.out.println("签名字符串:"+sb.toString()); + System.out.println("签名MD5未变大写:" + MD5Util.MD5Encode(sb.toString(), characterEncoding)); + String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase(); + return sign; + } + + +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsGroupGoods.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsGroupGoods.java new file mode 100644 index 0000000..582b05e --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsGroupGoods.java @@ -0,0 +1,97 @@ +package com.lyms.talkonlineweb.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + +/** + * 群组聊天商品 + * @TableName lyms_group_goods + */ +@TableName(value ="lyms_group_goods") +@Data +public class LymsGroupGoods implements Serializable { + /** + * 主键id,自增 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 商品名称 + */ + @TableField(value = "name") + private String name; + + /** + * 价格 单位分 + */ + @TableField(value = "price") + private Integer price; + + /** + * 单位 (天)单次商品服务时长 + */ + @TableField(value = "time_limit") + private Integer timeLimit; + + /** + * 创建时间 + */ + @TableField(value = "createdtime") + private Date createdtime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + LymsGroupGoods other = (LymsGroupGoods) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName())) + && (this.getPrice() == null ? other.getPrice() == null : this.getPrice().equals(other.getPrice())) + && (this.getTimeLimit() == null ? other.getTimeLimit() == null : this.getTimeLimit().equals(other.getTimeLimit())) + && (this.getCreatedtime() == null ? other.getCreatedtime() == null : this.getCreatedtime().equals(other.getCreatedtime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getName() == null) ? 0 : getName().hashCode()); + result = prime * result + ((getPrice() == null) ? 0 : getPrice().hashCode()); + result = prime * result + ((getTimeLimit() == null) ? 0 : getTimeLimit().hashCode()); + result = prime * result + ((getCreatedtime() == null) ? 0 : getCreatedtime().hashCode()); + return result; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", name=").append(name); + sb.append(", price=").append(price); + sb.append(", timeLimit=").append(timeLimit); + sb.append(", createdtime=").append(createdtime); + sb.append(", serialVersionUID=").append(serialVersionUID); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsGroupOrder.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsGroupOrder.java new file mode 100644 index 0000000..3398e47 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsGroupOrder.java @@ -0,0 +1,150 @@ +package com.lyms.talkonlineweb.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +import lombok.Data; + +/** + * 订单 + * @TableName lyms_group_order + */ +@TableName(value ="lyms_group_order") +@Data +public class LymsGroupOrder implements Serializable { + /** + * 主键id,自增 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 订单编号 + */ + @TableField(value = "orderno") + private String orderno; + + /** + * 患者id + */ + @TableField(value = "pid") + private Integer pid; + + /** + * 支付总价 + */ + @TableField(value = "total_prices") + private Integer totalPrices; + + /** + * 订单状态,订单生成(0),支付成功(1),处理完成(2),处理失败(-1) + */ + @TableField(value = "status") + private Integer status; + + /** + * 支付订单号 + */ + @TableField(value = "payorderid") + private String payorderid; + + /** + * openid + */ + @TableField(value = "openid") + private String openid; + + /** + * 支付时间 + */ + @TableField(value = "paytime") + private Date paytime; + + /** + * 创建时间 + */ + @TableField(value = "createdtime") + private Date createdtime; + + /** + * 更新时间 + */ + @TableField(value = "updatedtime") + private Date updatedtime; + + /** + * 订单量 + */ + @TableField(exist = false) + private List orderData; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + LymsGroupOrder other = (LymsGroupOrder) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getOrderno() == null ? other.getOrderno() == null : this.getOrderno().equals(other.getOrderno())) + && (this.getPid() == null ? other.getPid() == null : this.getPid().equals(other.getPid())) + && (this.getTotalPrices() == null ? other.getTotalPrices() == null : this.getTotalPrices().equals(other.getTotalPrices())) + && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus())) + && (this.getPayorderid() == null ? other.getPayorderid() == null : this.getPayorderid().equals(other.getPayorderid())) + && (this.getOpenid() == null ? other.getOpenid() == null : this.getOpenid().equals(other.getOpenid())) + && (this.getPaytime() == null ? other.getPaytime() == null : this.getPaytime().equals(other.getPaytime())) + && (this.getCreatedtime() == null ? other.getCreatedtime() == null : this.getCreatedtime().equals(other.getCreatedtime())) + && (this.getUpdatedtime() == null ? other.getUpdatedtime() == null : this.getUpdatedtime().equals(other.getUpdatedtime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getOrderno() == null) ? 0 : getOrderno().hashCode()); + result = prime * result + ((getPid() == null) ? 0 : getPid().hashCode()); + result = prime * result + ((getTotalPrices() == null) ? 0 : getTotalPrices().hashCode()); + result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode()); + result = prime * result + ((getPayorderid() == null) ? 0 : getPayorderid().hashCode()); + result = prime * result + ((getOpenid() == null) ? 0 : getOpenid().hashCode()); + result = prime * result + ((getPaytime() == null) ? 0 : getPaytime().hashCode()); + result = prime * result + ((getCreatedtime() == null) ? 0 : getCreatedtime().hashCode()); + result = prime * result + ((getUpdatedtime() == null) ? 0 : getUpdatedtime().hashCode()); + return result; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", orderno=").append(orderno); + sb.append(", pid=").append(pid); + sb.append(", totalPrices=").append(totalPrices); + sb.append(", status=").append(status); + sb.append(", payorderid=").append(payorderid); + sb.append(", openid=").append(openid); + sb.append(", paytime=").append(paytime); + sb.append(", createdtime=").append(createdtime); + sb.append(", updatedtime=").append(updatedtime); + sb.append(", serialVersionUID=").append(serialVersionUID); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsOrderData.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsOrderData.java new file mode 100644 index 0000000..4bcd5b3 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsOrderData.java @@ -0,0 +1,124 @@ +package com.lyms.talkonlineweb.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + +/** + * 订单量 + * @TableName lyms_order_data + */ +@TableName(value ="lyms_order_data") +@Data +public class LymsOrderData implements Serializable { + /** + * 主键id,自增 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 商品id + */ + @TableField(value = "gid") + private Integer gid; + + /** + * 订单数量 + */ + @TableField(value = "order_num") + private Integer orderNum; + + /** + * 订单id + */ + @TableField(value = "order_id") + private Integer orderId; + + /** + * 本订单服务开始时间(从支付成功计时) + */ + @TableField(value = "start_time") + private Date startTime; + + /** + * 本订单服务结束时间 + */ + @TableField(value = "end_time") + private Date endTime; + + /** + * 更新时间 + */ + @TableField(value = "updatedtime") + private Date updatedtime; + + /** + * 创建时间 + */ + @TableField(value = "createdtime") + private Date createdtime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + LymsOrderData other = (LymsOrderData) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getGid() == null ? other.getGid() == null : this.getGid().equals(other.getGid())) + && (this.getOrderNum() == null ? other.getOrderNum() == null : this.getOrderNum().equals(other.getOrderNum())) + && (this.getOrderId() == null ? other.getOrderId() == null : this.getOrderId().equals(other.getOrderId())) + && (this.getStartTime() == null ? other.getStartTime() == null : this.getStartTime().equals(other.getStartTime())) + && (this.getEndTime() == null ? other.getEndTime() == null : this.getEndTime().equals(other.getEndTime())) + && (this.getUpdatedtime() == null ? other.getUpdatedtime() == null : this.getUpdatedtime().equals(other.getUpdatedtime())) + && (this.getCreatedtime() == null ? other.getCreatedtime() == null : this.getCreatedtime().equals(other.getCreatedtime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getGid() == null) ? 0 : getGid().hashCode()); + result = prime * result + ((getOrderNum() == null) ? 0 : getOrderNum().hashCode()); + result = prime * result + ((getOrderId() == null) ? 0 : getOrderId().hashCode()); + result = prime * result + ((getStartTime() == null) ? 0 : getStartTime().hashCode()); + result = prime * result + ((getEndTime() == null) ? 0 : getEndTime().hashCode()); + result = prime * result + ((getUpdatedtime() == null) ? 0 : getUpdatedtime().hashCode()); + result = prime * result + ((getCreatedtime() == null) ? 0 : getCreatedtime().hashCode()); + return result; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", gid=").append(gid); + sb.append(", orderNum=").append(orderNum); + sb.append(", orderId=").append(orderId); + sb.append(", startTime=").append(startTime); + sb.append(", endTime=").append(endTime); + sb.append(", updatedtime=").append(updatedtime); + sb.append(", createdtime=").append(createdtime); + sb.append(", serialVersionUID=").append(serialVersionUID); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsGroupGoodsMapper.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsGroupGoodsMapper.java new file mode 100644 index 0000000..b4d887e --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsGroupGoodsMapper.java @@ -0,0 +1,15 @@ +package com.lyms.talkonlineweb.mapper; + +import com.lyms.talkonlineweb.domain.LymsGroupGoods; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Entity com.lyms.talkonlineweb.domain.LymsGroupGoods + */ +public interface LymsGroupGoodsMapper extends BaseMapper { + +} + + + + diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsGroupOrderMapper.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsGroupOrderMapper.java new file mode 100644 index 0000000..ffb10b4 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsGroupOrderMapper.java @@ -0,0 +1,15 @@ +package com.lyms.talkonlineweb.mapper; + +import com.lyms.talkonlineweb.domain.LymsGroupOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Entity com.lyms.talkonlineweb.domain.LymsGroupOrder + */ +public interface LymsGroupOrderMapper extends BaseMapper { + +} + + + + diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsOrderDataMapper.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsOrderDataMapper.java new file mode 100644 index 0000000..2728edb --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsOrderDataMapper.java @@ -0,0 +1,15 @@ +package com.lyms.talkonlineweb.mapper; + +import com.lyms.talkonlineweb.domain.LymsOrderData; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Entity com.lyms.talkonlineweb.domain.LymsOrderData + */ +public interface LymsOrderDataMapper extends BaseMapper { + +} + + + + diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsGroupGoodsService.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsGroupGoodsService.java new file mode 100644 index 0000000..e59875f --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsGroupGoodsService.java @@ -0,0 +1,11 @@ +package com.lyms.talkonlineweb.service; + +import com.lyms.talkonlineweb.domain.LymsGroupGoods; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * + */ +public interface LymsGroupGoodsService extends IService { + +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsGroupOrderService.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsGroupOrderService.java new file mode 100644 index 0000000..65fcb1d --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsGroupOrderService.java @@ -0,0 +1,11 @@ +package com.lyms.talkonlineweb.service; + +import com.lyms.talkonlineweb.domain.LymsGroupOrder; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * + */ +public interface LymsGroupOrderService extends IService { + +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsOrderDataService.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsOrderDataService.java new file mode 100644 index 0000000..0c52426 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsOrderDataService.java @@ -0,0 +1,11 @@ +package com.lyms.talkonlineweb.service; + +import com.lyms.talkonlineweb.domain.LymsOrderData; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * + */ +public interface LymsOrderDataService extends IService { + +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsGroupGoodsServiceImpl.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsGroupGoodsServiceImpl.java new file mode 100644 index 0000000..356bda9 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsGroupGoodsServiceImpl.java @@ -0,0 +1,20 @@ +package com.lyms.talkonlineweb.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.lyms.talkonlineweb.domain.LymsGroupGoods; +import com.lyms.talkonlineweb.service.LymsGroupGoodsService; +import com.lyms.talkonlineweb.mapper.LymsGroupGoodsMapper; +import org.springframework.stereotype.Service; + +/** + * + */ +@Service +public class LymsGroupGoodsServiceImpl extends ServiceImpl + implements LymsGroupGoodsService{ + +} + + + + diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsGroupOrderServiceImpl.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsGroupOrderServiceImpl.java new file mode 100644 index 0000000..23763eb --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsGroupOrderServiceImpl.java @@ -0,0 +1,20 @@ +package com.lyms.talkonlineweb.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.lyms.talkonlineweb.domain.LymsGroupOrder; +import com.lyms.talkonlineweb.service.LymsGroupOrderService; +import com.lyms.talkonlineweb.mapper.LymsGroupOrderMapper; +import org.springframework.stereotype.Service; + +/** + * + */ +@Service +public class LymsGroupOrderServiceImpl extends ServiceImpl + implements LymsGroupOrderService{ + +} + + + + diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsOrderDataServiceImpl.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsOrderDataServiceImpl.java new file mode 100644 index 0000000..8e3a01b --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsOrderDataServiceImpl.java @@ -0,0 +1,20 @@ +package com.lyms.talkonlineweb.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.lyms.talkonlineweb.domain.LymsOrderData; +import com.lyms.talkonlineweb.service.LymsOrderDataService; +import com.lyms.talkonlineweb.mapper.LymsOrderDataMapper; +import org.springframework.stereotype.Service; + +/** + * + */ +@Service +public class LymsOrderDataServiceImpl extends ServiceImpl + implements LymsOrderDataService{ + +} + + + + diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/StringUtil.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/StringUtil.java index 0c0caf3..6dab242 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/StringUtil.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/StringUtil.java @@ -51,7 +51,21 @@ public class StringUtil { { try { - return String.format("%s%s%06d", "D", DateUtil.getSeqString(), IdWorker.getFlowIdWorkerInstance().nextId()); + return String.format("%s%s%06d", "LYMS", DateUtil.getSeqString(), IdWorker.getFlowIdWorkerInstance().nextId()); + }catch (Exception e){ + + } + return ""; + } + /** + * 微信用生成一个唯一编号 + * @return + */ + public static String getUniqueWeixNo() + { + try + { + return String.format("%s%s%06d", "WEIX", DateUtil.getSeqString(), IdWorker.getFlowIdWorkerInstance().nextId()); }catch (Exception e){ } diff --git a/talkonlineweb/src/main/resources/application-dev.yml b/talkonlineweb/src/main/resources/application-dev.yml index 477e5c6..07e755f 100644 --- a/talkonlineweb/src/main/resources/application-dev.yml +++ b/talkonlineweb/src/main/resources/application-dev.yml @@ -33,6 +33,8 @@ hx.hxpasswd: passwd #微信支付通知地址 notify.url: https://dev-talk-api.healthbaby.com.cn/order/payNotify +#微信订单,终端ip +weixin.createIP: 119.90.57.26 proxyIP: proxyPort: diff --git a/talkonlineweb/src/main/resources/application-prod.yml b/talkonlineweb/src/main/resources/application-prod.yml index 74c441f..dc88fda 100644 --- a/talkonlineweb/src/main/resources/application-prod.yml +++ b/talkonlineweb/src/main/resources/application-prod.yml @@ -29,6 +29,8 @@ hx.hxpasswd: passwd #微信支付通知地址 notify.url: https://talk-api.healthbaby.com.cn/order/payNotify +#微信订单,终端ip +weixin.createIP: 119.90.43.68 proxyIP: proxyPort: diff --git a/talkonlineweb/src/main/resources/mapper/LymsGroupGoodsMapper.xml b/talkonlineweb/src/main/resources/mapper/LymsGroupGoodsMapper.xml new file mode 100644 index 0000000..4667bbd --- /dev/null +++ b/talkonlineweb/src/main/resources/mapper/LymsGroupGoodsMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + id,name,price, + time_limit,createdtime + + diff --git a/talkonlineweb/src/main/resources/mapper/LymsGroupOrderMapper.xml b/talkonlineweb/src/main/resources/mapper/LymsGroupOrderMapper.xml new file mode 100644 index 0000000..da49283 --- /dev/null +++ b/talkonlineweb/src/main/resources/mapper/LymsGroupOrderMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + id,orderno,pid, + total_prices,status,payorderid, + openid,paytime,createdtime, + updatedtime + + diff --git a/talkonlineweb/src/main/resources/mapper/LymsOrderDataMapper.xml b/talkonlineweb/src/main/resources/mapper/LymsOrderDataMapper.xml new file mode 100644 index 0000000..c603f2d --- /dev/null +++ b/talkonlineweb/src/main/resources/mapper/LymsOrderDataMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + id,gid,order_num, + order_id,start_time,end_time, + updatedtime,createdtime + +