Commit 3e292d4d by Huang Linyu

Merge branch 'f-6.6.9' of 192.168.10.6:caosy/fun-golf-service into f-6.6.9

parents 0e6d3d22 460aa016
Showing with 510 additions and 59 deletions
......@@ -2,6 +2,8 @@
* Copyright 2014 CTRIP Co.,Ltd. All rights reserved.
*/
package com.ctrip.fun.golf.api.order;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -13,9 +15,12 @@ import com.alibaba.fastjson.JSONObject;
import com.ctrip.fun.common.vo.Request;
import com.ctrip.fun.common.vo.Response;
import com.ctrip.fun.common.vo.ResponseMp;
import com.ctrip.fun.common.vo.ResponseStatusEnum;
import com.ctrip.fun.common.vo.order.BuyVoucherActivityBean;
import com.ctrip.fun.common.vo.order.CommuneOrderBean;
import com.ctrip.fun.common.vo.order.CommuneOrderListItemBean;
import com.ctrip.fun.common.vo.order.CommuneOrderResourceBean;
import com.ctrip.fun.common.vo.product.BuyVoucherActivityQuery;
import com.ctrip.fun.golf.service.order.AbstractOrderService;
import com.ctrip.fun.golf.service.order.CommuneOrderService;
/**
......@@ -57,6 +62,41 @@ public class CommuneOrderController extends AbstractOrderController<CommuneOrder
return response;
}
@ResponseBody
@RequestMapping(value = "/buyVoucherActivityList", method = RequestMethod.POST)
public Response<List<BuyVoucherActivityBean>> getBuyVoucherActivityList(@RequestBody Request<BuyVoucherActivityQuery> request) {
Response<List<BuyVoucherActivityBean>> response = new Response<List<BuyVoucherActivityBean>>();
List<BuyVoucherActivityBean> list;
list = communeOrderService.buyVoucherActivityList();
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setBody(list);
return response;
}
@ResponseBody
@RequestMapping(value = "/getBuyVoucherActivityDetail", method = RequestMethod.POST)
public Response<BuyVoucherActivityBean> getBuyVoucherActivityDetail(@RequestBody Request<Integer> request) {
Response<BuyVoucherActivityBean> response = new Response<BuyVoucherActivityBean>();
BuyVoucherActivityBean buyVoucherActivityBean;
buyVoucherActivityBean = communeOrderService.getBuyVoucherActivityDetail(request.getBody());
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setBody(buyVoucherActivityBean);
return response;
}
@ResponseBody
@RequestMapping(value = "/getBuyVoucherActivityMessage", method = RequestMethod.POST)
public Response<String> getBuyVoucherActivityMessage(@RequestBody Request<String> request) {
Response<String> response = new Response<String>();
String message;
message = communeOrderService.getBuyVoucherActivityMessage(request.getBody());
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setBody(message);
return response;
}
@Override
protected AbstractOrderService<CommuneOrderBean, CommuneOrderResourceBean> getOrderService() {
return communeOrderService;
......
......@@ -44,4 +44,10 @@ public abstract class AbstractNotifyController {
return this.getNotifyService().notifyForWeiXinPay(xml);
}
@ResponseBody
@RequestMapping(value = "/weiXinRefoundNotifyUrl", method = RequestMethod.POST)
public String weiXinRefoundNotify(@RequestBody String xml) throws Exception {
return this.getNotifyService().weiXinRefoundNotify(xml);
}
}
......@@ -282,6 +282,19 @@ public class UserController {
}
@ResponseBody
@RequestMapping(value = "/resetMiniOpenid", method = RequestMethod.POST)
public Response<String> resetMiniOpenid(@RequestBody Request<ChangePasswordBean> request) {
Response<String> response = new Response<String>();
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setMessage(ResponseStatusEnum.SUCCESS.getMsg());
userService.resetMiniOpenid(request.getBody());
response.setBody("success");
return response;
}
@ResponseBody
@RequestMapping(value = "/recommendUserList", method = RequestMethod.POST)
public Response<PagedResponseBean<RecommendUserItemBean>> QueryRecommendUserAction(
@RequestBody Request<RecommendUserListQuery> request) {
......
......@@ -279,6 +279,15 @@ public class OrderDao extends GenericHibernateDao<Order, Integer> {
return pagedResponseBean;
}
public int queryVoucherPayedOrder(String uid,int activityId) {
String sql = "SELECT count(*) from ord_communeitem c where OrderID in (SELECT OrderID from ord_order where uid=:uid and ProcessStatus&16=16 and OrderCategory =16) and activityId=:activityId";
Session session = this.getSession();
Query query = session.createSQLQuery(sql);
query.setParameter("uid", uid);
query.setParameter("activityId", activityId);
return ((BigInteger) query.uniqueResult()).intValue();
}
@SuppressWarnings("unchecked")
public PagedEntityBean<Order> queryComOrders(OrderQuery queryBean) {
PagedEntityBean<Order> pagedEntityBean = new PagedEntityBean<Order>();
......
package com.ctrip.fun.golf.dao.product;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import com.ctrip.fun.common.vo.SortDirectionEnum;
import com.ctrip.fun.common.vo.product.BuyVoucherActivityQuery;
import com.ctrip.fun.golf.dao.GenericHibernateDao;
import com.ctrip.fun.golf.domain.product.BuyVoucherActivity;
import com.ctrip.fun.golf.vo.PagedEntityBean;
/**
* @author zgsong
*
*/
public class BuyVoucherActivityDao extends GenericHibernateDao<BuyVoucherActivity, Integer> {
public PagedEntityBean<BuyVoucherActivity> queryList(BuyVoucherActivityQuery queryBean) {
Criteria criteria = this.getCriteria(BuyVoucherActivity.class);
if (null != queryBean.getId()) {
criteria.add(Restrictions.eq("id", queryBean.getId()));
}
if (null != queryBean.getActivityName() && !"".equals(queryBean.getActivityName())) {
criteria.add(Restrictions.like("activityName", queryBean.getActivityName(), MatchMode.ANYWHERE));
}
if (null != queryBean.getValid()) {
criteria.add(Restrictions.eq("valid", queryBean.getValid()));
}
if (null != queryBean.getCreatedTimeStart()) {
criteria.add(Restrictions.ge("createdTimeStart", queryBean.getCreatedTimeStart()));
}
if (null != queryBean.getCreatedTimeEnd()) {
criteria.add(Restrictions.le("createdTimeEnd", queryBean.getCreatedTimeEnd()));
}
if (null != queryBean.getUserLimit()) {
criteria.add(Restrictions.eq("userLimit", queryBean.getUserLimit()));
}
criteria.setFirstResult(queryBean.getPagerOffset());
criteria.setMaxResults(queryBean.getPagerPerPage());
if (queryBean.getSortDirection().equals(SortDirectionEnum.ASC)) {
criteria.addOrder(Order.asc(queryBean.getSortField()));
} else {
criteria.addOrder(Order.desc(queryBean.getSortField()));
}
List<BuyVoucherActivity> result = criteria.list();
criteria.setFirstResult(0);
Long count = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();
PagedEntityBean<BuyVoucherActivity> pagedEntityBean = new PagedEntityBean<BuyVoucherActivity>();
pagedEntityBean.setCount(count);
pagedEntityBean.setResult(result);
return pagedEntityBean;
}
}
package com.ctrip.fun.golf.domain.payment;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Security;
/**
* Created by gds on 2018/7/26.
*/
public class AESUtil {
public static String getRefundDecrypt(String reqInfoSecret, String key) {
String result = "";
try {
Security.addProvider(new BouncyCastleProvider());
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] bt = decoder.decodeBuffer(reqInfoSecret);
String md5key = DigestUtils.md5Hex(key).toLowerCase();
SecretKey secretKey = new SecretKeySpec(md5key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] resultbt = cipher.doFinal(bt);
result = new String(resultbt);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
String A = "cbRfjwOKrLQCOjAU0v1Ac6cDJQhK6349ngVplZHLe010obV59BJ75z05eUzG+Um3Zk9WxNO6jtk60bBDkMLmf4dZk41wSbyx/GiNNcRp3g0GdUMjGjhlyJgMAKiLbmVwcPEQnOoikcCbwGd0VmOdWcTk67kDlE4ssYW6pgBXp5bSBVotuar2Wxi0z20HGgsz7dcIVELP9+JfGwuiVV9xkhO8sPbEO4SIO2qhkRQ0QzbDYgn9gU1Iprzv6wGxFh+Bm/lJWuiBGwhFCT2fq1xEF1nDPEyW3LOWq4daCegXpvTXoXLZp9Xp6zcdxiDCsLgj8yj+q7ZNmVNt1vTUR94ZQAI1UAtCqK+1dI89DZdbifU7o0fVm/9WQqjcOIo4WemUJU7WfCsyHXBVvx8lZezoQc5ZGZOqTEZJCVKV6OF5iqvlNnZJ1byPg7BfHZnmbIjdETFMIOkq3oPicshnNlVZ9g08DvesDZzG/KJzI8NBMFfXNMjSJyuemsZ/0jFJRtKDOWoCQetWox+mORa5BPrMwvibTLkPZL0okvnyrJgFwGtE4BFTdnN/+cfuUISXMTbeZv6UjRJwD9y8B+wi4wTSUC1QXjlZEkV+RgBNnJD/n13NWUK1nlrwev/RHLsgjoMSYnF0mYec8g1BCyW0POcp4iEDaRVMrjQnACyyeMncSxA+KawdoFEOqMuAITv3B0Q9iZOTpI7yqnpquWiphXMuKovJgLp4vnPqerMMthTeaQ/rfVVO/U6Z4K/heTZKT2Y0y7kQP2GS+r/N5Qvu+J0sihJ8opoZ0AJ7ktwGrzcmkIq/DCCtAfgdAT8x3rtSXA4f8pb7WqFssdGRqgzMZR1jlcz3LD5+Du+BWK5QmyCeynywd9b6s7oYdyU0aI75LrT5EBOtEHAMGi2rmwb1X2wlEd3g4gCr2l1EEA4dUTdhsqynG0w64VHWJkvJgTOdmzMPWYksLu463qcy6dN44WuNBG0aw7uEQQIUXeRhDEwCBQVmzXNLzwQ6wHv6O9j7yvkvZll3SuGw7bbsfdSdAfQkJkLCj/MHuEKUauiV0mQS/2M=";
String key = "02a86cb980b1237eaa77fb86adf64657";
String B = getRefundDecrypt(A, key);
System.out.println(B);
}
}
......@@ -213,8 +213,7 @@ public class WXUtil {
*/
public static Map<String, String> doRefund(String url,String data,String partner) throws Exception {
KeyStore keyStore = KeyStore.getInstance("PKCS12");
URL url2 = WXUtil.class.getClassLoader().getResource("apiclient_cert.p12");
FileInputStream instream = new FileInputStream(new File(url2.toURI()));//P12文件目录
FileInputStream instream = new FileInputStream(new File("/opt/apiclient_cert.p12"));//P12文件目录
try {
keyStore.load(instream, partner.toCharArray());
} finally {
......
package com.ctrip.fun.golf.domain.product;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
/**
*买券活动
*
* @author zgsong
*
*/
@Entity
@Table(name = "prd_buyVoucherActivity")
public class BuyVoucherActivity implements java.io.Serializable {
/**
* serialVersionUID
*/
private static final long serialVersionUID = -8821033173307829967L;
private Integer id;
private String activityName;// 活动名称
private String imagePath;// 本次活动图片
private String thumPath;// 本次活动缩略图
private BigDecimal communePrice;// 会员价格
private BigDecimal guestPrice;// 嘉宾价
private Integer userLimit;// 购买限制
private String voucherConfig;// 本次活动的发券配置
private String message;// 购买成功后的提示
private Integer valid;// 活动有效标识1:有效 0失效
private Integer buyLimitTimes;//限制购买次数
private Date createdTime;//活动创建时间
private Date DataChange_LastTime;//最近修改时间
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "activityName")
public String getActivityName() {
return activityName;
}
public void setActivityName(String activityName) {
this.activityName = activityName;
}
@Column(name = "imagePath")
public String getImagePath() {
return imagePath;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
@Column(name = "thumPath")
public String getThumPath() {
return thumPath;
}
public void setThumPath(String thumPath) {
this.thumPath = thumPath;
}
@Column(name = "communePrice")
public BigDecimal getCommunePrice() {
return communePrice;
}
public void setCommunePrice(BigDecimal communePrice) {
this.communePrice = communePrice;
}
@Column(name = "guestPrice")
public BigDecimal getGuestPrice() {
return guestPrice;
}
public void setGuestPrice(BigDecimal guestPrice) {
this.guestPrice = guestPrice;
}
@Column(name = "userLimit")
public Integer getUserLimit() {
return userLimit;
}
public void setUserLimit(Integer userLimit) {
this.userLimit = userLimit;
}
@Column(name = "voucherConfig")
public String getVoucherConfig() {
return voucherConfig;
}
public void setVoucherConfig(String voucherConfig) {
this.voucherConfig = voucherConfig;
}
@Column(name = "message")
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Column(name = "valid")
public Integer getValid() {
return valid;
}
public void setValid(Integer valid) {
this.valid = valid;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DataChange_LastTime")
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
@org.hibernate.annotations.Generated(org.hibernate.annotations.GenerationTime.ALWAYS)
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DataChange_LastTime")
public Date getDataChange_LastTime() {
return DataChange_LastTime;
}
public void setDataChange_LastTime(Date dataChange_LastTime) {
DataChange_LastTime = dataChange_LastTime;
}
@Column(name = "buyLimitTimes")
public Integer getBuyLimitTimes() {
return buyLimitTimes;
}
public void setBuyLimitTimes(Integer buyLimitTimes) {
this.buyLimitTimes = buyLimitTimes;
}
}
......@@ -1019,7 +1019,17 @@ public class VoucherService {
ClientConfig clientConfig = clientConfigDao.getByType(voucherSendType);
//社员订单赠送优惠券配置:431_sendBeginTime_sendEndTime(规则id_开始发送时间_结束发送方式)
String commune_voucher = clientConfig.getMessage();
JSONObject jsobj = JSONObject.parseObject(commune_voucher);
this.sendVoucherForPlaceOrderByConfig(uid, orderId, myselfOrder, commune_voucher);
}
/**
* 用于执行下单送券
* @param uid 得券人uid
* @param orderNo 订单id
* @param myselfOrder 是否用户自己的订单
* @param voucherSendType 发券配置的key值
*/
public void sendVoucherForPlaceOrderByConfig(String uid,String orderId,boolean myselfOrder,String voucherConfig){
JSONObject jsobj = JSONObject.parseObject(voucherConfig);
try {
Date sendBeginTime = DateUtil.parseDateTime(jsobj.getString("sendBeginTime"));
Date sendEndTime = DateUtil.parseDateTime(jsobj.getString("sendEndTime"));
......
......@@ -268,6 +268,7 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex
JSONObject jSONObject = new JSONObject();
try {
jSONObject = WeiXinAtcion.weixinPlay(userExt.getMiniAppOpenId(),order.getAmount().multiply(new BigDecimal("100")).intValue(), order.getOrderNo()+"", this.getNotifyUrlForWeiXinPay(order), "dingqiu");
jSONObject.put("needWXPay", true);
response.setBody(jSONObject);
} catch (Exception e) {
response.setBody(jSONObject);
......@@ -1179,6 +1180,7 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex
}
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setMessage("请求成功");
jSONObject.put("needWXPay", true);
response.setBody(jSONObject);
}
}else {
......@@ -1220,6 +1222,10 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex
this.getOrderDao().update(order);
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setMessage("请求成功");
JSONObject jSONObject = new JSONObject();
jSONObject.put("needWXPay", false);
jSONObject.put("orderNo", order.getOrderNo());
response.setBody(jSONObject);
return response;
}
......
......@@ -11,9 +11,11 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import com.alibaba.fastjson.JSONObject;
import com.ctrip.fun.common.core.util.BeanConverter;
import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.common.core.util.StringUtils;
import com.ctrip.fun.common.vo.PagedResponseBean;
......@@ -23,6 +25,7 @@ import com.ctrip.fun.common.vo.basic.MultipleCourseConditionBean;
import com.ctrip.fun.common.vo.basic.VipGradeEnum;
import com.ctrip.fun.common.vo.operation.ResourceConfirmTypeEnum;
import com.ctrip.fun.common.vo.order.AbstractOrderListItemBean;
import com.ctrip.fun.common.vo.order.BuyVoucherActivityBean;
import com.ctrip.fun.common.vo.order.CommuneOrderBean;
import com.ctrip.fun.common.vo.order.CommuneOrderListItemBean;
import com.ctrip.fun.common.vo.order.CommuneOrderResourceBean;
......@@ -32,14 +35,17 @@ import com.ctrip.fun.common.vo.order.OrderStatusBitEnum;
import com.ctrip.fun.common.vo.order.OrderStatusEnum;
import com.ctrip.fun.common.vo.order.PlaceOrderResponseBean;
import com.ctrip.fun.common.vo.order.UserCommuneOrderStatusEnum;
import com.ctrip.fun.common.vo.product.BuyVoucherActivityQuery;
import com.ctrip.fun.common.vo.product.ProductPaymentTypeEnum;
import com.ctrip.fun.golf.dao.client.ClientConfigDao;
import com.ctrip.fun.golf.dao.order.CommuneOrderItemDao;
import com.ctrip.fun.golf.dao.product.BuyVoucherActivityDao;
import com.ctrip.fun.golf.domain.basic.Voucher;
import com.ctrip.fun.golf.domain.client.ClientConfig;
import com.ctrip.fun.golf.domain.order.CommuneOrderItem;
import com.ctrip.fun.golf.domain.order.Order;
import com.ctrip.fun.golf.domain.payment.WeiXinAtcion;
import com.ctrip.fun.golf.domain.product.BuyVoucherActivity;
import com.ctrip.fun.golf.domain.user.UserExt;
import com.ctrip.fun.golf.exceptions.OrderException;
import com.ctrip.fun.golf.service.basic.OperationMessageService;
......@@ -76,8 +82,9 @@ public class CommuneOrderService extends AbstractOrderService<CommuneOrderBean,
private String voucherNotifyUrlForMiniApp;
private ClientConfigDao clientConfigDao = null;
@Autowired
private BuyVoucherActivityDao buyVoucherActivityDao;
......@@ -145,25 +152,13 @@ public class CommuneOrderService extends AbstractOrderService<CommuneOrderBean,
}
protected void voucherCheckParameters(CommuneOrderBean communeOrderBean) {
ClientConfig clientConfig = clientConfigDao.getByType("buyVoucher_voucher_send");
String commune_voucher = clientConfig.getMessage();
JSONObject jsobj = JSONObject.parseObject(commune_voucher);
BigDecimal voucher_amount = BigDecimal.valueOf(jsobj.getInteger("price"));
if(communeOrderBean.getPrePayAmount().compareTo(voucher_amount) != 0){
BuyVoucherActivity buyoucherActivity = buyVoucherActivityDao.findById(communeOrderBean.getActivityId());
if(communeOrderBean.getPrePayAmount().compareTo(buyoucherActivity.getCommunePrice()) != 0&&communeOrderBean.getPrePayAmount().compareTo(buyoucherActivity.getGuestPrice()) != 0){
throw new OrderException(-41, "您提交的预付款金额有问题,请检查!");
}
OrderQuery queryBean = new OrderQuery();
queryBean.setOrderCategory(16);
queryBean.setUid(communeOrderBean.getUid());
queryBean.setPagerOffset(0);
queryBean.setSortField("orderDate");
PagedEntityBean<Order> pageOrder = this.getOrderDao().queryComOrders(queryBean);
if(pageOrder!=null&&pageOrder.getCount()>0){
for(Order ord:(List<Order>)pageOrder.getResult()){
if((ord.getProcessStatus()&OrderStatusBitEnum.DEDUCTED.getValue())==16){
throw new OrderException(-666, "您已经参与过该活动!");
}
}
int count = this.getOrderDao().queryVoucherPayedOrder(communeOrderBean.getUid(),communeOrderBean.getActivityId());
if(count>=buyoucherActivity.getBuyLimitTimes()){
throw new OrderException(-666, "您已经超过该活动限制次数!");
}
}
......@@ -218,10 +213,11 @@ public class CommuneOrderService extends AbstractOrderService<CommuneOrderBean,
communeOrderBean.setLimitedEmoneyAmount(new BigDecimal(0));
communeOrderBean.setOnPayAmount(new BigDecimal(0));
//社员续费 add by caosy
ClientConfig clientConfig = clientConfigDao.getByType("buyVoucher_voucher_send");
String commune_voucher = clientConfig.getMessage();
JSONObject jsobj = JSONObject.parseObject(commune_voucher);
communeOrderBean.setOrderName(jsobj.getString("activeName"));
BuyVoucherActivity buyoucherActivity = buyVoucherActivityDao.findById(communeOrderBean.getActivityId());
if(buyoucherActivity==null){
throw new OrderException(-41, "没有对应的活动,请检查");
}
communeOrderBean.setOrderName(buyoucherActivity.getActivityName());
if (StringUtils.isEmpty(communeOrderBean.getPayMode())) {
communeOrderBean.setPayMode(ProductPaymentTypeEnum.PREPAY.getName());
}
......@@ -292,7 +288,7 @@ public class CommuneOrderService extends AbstractOrderService<CommuneOrderBean,
communeOrderMoney = communeOrderBean.getAmount();
}
try {
JSONObject json = WeiXinAtcion.weixinPlay(userExt.getMiniAppOpenId(), communeOrderMoney.multiply(new BigDecimal("100")).intValue(), order.getOrderNo()+"", voucherNotifyUrlForMiniApp,"buy_voucher");
JSONObject json = WeiXinAtcion.weixinPlay(userExt.getMiniAppOpenId(), communeOrderMoney.multiply(new BigDecimal("100")).intValue(), order.getOrderNo()+"", voucherNotifyUrlForMiniApp,"BUYVOUCHER");
return json;
} catch (Exception e) {
e.printStackTrace();
......@@ -302,6 +298,34 @@ public class CommuneOrderService extends AbstractOrderService<CommuneOrderBean,
return null;
}
public List<BuyVoucherActivityBean> buyVoucherActivityList(){
List<BuyVoucherActivityBean> list = new ArrayList<BuyVoucherActivityBean>();
BuyVoucherActivityQuery queryBean = new BuyVoucherActivityQuery();
queryBean.setValid(1);
queryBean.setPagerOffset(0);
PagedEntityBean<BuyVoucherActivity> page = buyVoucherActivityDao.queryList(queryBean);
for(BuyVoucherActivity activity:page.getResult()){
BuyVoucherActivityBean bean = new BuyVoucherActivityBean();
BeanConverter.copyProperties(bean, activity);
list.add(bean);
}
return list;
}
public BuyVoucherActivityBean getBuyVoucherActivityDetail(Integer id){
BuyVoucherActivityBean bean = new BuyVoucherActivityBean();
BeanConverter.copyProperties(bean, buyVoucherActivityDao.findById(id));
return bean;
}
public String getBuyVoucherActivityMessage(String orderNo){
Order order = this.getOrderDao().getOrderByOrderNo(Long.parseLong(orderNo));
CommuneOrderItem communeOrderItem = communeOrderItemDao.getByOrderId(order.getOrderId()).get(0);
Integer activityId = communeOrderItem.getActivityId();
return this.getBuyVoucherActivityDetail(activityId).getMessage();
}
@Override
protected void afterPlaceOrder(CommuneOrderBean abstractOrderBean, Integer orderId) {
}
......@@ -624,10 +648,4 @@ public class CommuneOrderService extends AbstractOrderService<CommuneOrderBean,
// TODO Auto-generated method stub
}
public ClientConfigDao getClientConfigDao() {
return clientConfigDao;
}
public void setClientConfigDao(ClientConfigDao clientConfigDao) {
this.clientConfigDao = clientConfigDao;
}
}
......@@ -484,23 +484,18 @@ public class EventActivityOrderService extends
if (intTotalInventory == null) {
throw new OrderException(-4, "没有找到对应的库存");
}
// 最多能分组的数量
int totalGroupNum = intTotalInventory / 4;
if (totalGroupNum * 4 < intTotalInventory) {
totalGroupNum++;
}
while (groupNum <= totalGroupNum) {
int existCustomerNum = eventCustomerInfoDao.queryCustomerNumInSameGroup(groupNum,
resourceId, priceDate);
if (existCustomerNum + customerInfoSize <= 4) {
return groupNum;
} else {
while(existCustomerNum + customerInfoSize > 4){
groupNum++;
existCustomerNum = eventCustomerInfoDao.queryCustomerNumInSameGroup(groupNum,
resourceId, priceDate);
}
return groupNum;
}
}
return 0;
}
private int calculateValidGroupNumForRealTimeTeeTime(
EventActivityOrderBean eventActivityOrderBean, Integer resourceId, Date priceDate) {
......
......@@ -34,6 +34,8 @@ import com.ctrip.fun.golf.domain.integral.UserMemberIntegralLog;
import com.ctrip.fun.golf.domain.order.Invoiceinfo;
import com.ctrip.fun.golf.domain.order.Order;
import com.ctrip.fun.golf.domain.order.OrderProcessLog;
import com.ctrip.fun.golf.domain.payment.AESUtil;
import com.ctrip.fun.golf.domain.payment.Configure;
import com.ctrip.fun.golf.domain.payment.PaymentResult;
import com.ctrip.fun.golf.domain.payment.WXUtil;
import com.ctrip.fun.golf.exceptions.OrderException;
......@@ -124,7 +126,6 @@ public abstract class AbstractNotifyService extends CorePaymentService {
logger.info("sign=" + notifyResponseBean.getSign());
return notifyResponseBean;
}
public String notifyForWeiXinPay(String xml) throws Exception{
Map<String,Object> notifyMap = WXUtil.doXMLParse(xml);
if(notifyMap.get("return_code").equals("SUCCESS")){
......@@ -165,8 +166,43 @@ public abstract class AbstractNotifyService extends CorePaymentService {
return null;
}
public String notifyForWeiXinRefound(String xml) throws Exception{
public String weiXinRefoundNotify(String xml) throws Exception{
logger.error(xml);
Map<String,Object> notifyMap = WXUtil.doXMLParse(xml);
if(notifyMap.get("return_code").equals("SUCCESS")){
Map<String,Object> reqInfoMap = WXUtil.doXMLParse(AESUtil.getRefundDecrypt(notifyMap.get("req_info").toString(), Configure.getKey()));
String orderNo = reqInfoMap.get("out_trade_no").toString();//商户订单号
Order order = this.orderDao.getAndLockOrderByOrderNo(Long.parseLong(orderNo));
BigDecimal bigDecimal = new BigDecimal(reqInfoMap.get("settlement_refund_fee").toString());
NotifyRequestBean notifyRequestBean = new NotifyRequestBean();
notifyRequestBean.setAmount(bigDecimal.divide(new BigDecimal("100")));
order.setProcessStatus(order.getProcessStatus()
| OrderStatusBitEnum.REFUNDED.getValue());
order.setOrderStatus("U");
order.setProcessStatus(order.getProcessStatus()
| OrderStatusBitEnum.UNSUBSCRIBED.getValue());
if (this.isAllRefund(notifyRequestBean, order)) {
order.setProcessStatus(order.getProcessStatus()
| OrderStatusBitEnum.ALL_UNSUBSCRIBED.getValue());
order.setProcessStatus(order.getProcessStatus()
| OrderStatusBitEnum.BARGAINED.getValue());
updateEventCustomersInvalid(order.getOrderId());
order.setOrderUserStatus(6);
} else {
order.setProcessStatus(order.getProcessStatus()
| OrderStatusBitEnum.PART_UNSUBSCRIBED.getValue());
order.setOrderUserStatus(6);
}
BigDecimal oldRefundAmount = BigDecimal.ZERO;
if (order.getRefundAmount() != null) {
oldRefundAmount = oldRefundAmount.add(order.getRefundAmount());
}
order.setRefundAmount(oldRefundAmount.add(notifyRequestBean.getAmount()));
this.doSuccessRefund(order);
}
return null;
}
......
......@@ -69,6 +69,8 @@ public abstract class AbstractPaymentService<T extends AbstractOrder> extends Co
private String queryPayStatusPath = null;
private String weiXinRefoundNotifyUrl = null;
private String merchantId = null;
private PaymentRequestDao paymentRequestDao = null;
......@@ -176,7 +178,7 @@ public abstract class AbstractPaymentService<T extends AbstractOrder> extends Co
Response<PayOrderOperateResponseBean> result = new Response<PayOrderOperateResponseBean>();
if("MP".equals(order.getPlatform())){
try {
WeiXinAtcion.wechatRefund(order.getOrderNo()+"", order.getPrePayAmount().multiply(new BigDecimal("100")).intValue(), paymentOperateBean.getAmount().multiply(new BigDecimal("100")).intValue(),"");
WeiXinAtcion.wechatRefund(order.getOrderNo()+"", order.getPrePayAmount().multiply(new BigDecimal("100")).intValue(), paymentOperateBean.getAmount().multiply(new BigDecimal("100")).intValue(),weiXinRefoundNotifyUrl);
PayOrderOperateResponseBean payBean = new PayOrderOperateResponseBean();
payBean.setResultCode(CorePaymentService.SUCCESS);
result.setBody(payBean);
......@@ -715,4 +717,12 @@ public abstract class AbstractPaymentService<T extends AbstractOrder> extends Co
this.paymentRequestDao = paymentRequestDao;
}
public String getWeiXinRefoundNotifyUrl() {
return weiXinRefoundNotifyUrl;
}
public void setWeiXinRefoundNotifyUrl(String weiXinRefoundNotifyUrl) {
this.weiXinRefoundNotifyUrl = weiXinRefoundNotifyUrl;
}
}
......@@ -4,14 +4,18 @@
package com.ctrip.fun.golf.service.payment;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import com.ctrip.fun.common.vo.order.OrderCategoryEnum;
import com.ctrip.fun.golf.dao.market.CommuneInviteActivityDao;
import com.ctrip.fun.golf.dao.order.CommuneOrderItemDao;
import com.ctrip.fun.golf.dao.product.BuyVoucherActivityDao;
import com.ctrip.fun.golf.domain.order.CommuneOrderItem;
import com.ctrip.fun.golf.domain.order.Order;
import com.ctrip.fun.golf.domain.payment.WXUtil;
import com.ctrip.fun.golf.domain.product.BuyVoucherActivity;
import com.ctrip.fun.golf.service.basic.OperationMessageService;
import com.ctrip.fun.golf.service.basic.VoucherService;
import com.ctrip.fun.golf.service.market.CommuneInviteActivityService;
......@@ -30,6 +34,9 @@ public class CommuneNotifyService extends AbstractNotifyService {
@Autowired
private VoucherService voucherService = null;
@Autowired
private BuyVoucherActivityDao buyVoucherActivityDao = null;
......@@ -78,6 +85,8 @@ public class CommuneNotifyService extends AbstractNotifyService {
String ordersSn = notifyMap.get("out_trade_no").toString();//商户订单号
//根据订单号查询订单,修改订单相关信息
Order order = this.getOrderDao().getOrderByOrderNo(Long.parseLong(ordersSn));
CommuneOrderItem communeOrderItem = communeOrderItemDao.getByOrderId(order.getOrderId()).get(0);
BuyVoucherActivity buyVoucherActivity = buyVoucherActivityDao.findById(communeOrderItem.getActivityId());
try {
this.getOrderDao().updateOrderStatusForMiniApps(Long.parseLong(ordersSn));
} catch (Exception e) {
......@@ -85,7 +94,7 @@ public class CommuneNotifyService extends AbstractNotifyService {
}
//执行发券
String uid = order.getUid();//下单人id
voucherService.sendVoucherForPlaceOrder(uid, order.getOrderId()+"", true, "buyVoucher_voucher_send");
voucherService.sendVoucherForPlaceOrderByConfig(uid, order.getOrderId()+"", true, buyVoucherActivity.getVoucherConfig());
}
}
return null;
......
......@@ -1054,9 +1054,9 @@ public class UserService {
userExt.setHandicap(23);
if (checkValidMobileNo(request.getMobilePhone())) {
try {
UserPhoneBean userPhoneBean = this.getCity(request.getMobilePhone());
userExt.setCity(userPhoneBean.getCity());
userExt.setProvince(userPhoneBean.getProvince());
//UserPhoneBean userPhoneBean = this.getCity(request.getMobilePhone());
userExt.setCity("其它");
userExt.setProvince("其它");
} catch (Exception e) {
logger.error(e.getMessage());
}
......@@ -1591,6 +1591,19 @@ public class UserService {
}
}
/**
* 通过密码重置token重置密码
*/
public void resetMiniOpenid(ChangePasswordBean changePasswordBean) {
UserToken userToken = this.userTokenDao.getUserTokenByToken(changePasswordBean.getToken(),TokenTypeEnum.ACCESS.getKey());
this.userTokenDao.delete(userToken);
UserExt userExt = this.userExtDao.getByUid(changePasswordBean.getUid());
userExt.setMiniAppOpenId(null);
userExt.setOpenId(null);
userExt.setUnionId(null);
this.userExtDao.update(userExt);
}
/**判断用户过期 add by caosy*/
private int updateUserIdentity(UserExt user) {
Integer vipGrade = user.getVipGrade();
......
......@@ -203,6 +203,8 @@
isolation="READ_COMMITTED" />
<tx:method name="notifyForWeiXinPay" propagation="REQUIRED" read-only="false"
isolation="READ_COMMITTED" />
<tx:method name="weiXinRefoundNotify" propagation="REQUIRED" read-only="false"
isolation="READ_COMMITTED" />
<tx:method name="SubmitOrderSVC" propagation="REQUIRED"
isolation="READ_COMMITTED" read-only="false" />
<tx:method name="deductFail" propagation="REQUIRED"
......@@ -321,6 +323,8 @@
read-only="false" />
<tx:method name="resetPwdByToken" propagation="REQUIRED"
read-only="false" />
<tx:method name="resetMiniOpenid" propagation="REQUIRED"
read-only="false" />
<tx:method name="notPayManualDeduct" propagation="REQUIRED"
read-only="false" />
<tx:method name="validateWeChatUser" propagation="REQUIRED"
......
......@@ -10,6 +10,7 @@ payment.rechargeBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/r
payment.communeBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/communeOrder
payment.communeBaseNotifyUrlForMiniApp=http://112.65.124.86:18081/fun-common-soa/notify/notifyForMiniApp
payment.voucherNotifyUrlForMiniApp=http://112.65.124.86:18081/fun-common-soa/notify/notifyForVoucherMiniApp
payment.weiXinRefoundNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/weiXinRefoundNotifyUrl
payment.vipmemberBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/vipmemberOrder
payment.eventActivityBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/eventActivityOrder
payment.eventActivityBaseNotifyUrlForWeiXinPay=http://112.65.124.86:18081/fun-common-soa/notify/eventActivityOrder/notifyForWeiXinPay
......
......@@ -10,6 +10,7 @@ payment.rechargeBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/r
payment.communeBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/communeOrder
payment.communeBaseNotifyUrlForMiniApp=http://112.65.124.86:18081/fun-common-soa/notify/notifyForMiniApp
payment.voucherNotifyUrlForMiniApp=http://112.65.124.86:18081/fun-common-soa/notify/notifyForVoucherMiniApp
payment.weiXinRefoundNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/weiXinRefoundNotifyUrl
payment.vipmemberBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/vipmemberOrder
payment.eventActivityBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/eventActivityOrder
payment.eventActivityBaseNotifyUrlForWeiXinPay=http://112.65.124.86:18081/fun-common-soa/notify/eventActivityOrder/notifyForWeiXinPay
......
......@@ -33,6 +33,7 @@
<mapping class="com.ctrip.fun.golf.domain.product.Course" />
<mapping class="com.ctrip.fun.golf.domain.product.CourseFairway" />
<mapping class="com.ctrip.fun.golf.domain.product.CourseProduct" />
<mapping class="com.ctrip.fun.golf.domain.product.BuyVoucherActivity" />
<mapping class="com.ctrip.fun.golf.domain.product.CourseResource" />
<mapping class="com.ctrip.fun.golf.domain.product.CourseZone" />
......
......@@ -198,7 +198,6 @@
<property name="voucherNotifyUrlForMiniApp" value="${payment.voucherNotifyUrlForMiniApp}"></property>
<property name="COMMUNE_AMOUNT" value="${communeAmount}"></property>
<property name="COMMUNE_AMOUNT2" value="${communeAmount2}"></property>
<property name="clientConfigDao" ref="clientConfigDao"></property>
</bean>
<bean name="vipmemberOrderService" class="com.ctrip.fun.golf.service.order.VipMemberOrderService" parent="abstractOrderService">
......
......@@ -22,6 +22,7 @@
<property name="publicKey" value="${payment.publicKey}"></property>
<property name="payOrderOperatePath" value="${payment.payOrderOperatePath}"></property>
<property name="queryPayStatusPath" value="${payment.queryPayStatusPath}"></property>
<property name="weiXinRefoundNotifyUrl" value="${payment.weiXinRefoundNotifyUrl}"></property>
</bean>
<bean name="CourseNotifyService" class="com.ctrip.fun.golf.service.payment.CourseNotifyService">
......
......@@ -17,6 +17,10 @@
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean name="buyVoucherActivityDao" class="com.ctrip.fun.golf.dao.product.BuyVoucherActivityDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean name="resourceTicketDao" class="com.ctrip.fun.golf.dao.product.ResourceTicketDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
......
......@@ -12,6 +12,7 @@ payment.rechargeBaseNotifyUrl=http\://api.iwanoutdoor.com/fun-common-soa/notify/
payment.communeBaseNotifyUrl=http\://api.iwanoutdoor.com/fun-common-soa/notify/communeOrder
payment.communeBaseNotifyUrlForMiniApp=http\://api.iwanoutdoor.com/fun-common-soa/notify/notifyForMiniApp
payment.voucherNotifyUrlForMiniApp=http\://api.iwanoutdoor.com/fun-common-soa/notify/notifyForVoucherMiniApp
payment.weiXinRefoundNotifyUrl=http\://api.iwanoutdoor.com/fun-common-soa/notify/weiXinRefoundNotifyUrl
payment.vipmemberBaseNotifyUrl=http\://api.iwanoutdoor.com/fun-common-soa/notify/vipmemberOrder
payment.eventActivityBaseNotifyUrl=http\://api.iwanoutdoor.com/fun-common-soa/notify/eventActivityOrder
payment.eventActivityBaseNotifyUrlForWeiXinPay=http\://api.iwanoutdoor.com/fun-common-soa/notify/eventActivityOrder/notifyForWeiXinPay
......
......@@ -10,6 +10,7 @@ payment.rechargeBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/r
payment.communeBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/communeOrder
payment.communeBaseNotifyUrlForMiniApp=http://112.65.124.86:18081/fun-common-soa/notify/notifyForMiniApp
payment.voucherNotifyUrlForMiniApp=http://112.65.124.86:18081/fun-common-soa/notify/notifyForVoucherMiniApp
payment.weiXinRefoundNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/weiXinRefoundNotifyUrl
payment.vipmemberBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/vipmemberOrder
payment.eventActivityBaseNotifyUrl=http://112.65.124.86:18081/fun-common-soa/notify/eventActivityOrder
payment.eventActivityBaseNotifyUrlForWeiXinPay=http://112.65.124.86:18081/fun-common-soa/notify/eventActivityOrder/notifyForWeiXinPay
......
......@@ -10,6 +10,7 @@ payment.rechargeBaseNotifyUrl=http://10.8.55.46:8080/fun-common-soa/notify/recha
payment.communeBaseNotifyUrl=http://10.8.55.46:8080/fun-common-soa/notify/communeOrder
payment.communeBaseNotifyUrlForMiniApp=http://10.8.55.46:8080/fun-common-soa/notify/notifyForMiniApp
payment.voucherNotifyUrlForMiniApp=http://10.8.55.46:8080/fun-common-soa/notify/notifyForVoucherMiniApp
payment.weiXinRefoundNotifyUrl=http://10.8.55.46:8080/fun-common-soa/notify/weiXinRefoundNotifyUrl
payment.vipmemberBaseNotifyUrl=http://10.8.55.46:8080/fun-common-soa/notify/vipmemberOrder
payment.eventActivityBaseNotifyUrl=http://10.8.55.46:8080/fun-common-soa/notify/eventActivityOrder
payment.eventActivityBaseNotifyUrlForWeiXinPay=http://10.8.55.46:8080/fun-common-soa/notify/eventActivityOrder/notifyForWeiXinPay
......
......@@ -16,20 +16,26 @@ import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.common.vo.market.EventGameBean;
import com.ctrip.fun.common.vo.market.EventGameGroupBean;
import com.ctrip.fun.common.vo.market.EventGamePlayerBean;
import com.ctrip.fun.common.vo.order.BuyVoucherActivityBean;
import com.ctrip.fun.common.vo.order.EventCustomerInfoBean;
import com.ctrip.fun.common.vo.order.EventCustomerInfoQuery;
import com.ctrip.fun.common.vo.order.OrderStatusBitEnum;
import com.ctrip.fun.common.vo.product.BuyVoucherActivityQuery;
import com.ctrip.fun.golf.dao.market.EventGameDao;
import com.ctrip.fun.golf.dao.market.EventGameGroupDao;
import com.ctrip.fun.golf.dao.market.EventGamePlayerDao;
import com.ctrip.fun.golf.dao.order.OrderDao;
import com.ctrip.fun.golf.dao.product.BuyVoucherActivityDao;
import com.ctrip.fun.golf.domain.market.EventGameGroup;
import com.ctrip.fun.golf.domain.order.Order;
import com.ctrip.fun.golf.domain.product.BuyVoucherActivity;
import com.ctrip.fun.golf.service.market.EventGameGroupService;
import com.ctrip.fun.golf.service.market.EventGamePlayerService;
import com.ctrip.fun.golf.service.market.EventGameService;
import com.ctrip.fun.golf.service.order.CommuneOrderService;
import com.ctrip.fun.golf.service.order.EventCustomerInfoService;
import com.ctrip.fun.golf.service.payment.EventActivityNotifyService;
import com.ctrip.fun.golf.vo.PagedEntityBean;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -51,6 +57,9 @@ public class UserOrderBehaviourStatisticsDaoTest {
@Autowired
private EventActivityNotifyService eventActivityNotifyService;
@Autowired
private CommuneOrderService communeOrderService;
public static void main(String[] args) {
int[] status = new int[]{23,100,20,276824087,19,108,268446996,0,276824083,293601303,16777239,268446999,12,3,96,268444944,4,268444947,16,276824067,99,276831511,5395,293608727,268447076,276835607,276829459,5399,16784663};
for(int sta:status){
......@@ -67,16 +76,11 @@ public class UserOrderBehaviourStatisticsDaoTest {
}
@Test
public void testOrderUpdate() throws Exception {
List<String> mobileNos = new ArrayList<String>();
mobileNos.add("15555555555");
mobileNos.add("18014006769");
DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
Date myDate2 = dateFormat2.parse("2018-09-24");
List<Order> list = orderDao.queryEventActivityWaittingDealOrders(myDate2, "15555555555", 104123, mobileNos);
System.out.println(list.size());
long list = orderDao.queryVoucherPayedOrder("15021268738",1);
System.out.println(list);
}
@Test
public void testListOrderUser() throws Exception {
String[] filenames = {"美兰湖分组表_1170_2018-04-04","协和分组_1902_2018-04-01","协和分组_1902_2018-04-03","协和分组_1902_2018-04-08"};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment