Commit e5e96737 authored by hanfeng's avatar hanfeng

Merge remote-tracking branch 'origin/dev' into dev

parents 657202fe a6afcfbc
......@@ -126,4 +126,5 @@ public abstract class BaseBiz<M extends Mapper<T>, T> {
}
}
......@@ -7,6 +7,9 @@ public class SystemConfig {
// 项目url
public static final String XXMP_URL = SystemProperty.getConfig("XXMP_URL");
// 视频url
public static final String VIDEO_URL = SystemProperty.getConfig("VIDEO_URL");
// token到期时间
// token到期时间
public static Integer TOKENOVERTIME = Integer.valueOf(SystemProperty.getConfig("TOKEN_OVER_TIME"));
// redis缓存时间
......
#项目url
#\u9879\u76EEurl
XXMP_URL=/image
#token到期时间
#\u89C6\u9891\u4FDD\u5B58\u6587\u4EF6
VIDEO_URL=/video
#token\u5230\u671F\u65F6\u95F4
TOKEN_OVER_TIME=604800
#itoken到期时间(6天)
#itoken\u5230\u671F\u65F6\u95F4(6\u5929)
REDIS_ITOKEN_TIME=51840
#redis有效期
#redis\u6709\u6548\u671F
REDIS_TOKEN_TIME=604800
#session有效期
#session\u6709\u6548\u671F
SESSION_TIME=3600
#默认头像
#\u9ED8\u8BA4\u5934\u50CF
USER_HEADER_URL_DEFAULT=https://xxtest.upyuns.com/image/app/default_%20avatar.png
#默认昵称
#\u9ED8\u8BA4\u6635\u79F0
USER_NIKENAME_DEFAULT=XX_
#短信机
#\u77ED\u4FE1\u673A
ACCESSKEYID=LTAInxMDwHQL8yg9
ACCESSKEYSECRET=OCKDEiwKGjePCZgPeWMEUFGwGbKYLA
TEMPLATECODE=SMS_170070101
SIGNNAME=滴房车
#微信支付配置
SIGNNAME=\u6EF4\u623F\u8F66
#\u5FAE\u4FE1\u652F\u4ED8\u914D\u7F6E
WINXIN_AppID=wx425608b69a34736f
WINXIN_PARTNER_KEY=xxfcXXDfangche74upyuns3AD4334533
WINXIN_PARTNER=1539689201
......@@ -31,15 +33,15 @@ APP_ID=wx9ed5e51251cf7c61
APP_PARTNER=1539689201
APP_PARTNER_KEY=xxfcXXDfangche74upyuns3AD4334533
APP_TRADE_TYPE=APP
#支付回调
#\u652F\u4ED8\u56DE\u8C03
weixinHost=xxtest.upyuns.com
#证书存放目录
#\u8BC1\u4E66\u5B58\u653E\u76EE\u5F55
APICLIENT_CERT=D:\\cert\\1514583081_20181017_cert.p12
#支付宝配置
#\u652F\u4ED8\u5B9D\u914D\u7F6E
ALIPAY_APPID=2019070965781964
ALIPAY_PID=2088531634846583
#支付宝公钥
#\u652F\u4ED8\u5B9D\u516C\u94A5
ALIPAY_PUBLIC_KEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj/EMaAD2iJP3I5M0g6pssDDe3RxF5I3ECM/Kz/btM0RiW2g5oRrHSjtGuos9l1QhQAY0SrVqa2eZdPKUB3ZqJdimQiXr3dbiMvG9UCs8vVUcrtCHCBjDllKQLiYzboxE6JLXyfII5tIXbFKiGyiEyXQnffUhQ9uGyT2EGWGecz6PLIjDdbwpxuzF2gIUzV3bPxb+0axejBxJ/3zKnWrsbyq2nvs8XrzrR2CEggNqgqsKzaacCL1yZjXzQRseSnCMtgSxR5W5afbdY0zqbUlLHUrUZ8ycCRC0ECuI9HyTbuqtdWHEZH7vIH44wEQWZPDRhMfMZvzmPUgpTWZLv5BtaQIDAQAB
ALIPAY_ACOUNT=xxfc810@163.com
ALIPAY_PRIVATE_KEY=MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0wXVGAameVSLlLrq7edrMuoabN16/bYJNosLmPlHltEhehKO1ak/oIFvlKGyKwsW+xXd8t27p5hpsHqzNisU/jLbwEi6t0U/RBMbx3ult9zNhsZqSdJxe4QINChudVM6FdE8ssaq19ABwiLisMxxck0IiXDmesGI6vUSNzLEvKyYWTUsVsW1HgYXVjXmi8mOiwuFsJtdALS/psWci3UlX80rYG9KGqSBWT0B0Nr8UcM1L7UEkOHUEf1uq4Ipl5rTzgqoRQN5uHbBu50b7welAL2MFA9D/Ecv+FOfMIiLBtm1/6zNtjo/mvwORtS64mJXCaAbY1Pxa1bqs274fAwWtAgMBAAECggEAOObZ2zL0yZI1jP477H68wUxKyZwRqKN5rKT7Q+4EbBJn4dFRk++mvgVJyIcEPF56T8bsCYfZU6qLUNQLRB1WYN4UTNj8dt14ie0+D7BDvclfFHcLmOU6wKeGtMIk1U94QAzQS9qWSfdJGCQCNrtUR1RYMmbkAK+4DJO+fAEfGiCr1oMQpsz0h6Jhwp/DDBXZEjPdrECOjx2w5ZVULyPxFui2NQ8IS3rTT5SQvOBAgn9dbgZ/FVVbs2x6SpnWyOCUREK0uaLXJgf0JoX1WW4bswZlYmd7qURPscwFVKdYRautimcmO0FOUue62aPSYfvJwx8tTZanQbbwfrr0XrisBQKBgQDyKPYDYZzgGL/G5H8CQZajKnqg7a5AAZXJQLKkF7kiEgOlB3b6OqK6CeKVGawfuNIshECmmKcZmqrsPV42xrZl458kiDyqJNHq2lgFs9kj9BFUDi11EZfDGah4piJo5tgc09Hj6eAmeKdmG7aTS0/954xOK7eBFdG1T6R1Rd9Y4wKBgQC/Fhd5Nw6XYAg4qBmzOnvc9YwEL+wdy0aontFAFzaQlgkYm+efhYyjMcjyj4aloJZzpTd6eKbZI57IzihJI+F8+b1qToQDu8A2BTPkiOyXRcNY3y0LTNx7/gae6a9oGFc+8ILGa41va7WKjuPd08aXpSSBI34u10wWRMP+70m8LwKBgQCLerRYtjyZhyfO84WEUyrkyG7hioU3MLKJvM4oXdGwohefUnFhJ6za4x6zKppNmzLTmUlzq7FzufaBI8fEXShp/3WGoUHv7k1KrIDOqAyF/OqOM6xTJdL3+StkcqyXJ3+K+yaF1AvbnNsuoP/ETzi/0kKqM9v6agrkF/9t3NUMaQKBgCpafS1y1Jscv/W+3KNrLRUWn8g1zwHzkl/Bg+POwVtexflcZQRol3l8iWuqAFApve84CYntwB2U1ZbwiuFbQJlwyVkMuhoRvVK76HqZFseYwOmr3dIJYT1iWplSdnx+GKhsqq/MGvc9SmnBriP20qe+BM9SzJ8ZPVYaO87/vrolAoGARD8/IeEzMCPfYr9zBkE5rBtiT7t6nZXmMc6GH2Vao9meDofN8vj/XEfTGovusUYTWyA2Enac0YKdK6f6f+NYBqGYqn5Ludgxeotzo9UoXd3Hnv1gMCRs4ehloVODkHj2qhkvqL2iuZLsNp/wMq/ZHpRUzT4bO5H2FQhH4SUElKI=
......
......@@ -56,6 +56,16 @@ public class DailyVehicleOrderStatistics extends DailyOrderStatistics {
@Column(name = "return_gmv")
private BigDecimal returnGmv;
// /**
// * 取消订单扣款总额
// */
// @Column(name = "penal_sum")
// private BigDecimal penalSum;
/**
* 违约总额
*/
......@@ -68,4 +78,5 @@ public class DailyVehicleOrderStatistics extends DailyOrderStatistics {
@Column(name = "total_expenditure")
private BigDecimal totalExpenditure;
}
package com.xxfc.platform.order.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
......@@ -8,12 +9,14 @@ import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.google.common.collect.Lists;
import com.google.gson.JsonObject;
import com.xxfc.platform.activity.feign.ActivityFeign;
......@@ -39,6 +42,7 @@ import com.xxfc.platform.universal.feign.MQSenderFeign;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.entity.BookRecordUpdateLog;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
......@@ -53,12 +57,10 @@ import org.joda.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.*;
import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant.*;
......@@ -72,7 +74,7 @@ import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
*/
@Service
@Slf4j
public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements UserRestInterface {
@Autowired
OrderMemberDetailBiz orderMemberDetailBiz;
......@@ -332,6 +334,10 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
dedDetailDTO.setStatusName(detailName);
}
/**
* 获取驾驶人驾照
* @param orderPageVo
*/
public void getUserLicense(OrderPageVO orderPageVo) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setOrderId(orderPageVo.getId());
......@@ -360,6 +366,10 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
orderPageVo.setOrderVehicleCrosstownDto(orderVehicleCrosstownDto);
}
/**
* 获取驾驶人信息
* @param orderPageVo
*/
public void getDriverInfo(OrderPageVO orderPageVo) {
List<VehicleUserLicense> vehicleUserLicenses = Lists.newArrayList();
String myDriverIds = orderPageVo.getOrderRentVehicleDetail().getMyDriverIds();
......@@ -387,7 +397,57 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
orderPageVo.setVehicleUserLicenses(vehicleUserLicenses);
}
public ObjectRestResponse save(OrderRentVehicleDetail orderRentVehicleDetail) {
if (orderRentVehicleDetail == null || orderRentVehicleDetail.getId() == null) {
return ObjectRestResponse.paramIsEmpty();
}
log.info("更新订单还车地点》》》 orderRentVehicleDetail = {}", orderRentVehicleDetail.toString());
UserDTO userDTO = getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, ResultCode.getMsg(ResultCode.RSTOKEN_EXPIRED_CODE));
}
StringBuilder stringBuilder = new StringBuilder();
OrderRentVehicleDetail oldValue = orderRentVehicleBiz.selectById(orderRentVehicleDetail.getId());
if(oldValue == null) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
stringBuilder.append("修改订单和预定记录还车公司成功, 订单ID:");
stringBuilder.append( oldValue.getOrderId());
stringBuilder.append("; 原还车公司ID: ");
stringBuilder.append(oldValue.getEndCompanyId());
stringBuilder.append("; 更新后还车公司ID: ");
stringBuilder.append(orderRentVehicleDetail.getEndCompanyId());
stringBuilder.append("; 操作人ID:");
stringBuilder.append(userDTO.getId());
stringBuilder.append("; 操作人账号:");
stringBuilder.append(userDTO.getUsername());
//添加修改记录实体
BookRecordUpdateLog bookRecordUpdateLog = new BookRecordUpdateLog();
bookRecordUpdateLog.setBookRecordId(oldValue.getBookRecordId());
bookRecordUpdateLog.setOldRetCompanyId(oldValue.getEndCompanyId());
bookRecordUpdateLog.setNewRetCompanyId(orderRentVehicleDetail.getEndCompanyId());
bookRecordUpdateLog.setOperaterId(userDTO.getId());
bookRecordUpdateLog.setOperaterName(userDTO.getName());
bookRecordUpdateLog.setOrderId(oldValue.getOrderId());
bookRecordUpdateLog.setCreateTime(new Date());
BeanUtil.copyProperties(orderRentVehicleDetail, oldValue, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
oldValue.setEndCompanyId(orderRentVehicleDetail.getEndCompanyId());
orderRentVehicleBiz.updateSelectiveByIdRe(oldValue);
ObjectRestResponse objectRestResponse = vehicleFeign.update(bookRecordUpdateLog);
if (objectRestResponse!= null && objectRestResponse.getRel()) {
log.info(stringBuilder.toString());
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createFailedResult(1355, "修改失败!");
}
/**
* 获取订单详情,包含驾驶人信息,违约金等信息
* @param no
* @return
*/
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if (orderPageVo == null) {
......@@ -641,6 +701,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
return query;
}
@Override
public UserFeign getUserFeign() {
return userFeign;
}
/**
* 订单查询类
*/
......
......@@ -384,6 +384,12 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString();
refundDesc += handleDedRefundDesc;
refundDesc += ")";
//还车扣除款 剩余的 钱,再减去违章预备金
oad.getDeductions().add(
initDeduction(illegalReserve, "违章保证金", DeductionTypeEnum.VIOLATE_TRAFFIC_KEEP, OrderAccountDeduction.ORIGIN_DEPOSIT)
);
refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), AccountTypeEnum.OUT_PART_DEPOSIT, oad);
//修改押金退还记录状态
......@@ -417,11 +423,6 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
updateBaseOrder.setExtraAmount(inProgressVO.getExtraAmount());
baseOrderBiz.updateSelectiveByIdReT(updateBaseOrder, Boolean.TRUE);
//还车扣除款 剩余的 钱,再减去违章预备金
oad.getDeductions().add(
initDeduction(illegalReserve, "违章保证金", DeductionTypeEnum.VIOLATE_TRAFFIC_KEEP, OrderAccountDeduction.ORIGIN_DEPOSIT)
);
//生成额外的费用明细
csv.setConsumeAmount(inProgressVO.getConsumeAmount());
csv.setModelAmount(orderItem.getUnitPrice());
......
......@@ -172,7 +172,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
OrderRentVehicleDetail orderRentVehicleDetail = orderRentVehicleBiz.selectById(baseOrder.getDetailId());
if (orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.DEPARTURE.getCode()) {
boolean flag = getTodayTime(orderRentVehicleDetail.getEndTime());
boolean flag = getTodayTime(orderRentVehicleDetail.getStartTime());
if (!flag) {
return ObjectRestResponse.createFailedResult(3502, "今日不是交车日期");
}
......@@ -433,9 +433,20 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
public boolean getTodayTime(Long time) {
long current = System.currentTimeMillis();
if (current <= (time / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset()) + 24 * 60 * 60 * 1000 - 1) {
if (current <= (getDayStart(time) + 24 * 60 * 60 * 1000 - 1) && current >= getDayStart(time)) {
return true;
}
return false;
}
public static Long getDayStart(Long time) {
long current = time;
long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
return zero;
}
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer("We Are Happy");
}
}
......@@ -3,6 +3,7 @@ package com.xxfc.platform.order.biz.inner;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
......@@ -426,7 +427,8 @@ public class OrderMsgBiz {
setAccountType(AccountTypeEnum.OUT_PART_DEPOSIT.getCode());
}});
OrderAccountDetail oad = BeanUtil.toBean(orderAccount.getAccountDetail(), OrderAccountDetail.class);
OrderAccountDetail oad = JSONUtil.toBean(orderAccount.getAccountDetail(), OrderAccountDetail.class);
//BeanUtil.toBean(orderAccount.getAccountDetail(), OrderAccountDetail.class);
OrderAccountDeduction trafficDeduction = new OrderAccountDeduction() {{
setAmount(BigDecimal.ZERO);
}};
......
......@@ -359,6 +359,13 @@ public class BackStageOrderController extends CommonBaseController implements Us
return ObjectRestResponse.succ();
}
@PostMapping("/updateEndCompany")
@ResponseBody
public ObjectRestResponse updateEndCompany(@RequestBody OrderRentVehicleDetail orderRentVehicleDetail) {
return baseOrderBiz.save(orderRentVehicleDetail);
}
@Data
public static class ChangeVehicleDTO {
String no;
......
......@@ -53,11 +53,11 @@ public class User {
@ApiModelProperty("性别")
private String sex;
@Column(name = "group")
@Column(name = "'group'")
@ApiModelProperty("分组")
private Integer group;
@Column(name = "status")
@Column(name = "'status'")
@ApiModelProperty("状态")
private Integer status;
......@@ -96,12 +96,12 @@ public class User {
@Column(name = "createtime")
@ApiModelProperty("创建时间")
private Integer createtime;
private Long createtime;
@Column(name = "lastjointime")
@ApiModelProperty("待定")
private Integer lastjointime;
private Long lastjointime;
@Column(name = "had_luru")
@ApiModelProperty("待定")
......
/**
* Copyright (c) 2011-2014, James Zhan 詹波 (jfinal@126.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.xxfc.platform.summit.model;
import java.io.Serializable;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/**
* 封装 access_token
*/
public class AccessToken implements Serializable {
private static final long serialVersionUID = -822464425433824314L;
private String access_token; // 正确获取到 access_token 时有值
private Integer expires_in; // 正确获取到 access_token 时有值
private Long expiredTime; // 正确获取到 access_token 时有值,存放过期时间
private String json;
@SuppressWarnings("unchecked")
public AccessToken(String jsonStr) {
this.json = jsonStr;
try {
JSONObject temp =JSON.parseObject(jsonStr);
access_token = temp.getString("access_token");
expires_in = temp.getInteger("expires_in");
if (expires_in != null){
expiredTime = System.currentTimeMillis() + ((expires_in -5) * 1000);
System.out.println("----expiredTime==="+expiredTime);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public AccessToken(String json,String access_token,Integer expires_in,Long expiredTime) {
this.json = json;
this.access_token = access_token;
this.expires_in = expires_in;
this.expiredTime=expiredTime;
}
public String getJson() {
return json;
}
public boolean isAvailable() {
if (expiredTime < System.currentTimeMillis())
return false;
return access_token != null;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public void setExpires_in(Integer expires_in) {
this.expires_in = expires_in;
}
public void setExpiredTime(Long expiredTime) {
this.expiredTime = expiredTime;
}
public void setJson(String json) {
this.json = json;
}
private Integer getInt(Map<String, Object> temp, String key) {
Number number = (Number) temp.get(key);
return number == null ? null : number.intValue();
}
public String getAccessToken() {
return access_token;
}
public Integer getExpiresIn() {
return expires_in;
}
public Long getExpiredTime() {
return expiredTime;
}
}
package com.xxfc.platform.summit.model;
import java.io.Serializable;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/**
* JsTicket返回封装
*/
public class JsTicket implements Serializable {
private static final long serialVersionUID = 6600179487477942329L;
private String ticket; // 正确获取到 ticket 时有值
private Integer expires_in; // 正确获取到 access_token 时有值
private Long expiredTime; // 正确获取到 ticket 时有值,存放过期时间
public JsTicket()
{
}
public JsTicket(String jsonStr) {
try {
JSONObject temp = JSON.parseObject(jsonStr);
ticket = temp.getString("ticket");
expires_in = temp.getInteger("expires_in");
if (expires_in != null)
expiredTime = System.currentTimeMillis() + ((expires_in - 5) * 1000);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private Integer getInt(Map<String, Object> temp, String key) {
Number number = (Number) temp.get(key);
return number == null ? null : number.intValue();
}
public boolean isAvailable() {
if (expiredTime == null)
return false;
if (expiredTime < System.currentTimeMillis())
return false;
return ticket != null;
}
public String getTicket() {
return ticket;
}
public Integer getExpiresIn() {
return expires_in;
}
public Integer getExpires_in() {
return expires_in;
}
public void setExpires_in(Integer expires_in) {
this.expires_in = expires_in;
}
public Long getExpiredTime() {
return expiredTime;
}
public void setExpiredTime(Long expiredTime) {
this.expiredTime = expiredTime;
}
public void setTicket(String ticket) {
this.ticket = ticket;
}
@Override
public String toString() {
return "JsTicket [ticket=" + ticket + ", expires_in=" + expires_in + ", expiredTime=" + expiredTime + "]";
}
}
package com.xxfc.platform.summit.pojo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import java.util.HashMap;
import java.util.Map;
@Data
public class ActivityBmExcel {
private final Map<Integer,String> map= new HashMap(){{
put(0,"否");
put(1,"是");
}};
@Column(name = "name")
@ApiModelProperty("报名人姓名")
private String name;
@Column(name = "phone")
@ApiModelProperty("报名人电话")
private String phone;
@Column(name = "id_number")
@ApiModelProperty("身份证号")
private String idNumber;
@Column(name = "inviter")
@ApiModelProperty("邀请人")
private String inviter;
@Column(name = "qd_status")
@ApiModelProperty("0-未签到;1-已签到")
private String qdStatus;
public void setQdStatus(Integer qdStatus) {
this.qdStatus = map.get(qdStatus);
}
}
......@@ -10,6 +10,7 @@ public class ActivityQuery extends Query {
private String title;
private Long startTime;
private Integer status;
/**
* 1.管理后台,2.h5页面
*/
......
package com.xxfc.platform.summit.pojo;
public enum SummitStatus {
ENROLL("报名中",1),IN_PROGRESS("进行中",2),End("已结束",3);
private String msg;
private Integer code;
SummitStatus(String msg, Integer code) {
this.msg = msg;
this.code = code;
}
public String getMsg() {
return msg;
}
public Integer getCode() {
return code;
}
}
package com.xxfc.platform.summit.util;
import java.security.MessageDigest;
public class Sha1 {
//Sha1签名
public static String getSha1(String str) {
if (str == null || str.length() == 0) {
return null;
}
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
try {
MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
mdTemp.update(str.getBytes("GBK"));
byte[] md = mdTemp.digest();
int j = md.length;
char buf[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
buf[k++] = hexDigits[byte0 & 0xf];
}
return new String(buf);
} catch (Exception e) {
return null;
}
}
}
......@@ -3,19 +3,23 @@ package com.xxfc.platform.summit.biz;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.mapper.ActivityMapper;
import com.xxfc.platform.summit.pojo.AccessType;
import com.xxfc.platform.summit.pojo.ActivityQuery;
import com.xxfc.platform.summit.pojo.SummitStatus;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import tk.mybatis.mapper.entity.Example;
import javax.xml.crypto.Data;
import java.util.Date;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
......@@ -23,6 +27,9 @@ import java.util.List;
@Service
public class ActivityBiz extends BaseBiz<ActivityMapper, Activity> {
@Value("${wx.qdLimts}")
private BigDecimal qdLimts;
/**
* 未删除
*/
......@@ -35,32 +42,43 @@ public class ActivityBiz extends BaseBiz<ActivityMapper, Activity> {
public Object getList(ActivityQuery query) {
Example exa = new Example(Activity.class);
Example.Criteria criteria = exa.createCriteria();
criteria.andEqualTo("isDel", NOT_DELETE);
if (StringUtils.isNotBlank(query.getTitle())) {
criteria.andLike("title", String.format("%%%s%%", query.getTitle().trim()));
}
if (query.getStartTime() != null) {
criteria.andLike("startTime", query.getStartTime()/(1000*60*60)+"%");
}
if (query.getStatus() != null) {
criteria.andEqualTo("status", query.getStatus());
}
if (query.getType() != null && AccessType.PUBLIC.getCode().equals(query.getType())) {
criteria.andEqualTo("isPublish", PUBLISHED);
}
exa.orderBy("rank").asc().orderBy("startTime").desc();
// if (AccessType.PUBLIC.getCode().equals(query.getType())) {
//// return mapper.selectByExample(exa);
//// }
// Example exa = new Example(Activity.class);
// Example.Criteria criteria = exa.createCriteria();
// criteria.andEqualTo("isDel", NOT_DELETE);
// if (StringUtils.isNotBlank(query.getTitle())) {
// criteria.andLike("title", String.format("%%%s%%", query.getTitle().trim()));
// }
// if (query.getStartTime() != null) {
// criteria.andLike("startTime", query.getStartTime() / (1000 * 60 * 60) + "%");
// }
// if (query.getStatus() != null) {
// criteria.andEqualTo("status", query.getStatus());
// switch (query.getStatus()) {
// case 1:
//
// criteria.orLessThan("startTime", System.currentTimeMillis());
// break;
// case 2:
// criteria.orBetween("startTime", System.currentTimeMillis(),"endTime");
// break;
// case 3:
// criteria.orGreaterThan("endTime", System.currentTimeMillis());
// break;
// default:
// throw new IllegalStateException("Unexpected value: " + query.getStatus());
// }
// }
//
// if (query.getType() != null && AccessType.PUBLIC.getCode().equals(query.getType())) {
// criteria.andEqualTo("isPublish", PUBLISHED);
// }
// exa.orderBy("rank").asc().orderBy("startTime").desc();
PageHelper.startPage(query.getPage(), query.getLimit());
List<Activity> activities = mapper.selectByExample(exa);
List<Activity> activities = mapper.selectByQuery (query);
return new PageInfo<Activity>(activities);
}
@Transactional(rollbackFor = Exception.class)
......@@ -105,4 +123,24 @@ public class ActivityBiz extends BaseBiz<ActivityMapper, Activity> {
activity.setUpdTime(System.currentTimeMillis());
mapper.updateByPrimaryKeySelective(activity);
}
public ObjectRestResponse checkQdlimits(Double latitude, Double longitude, Integer id){
Map<String, Object> map= initParam(latitude,longitude,id);
BigDecimal dinate=mapper.getdinate(map);
int status=0;
if (qdLimts.compareTo(dinate)>=0){
status=1;
}
return ObjectRestResponse.succ(status);
}
private Map<String, Object> initParam( Double latitude, Double longitude, Integer id) {
Map<String,Object> params = new HashMap<String,Object>();
params.put("latitude",latitude);
params.put("longitude",longitude);
params.put("id",id);
return params;
}
}
package com.xxfc.platform.summit.biz;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.constant.RestCode;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.google.common.collect.Lists;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.mapper.ActivityBmMapper;;
import com.xxfc.platform.summit.pojo.ActivityBmExcel;
import com.xxfc.platform.summit.pojo.ActivityBmQuery;
import com.xxfc.platform.summit.vo.MeepoActivityVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest;
import java.util.LinkedList;
import java.util.List;
/**
......@@ -47,6 +50,7 @@ public class ActivityBmBiz extends BaseBiz<ActivityBmMapper, ActivityBm> {
//用户报名
public ObjectRestResponse userBmOrQd(ActivityBm activityBm,Integer meepoUserId)throws Exception{
......@@ -107,9 +111,7 @@ public class ActivityBmBiz extends BaseBiz<ActivityBmMapper, ActivityBm> {
if (StringUtils.isBlank(json)){
return null;
}
JSONObject jsonObject= JSONObject.parseObject(json);
BeanUtils.copyProperties(jsonObject,bm);
return bm;
return JSON.parseObject(json,ActivityBm.class);
}
public ActivityBm checkUserBm(Integer meepoUserId,Integer activityId ){
......@@ -159,20 +161,29 @@ public class ActivityBmBiz extends BaseBiz<ActivityBmMapper, ActivityBm> {
ObjectRestResponse restResponse=userBmOrQd(activityBm,userId);
if (restResponse.getStatus()==RestCode.SUCCESS.getStatus()){
log.info("-----userBmByKey---key已存在去报名/签到----报名/签到成功");
if (activityBm.getBmStatus()==1){
if (activityBm.getBmStatus()!=null&&activityBm.getBmStatus()==1){
jsonObject.put("isbm",1);
jsonObject.put("bm_status",1);
}else if (activityBm.getQdStatus()==1){
jsonObject.put("bmStatus",1);
}else if (activityBm.getQdStatus()!=null&&activityBm.getQdStatus()==1){
jsonObject.put("isqd",1);
jsonObject.put("qd_status",1);
jsonObject.put("qdStatus",1);
}
}else {
}else if (restResponse.getStatus()==ResultCode.EXIST_CODE){
log.info("-----userBmByKey---key已存在已报名/签到----");
if (activityBm.getBmStatus()!=null&&activityBm.getBmStatus()==1){
jsonObject.put("isbm",1);
}else if (activityBm.getQdStatus()!=null&&activityBm.getQdStatus()==1){
jsonObject.put("isqd",1);
}
jsonObject.put("value",activityBm);
} else {
log.info("-----userBmByKey---key已存在去报名/签到----报名/签到失败");
if (activityBm.getBmStatus()==1){
jsonObject.put("bm_status",2);
}else if (activityBm.getQdStatus()==1){
jsonObject.put("qd_status",2);
if (activityBm.getBmStatus()!=null&&activityBm.getBmStatus()==1){
jsonObject.put("bmStatus",2);
}else if (activityBm.getQdStatus()!=null&&activityBm.getQdStatus()==1){
jsonObject.put("qdStatus",2);
}
jsonObject.put("value",activityBm);
}
summbitRedisTemplate.delete(key);
}
......@@ -186,6 +197,7 @@ public class ActivityBmBiz extends BaseBiz<ActivityBmMapper, ActivityBm> {
//获取峰会活动详情
public ObjectRestResponse getActivityById(Integer activityId,String key,HttpServletRequest request){
log.info("--getActivityById---activityId==="+activityId+"----key===="+key);
if (activityId==0||activityId==null){
return ObjectRestResponse.createFailedResult(ResultCode.NOTEXIST_CODE,"参数为空");
}
......@@ -231,7 +243,8 @@ public class ActivityBmBiz extends BaseBiz<ActivityBmMapper, ActivityBm> {
Example exa = new Example(ActivityBm.class);
Example.Criteria criteria = exa.createCriteria();
if (StringUtils.isNotBlank(query.getInviter())) {
criteria.andEqualTo("inviter",String.format("%%%s%%",query.getInviter().trim()));
String format = String.format("%%%s%%", query.getInviter().trim());
criteria.andLike("inviter", format);
}
if (StringUtils.isNotBlank(query.getName())) {
......@@ -251,4 +264,47 @@ public class ActivityBmBiz extends BaseBiz<ActivityBmMapper, ActivityBm> {
public ActivityBm userBm(ActivityBm activityBm, Integer id) {
return null;
}
public List<ActivityBmExcel> excel(ActivityBmQuery query) throws Exception {
PageInfo<ActivityBm> pageInfo = list(query);
LinkedList<ActivityBmExcel> activityBmExcels = Lists.newLinkedList();
List<ActivityBm> list = pageInfo.getList();
for (ActivityBm activityBm : list) {
ActivityBmExcel activityBmExcel = new ActivityBmExcel();
BeanUtilsBean.getInstance().copyProperties(activityBmExcel,activityBm);
activityBmExcels.add(activityBmExcel);
}
return activityBmExcels;
}
public ObjectRestResponse checkSubscribe(HttpServletRequest request){
int subscribe=-1;
User user=userBiz.getSession(request);
if (user!=null&&StringUtils.isNotBlank(user.getOpenId())){
subscribe=userBiz.checkSubscribe(user.getOpenId());
}
return ObjectRestResponse.succ(subscribe);
}
//获取用户信息
public ObjectRestResponse getUserInfo(Integer parentId,HttpServletRequest request){
JSONObject obj =new JSONObject();
obj.put("pId",0);
obj.put("name","");
User user=userBiz.getSession(request);
if (user!=null){
obj.put("pId",user.getId());
obj.put("name",user.getNickName());
}
if (parentId!=null&&parentId>0){
user=userBiz.selectById(parentId);
if (user!=null){
obj.put("name",user.getNickName());
}
}
return ObjectRestResponse.succ(obj);
}
}
......@@ -52,7 +52,9 @@ public class MeepoUserQdBiz extends BaseBiz<MeepoUserQdMapper, MeepoUserQd> {
meepoUserQd.setWeId(weId);
meepoUserQd.setCreateTime(System.currentTimeMillis()/1000L);
insertSelective(meepoUserQd);
user.setQdStatus(1);
userBiz.updateSelectiveById(user);
log.info("----签到成功---meepoUserId==="+meepoUserId);
}
......
......@@ -2,6 +2,7 @@ package com.xxfc.platform.summit.biz;
import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
......@@ -80,21 +81,24 @@ public class UserBiz extends BaseBiz<UserMapper, User> {
userId=uses.get(0).getId();
user.setId(userId);
}else {
Long time=System.currentTimeMillis()/1000L;
user.setWeId(weId);
user.setRId(rId);
user.setCreatetime(time);
user.setLastjointime(time);
insertSelective(user);
userId=user.getId();
}
return userId;
}
public void authUser(String code,String key, HttpServletRequest request){
public void authUser(String code,String key,Integer activityId, HttpServletRequest request){
if (StringUtils.isBlank(code)){
log.info("----code为空---");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("code为空"));
}
String openid = null;
String access_token = null;
String openid = "oXDd91N8Rwijd3gscAND9TO77a2I";
/*String access_token = null;
try {
JSONObject jsonData = weixinService.getAccessToken(code);
openid = jsonData.getString("openid");
......@@ -112,29 +116,31 @@ public class UserBiz extends BaseBiz<UserMapper, User> {
e.printStackTrace();
log.info("网络异常===" + e.getMessage());
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("网络异常"));
}
}*/
try {
// 获取微信用户基本信息
JSONObject userinfo_json = weixinService.getUserInfo(access_token,openid);
/* JSONObject userinfo_json = weixinService.getUserInfo(access_token,openid);
if (userinfo_json == null || StringUtils.isNotBlank(userinfo_json.getString("errcode"))) {
log.info("调用微信用户基本信息接口失败");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("调用微信用户基本信息接口失败"));
}
log.info("微信用户基本信息---user===" +userinfo_json.toJSONString());
log.info("微信用户基本信息---user===" +userinfo_json.toJSONString());*/
if (activityId==null||activityId==0){
ActivityBm activityBm=activityBmBiz.userInfo(key);
if (activityBm==null){
log.info("redis的报名信息为空");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("redis的报名信息为空"));
}
Integer activityId=activityBm.getActivityId();
activityId=activityBm.getActivityId();
}
if (activityId==null||activityId==0){
log.info("redis的报名信息activityId---为空");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("redis的报名信息activityId---为空"));
}
User userInfo=new User();
String nickName = userinfo_json.getString("nickname");
String headimgurl = userinfo_json.getString("headimgurl");
String sex = userinfo_json.getString("sex");
String nickName = "小雨";//userinfo_json.getString("nickname");
String headimgurl = "http://thirdwx.qlogo.cn/mmopen/4eFHvhmOX6XuiaG6ib7wxkLa8AwMLFIbW9BSJ7EmwC3kRMUdgCrobdRUbhjMXbkY7aBc2CazjXFJiap5ianMH6yQnH2UQ4TfkXJw/132";//userinfo_json.getString("headimgurl");
String sex ="2"; //userinfo_json.getString("sex");
if (StringUtils.isBlank(sex)){
sex="0";
}
......@@ -166,10 +172,8 @@ public class UserBiz extends BaseBiz<UserMapper, User> {
if (StringUtils.isBlank(frontSessionValue1)) {
return null;
}
JSONObject jsonObject=JSONObject.parseObject(frontSessionValue1);
User user=new User();
BeanUtils.copyProperties(jsonObject,user);
return user;
frontSessionValue1 =new String(Base64.decode(frontSessionValue1), "utf-8");
return JSON.parseObject(frontSessionValue1,User.class);
}catch (Exception e){
e.printStackTrace();
return null;
......@@ -189,6 +193,20 @@ public class UserBiz extends BaseBiz<UserMapper, User> {
return null;
}
//判断用户是否关注过
public int checkSubscribe(String openId){
JSONObject userinfo_json=weixinService.getBaseUserInfo(openId);
int subscribe=0;
if (userinfo_json == null || StringUtils.isNotBlank(userinfo_json.getString("errcode"))) {
log.info("调用获取用户基本信息失败");
return subscribe;
}
subscribe=userinfo_json.getInteger("subscribe");
return subscribe;
}
......
package com.xxfc.platform.summit.controller;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.pojo.ActivityBmExcel;
import com.xxfc.platform.summit.pojo.ActivityBmQuery;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @author Administrator
*/
@RestController
@RequestMapping("/activityBm")
public class ActivityBmController extends BaseController<ActivityBmBiz,ActivityBm> {
@Api(tags = {"峰会报名信息"})
public class ActivityBmController extends BaseController<ActivityBmBiz, ActivityBm> {
@Autowired
HttpServletResponse response;
@Autowired
UserBiz userBiz;
@PostMapping("/add")
public ObjectRestResponse bm(@RequestBody ActivityBm activityBm, HttpServletRequest request){
User user=userBiz.getSession(request);
public ObjectRestResponse bm(@RequestBody ActivityBm activityBm, HttpServletRequest request) {
User user = userBiz.getSession(request);
try {
return ObjectRestResponse.succ(baseBiz.userBm(activityBm,user.getId()));
}catch (Exception e){
return ObjectRestResponse.succ(baseBiz.userBm(activityBm, user.getId()));
} catch (Exception e) {
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
}
......@@ -39,9 +50,37 @@ public class ActivityBmController extends BaseController<ActivityBmBiz,ActivityB
@PostMapping("/list")
public ObjectRestResponse getList( @RequestBody ActivityBmQuery query ){
public ObjectRestResponse getList(@RequestBody ActivityBmQuery query) {
return ObjectRestResponse.succ(baseBiz.list(query));
}
@PostMapping("/excel")
@ApiOperation("下载报名信息excel表")
public void getExcel(@RequestBody ActivityBmQuery query) throws Exception {
List<ActivityBmExcel> rows = baseBiz.excel(query);
// 通过工具类创建writer,默认创建xls格式
ExcelWriter writer = ExcelUtil.getWriter();
writer.addHeaderAlias("name", "姓名");
writer.addHeaderAlias("phone", "电话");
writer.addHeaderAlias("idNumber", "身份证号");
writer.addHeaderAlias("inviter", "邀请人");
writer.addHeaderAlias("qdStatus", "是否签到");
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(rows, true);
//out为OutputStream,需要写出到的目标流
//response为HttpServletResponse对象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition", "attachment;filename=nameList.xls");
ServletOutputStream out = response.getOutputStream();
writer.flush(out, true);
// 关闭writer,释放内存
writer.close();
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
}
......@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/activityShow")
public class ActivityShowController extends BaseController<ActivityShowBiz, ActivityShow> {
@GetMapping("/one/{activityId}")
@GetMapping("/app/unauth/one/{activityId}")
public ObjectRestResponse getOne(@PathVariable Integer activityId){
return ObjectRestResponse.succ(baseBiz.getOne(activityId));
}
......
......@@ -5,6 +5,7 @@ import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBiz;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.entity.ActivityBm;
......@@ -27,6 +28,9 @@ public class AuthActivityController extends BaseController<ActivityBmBiz,Activit
@Autowired
UserBiz userBiz;
@Autowired
private ActivityBmBiz activityBmBiz;
@PostMapping("app/unauth/bm")
public ObjectRestResponse bm(@RequestBody ActivityBm activityBm, HttpServletRequest request){
......@@ -52,5 +56,15 @@ public class AuthActivityController extends BaseController<ActivityBmBiz,Activit
}
@GetMapping("app/unauth/subscribe")
public ObjectRestResponse subscribe(HttpServletRequest request){
return activityBmBiz.checkSubscribe(request);
}
@GetMapping("app/unauth/userInfo")
public ObjectRestResponse userInfo(Integer pId,HttpServletRequest request){
return activityBmBiz.getUserInfo(pId,request);
}
}
......@@ -7,7 +7,6 @@ import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBiz;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.pojo.ActivityQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -26,6 +25,9 @@ public class FrontActivityController extends BaseController<ActivityBiz, Activit
@Autowired
private ActivityBmBiz activityBmBiz;
@Autowired
private ActivityBiz activityBiz;
@GetMapping("app/unauth/info")
public ObjectRestResponse info(
......@@ -36,6 +38,19 @@ public class FrontActivityController extends BaseController<ActivityBiz, Activit
return activityBmBiz.getActivityById(activityId,key,request);
}
@GetMapping("app/unauth/qdLimts")
public ObjectRestResponse qdLimts(
@RequestParam(value = "activityId",defaultValue = "0")Integer activityId,
@RequestParam(value = "latitude", required = false) Double latitude,
@RequestParam(value = "longitude", required = false) Double longitude){
return activityBiz.checkQdlimits(latitude,longitude,activityId);
}
......
package com.xxfc.platform.summit.controller;
import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.constant.RedisKey;
import com.xxfc.platform.summit.service.WXjsService;
import com.xxfc.platform.summit.service.WeixinService;
import com.xxfc.platform.summit.vo.UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
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.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* @author Administrator
......@@ -30,7 +26,6 @@ import javax.servlet.http.HttpSession;
public class WeixinController {
public static final String WECHAT_AUTOLOGIN_CALLBACKURL_KEY = "callback";
public static final String WECHAT_REDIS_KEY = "key";
@Autowired
WeixinService weixinService;
......@@ -41,25 +36,29 @@ public class WeixinController {
@Autowired
ActivityBmBiz activityBmBiz;
public static final String frontSessionKey = "frontWeixKey";
@Autowired
WXjsService wXjsService;
@Value("${wx.url}")
private String url;
;
@RequestMapping(value ="/app/unauth/wxLogin",method = RequestMethod.GET)
@IgnoreUserToken
public String index(@RequestParam(value = "redirec_url")String redirec_url,
@RequestParam(value = "key")String key){
log.info("-----微信wxLogin---redirec_url=="+redirec_url);
public String wxLogin(@RequestParam(value = "callback",defaultValue = "")String redirec_url){
if (StringUtils.isBlank(redirec_url)){
redirec_url="";
}
log.info("-----微信wxLogin---redirec_url=="+redirec_url);
try {
String encrypt_curr_url = Base64.encode(redirec_url.getBytes("utf-8"));
redirec_url=url+"?" + WECHAT_AUTOLOGIN_CALLBACKURL_KEY+ "=" + encrypt_curr_url+"&"+WECHAT_REDIS_KEY+"="+key;
String oauth_api=weixinService.getAuthorize(redirec_url);
redirec_url=url+"?" + WECHAT_AUTOLOGIN_CALLBACKURL_KEY+ "=" + encrypt_curr_url;
String oauth_api=redirec_url+"&code=111";//weixinService.getAuthorize(redirec_url);
log.info("-----微信wxLogin---oauth_api=="+redirec_url);
return String.format("redirect:"+oauth_api);
}catch (Exception e){
e.printStackTrace();
......@@ -75,17 +74,59 @@ public class WeixinController {
* @return
*/
@GetMapping(value = "/app/unauth/userInfo")
public String getUserInformation(String code, String callback,String key, HttpServletRequest request) {
log.info("-----微信回调userInfo---code=="+code+"----redirec_url==="+callback+"---key==="+key);
public String getUserInformation(String code, String callback, HttpServletRequest request) {
log.info("-----微信回调userInfo---code=="+code+"----redirec_url==="+callback);
try {
userBiz.authUser(code,key,request);
callback =new String(Base64.decode(callback), "utf-8");
log.info("-----微信回调----callback==="+callback);
String [] params=callback.split(",");
String key=null;
if (params.length>1){
callback=params[0];
key= RedisKey.CONSTANT_CODE_PREFIX+params[1];
}
params=callback.split("_");
Integer activityId=0;
String auto=null;
if (params.length>1){
callback=params[0];
activityId=Integer.parseInt(params[1]);
auto="1";
}
log.info("-----微信回调userInfo---key=="+key+"----activityId==="+activityId+"----callback==="+callback);
userBiz.authUser(code,key,activityId,request);
if (StringUtils.isNotBlank(key)){
callback+="&key="+key;
}
if (StringUtils.isNotBlank(auto)&&callback.contains("summitDetail.html")){
callback+="&a=1";
}
log.info("callback===" + callback);
return String.format("redirect:"+callback);
}catch (Exception e){
e.printStackTrace();
log.info("网络异常===" + e.getMessage());
return String.format("网络异常");
}
return String.format("redirect:"+callback);
}
/**
* 微信分享
* @param url
* @return
*/
@GetMapping(value = "/app/unauth/share")
public @ResponseBody ObjectRestResponse share(@RequestParam("url") String url) {
log.info("-----微信分享share---url=="+url);
try {
return ObjectRestResponse.succ(wXjsService.getShareData(url));
}catch (Exception e){
e.printStackTrace();
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"网络异常");
}
}
......
......@@ -4,7 +4,6 @@ package com.xxfc.platform.summit.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.github.wxiaoqi.security.common.util.UserAgentUtil;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.constant.RedisKey;
......@@ -13,6 +12,7 @@ import com.xxfc.platform.summit.service.WeixinService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.alibaba.fastjson.JSONObject;
......@@ -41,6 +41,9 @@ public class WeChatH5LoginInterceptor extends HandlerInterceptorAdapter {
@Autowired
private RedisTemplate summbitRedisTemplate;
@Value("${wx.authUrl}")
private String authUrl;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
......@@ -59,15 +62,17 @@ public class WeChatH5LoginInterceptor extends HandlerInterceptorAdapter {
return true;
}
String redisKey=redisInfo(request);
Map<String,Object> result=new HashMap<>();
JSONObject result=new JSONObject();
JSONObject json = new JSONObject();
if (StringUtils.isNotBlank(redisKey)){
json.put("key",redisKey);
}
json.put("url","https://dev.dfangche.com/api/summit/auth/app/unauth/wxLogin?redirec_url=https://dev.dfangche.com/h5/appHtml/view/wxh5/index.html");
json.put("url",authUrl);
result.put("data",json);
result.put("status",1001);
response.getWriter().write(result.toString());
response.setCharacterEncoding("utf-8");
response.setContentType("application/json; charset=utf-8");
response.getWriter().append(result.toString());
return false;
}
return true;
......@@ -87,15 +92,17 @@ public class WeChatH5LoginInterceptor extends HandlerInterceptorAdapter {
{
e.printStackTrace();
}
String redisLockKey=null;
String key=null;
if (StringUtils.isNotBlank(jb)){
redisLockKey= RedisKey.CONSTANT_CODE_PREFIX + UUID.randomUUID();
Boolean suc = summbitRedisTemplate.opsForValue().setIfAbsent(redisLockKey, jb);
key= UUID.randomUUID()+"";
String redisLockKey= RedisKey.CONSTANT_CODE_PREFIX +key;
log.info("-----jb====="+jb.toString());
Boolean suc = summbitRedisTemplate.opsForValue().setIfAbsent(redisLockKey, jb.toString());
if (suc) {
summbitRedisTemplate.expire(redisLockKey, 5, TimeUnit.MINUTES);//5分钟内过期
}
}
return redisLockKey;
return key;
}
......
......@@ -2,7 +2,14 @@ package com.xxfc.platform.summit.mapper;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.pojo.ActivityQuery;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
......@@ -10,4 +17,7 @@ import tk.mybatis.mapper.common.Mapper;
*/
public interface ActivityMapper extends Mapper<Activity> {
List<Activity> selectByQuery(ActivityQuery query);
BigDecimal getdinate(@Param("params") Map<String,Object> map);
}
package com.xxfc.platform.summit.service;
import com.xxfc.platform.summit.model.AccessToken;
import com.alibaba.fastjson.JSONObject;
import com.xxfc.platform.summit.util.HttpRequestUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
/**
* 认证并获取 access_token API
* http://mp.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96access_token
*
* AccessToken默认存储于内存中,可设置存储于redis或者实现IAccessTokenCache到数据库中实现分布式可用
*
* 具体配置:
* <pre>
* ApiConfigKit.setAccessTokenCache(new RedisAccessTokenCache());
* </pre>
*/
@Service
@Slf4j
public class AccessTokenService {
@Autowired
private RedisTemplate summbitRedisTemplate;
// "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
private static String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
//"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
@Value("${wx.appid}")
private String wy_appid;
@Value("${wx.appSercet}")
private String wy_secret;
/**
* 从缓存中获取 access token,如果未取到或者 access token 不可用则先更新再获取
*/
public AccessToken getAccessToken() {
//从缓存中读取出accessToken
//RedisUtil redisUtil = new RedisUtil(ConstantConfig.REDIS_IP,ConstantConfig.REDIS_PORT);
//创建一个jedis的对象。
String accessTokenRedis = summbitRedisTemplate.opsForValue().get(wy_appid) == null ? "" : summbitRedisTemplate.opsForValue().get(wy_appid).toString();
log.info("---accessTokenRedis===="+accessTokenRedis);
if (StringUtils.isNotBlank(accessTokenRedis))
{
JSONObject obj = JSONObject.parseObject(accessTokenRedis).getJSONObject(wy_appid);
AccessToken accessToken = new AccessToken(obj.getString("json"),obj.getString("accessToken"),obj.getInteger("expiresIn"),obj.getLong("expiredTime"));
if(accessToken.isAvailable()){
return accessToken;
}
summbitRedisTemplate.delete(wy_appid);
}
refreshAccessToken();
accessTokenRedis = summbitRedisTemplate.opsForValue().get(wy_appid) == null ? "" : summbitRedisTemplate.opsForValue().get(wy_appid).toString();
JSONObject obj = JSONObject.parseObject(accessTokenRedis).getJSONObject(wy_appid);
AccessToken accessToken = new AccessToken(obj.getString("json"),obj.getString("accessToken"),obj.getInteger("expiresIn"),obj.getLong("expiredTime"));
return accessToken;
//return (AccessToken) ehcache.get(SystemConfig.WINXIN_AppID).getObjectValue();
}
private AccessToken AccessToken(String string, String string2,
Integer integer) {
// TODO Auto-generated method stub
return null;
}
/**
* 直接获取 accessToken 字符串,方便使用
* @return String accessToken
*/
public String getAccessTokenStr() {
return getAccessToken().getAccessToken();
}
/**
* 强制更新 access token 值
*/
public void refreshAccessToken() {
//RedisUtil redisUtil = new RedisUtil(ConstantConfig.REDIS_IP,ConstantConfig.REDIS_PORT);
AccessToken result = null;
for (int i=0; i<3; i++) { // 最多三次请求
String json = HttpRequestUtil.httpGet(url+"&appid="+wy_appid+"&secret="+wy_secret);
log.info("---json===="+json);
result = new AccessToken(json);
if (result.isAvailable())
break;
}
// 三次请求如果仍然返回了不可用的 access token 仍然 put 进去,便于上层通过 AccessToken 中的属性判断底层的情况
JSONObject obj = new JSONObject();
obj.put(wy_appid, result);
Boolean suc=summbitRedisTemplate.opsForValue().setIfAbsent(wy_appid, obj.toJSONString());
if (suc) {
summbitRedisTemplate.expire(wy_appid, result.getExpiresIn(), TimeUnit.MINUTES);
}
}
}
\ No newline at end of file
package com.xxfc.platform.summit.service;
import com.xxfc.platform.summit.model.JsTicket;
import com.xxfc.platform.summit.util.HttpRequestUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import java.util.concurrent.TimeUnit;
/**
*
* 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据
* https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
*
* 微信卡券接口签名凭证api_ticket
* https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card
*/
@Service
@Slf4j
public class JsTicketService {
@Autowired
private RedisTemplate summbitRedisTemplate;
@Autowired
AccessTokenService tokenService;
private static String apiUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?";
@Value("${wx.appid}")
private String wy_appid;
@Value("${wx.appSercet}")
private String wy_secret;
/**
* JSApi的类型
*
* jsapi: 用于分享等js-api
*
* wx_card:用于卡券接口签名凭证api_ticket
*
*/
public enum JsApiType {
jsapi, wx_card
}
/**
*
* http GET请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket)
*
* @param jsApiType
* @return JsTicket
*/
@SuppressWarnings("null")
public JsTicket getTicket(JsApiType jsApiType) {
String key = wy_appid + ':' + jsApiType.name();
//从缓存中取出来
//RedisUtil redisUtil = new RedisUtil(ConstantConfig.REDIS_IP,ConstantConfig.REDIS_PORT);
JsTicket jsTicket = new JsTicket();
String jsTicketRedis = summbitRedisTemplate.opsForValue().get(key) == null ? "" : summbitRedisTemplate.opsForValue().get(key).toString();
log.info("---jsTicketRedis===="+jsTicketRedis);
if (StringUtils.isNotBlank(jsTicketRedis))
{
JSONObject objTemp = new JSONObject();
objTemp = JSONObject.parseObject(jsTicketRedis).getJSONObject(key);
jsTicket.setExpiredTime(objTemp.getLong("expiredTime"));
jsTicket.setTicket(objTemp.getString("ticket"));
jsTicket.setExpires_in(objTemp.getInteger("expiresIn"));
// jsTicket = JSON.parseObject(redisUtil.get(key), JsTicket.class);
//(JsTicket) JSON.parseObject(redisUtil.get(key)).get(key);
if(!jsTicket.isAvailable())
{
log.info("---jsTicket----失效");
// https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card
String json = HttpRequestUtil.httpGet(apiUrl+"access_token="+ tokenService.getAccessTokenStr()+"&type="+jsApiType.name());
log.info("---json===="+json);
jsTicket = new JsTicket(json);
/*Element element = new Element(SystemConfig.WINXIN_AppID, jsTicket);
ehcache.put(element);*/
log.info("----jsTicket===="+jsTicket);
JSONObject obj = new JSONObject();
obj.put(key, jsTicket);
summbitRedisTemplate.delete(key);
Boolean suc=summbitRedisTemplate.opsForValue().setIfAbsent(key, obj.toJSONString());
if (suc) {
summbitRedisTemplate.expire(wy_appid, jsTicket.getExpiresIn(), TimeUnit.MINUTES);
}
}
}else{
String json = HttpRequestUtil.httpGet(apiUrl+"access_token="+ tokenService.getAccessTokenStr()+"&type="+jsApiType.name());
log.info("---json===="+json);
jsTicket = new JsTicket(json);
/*Element element = new Element(SystemConfig.WINXIN_AppID, jsTicket);
ehcache.put(element);*/
JSONObject obj = new JSONObject();
obj.put(key, jsTicket);
Boolean suc=summbitRedisTemplate.opsForValue().setIfAbsent(key, obj.toJSONString());
if (suc) {
summbitRedisTemplate.expire(wy_appid, jsTicket.getExpiresIn(), TimeUnit.MINUTES);
}
}
return jsTicket;
}
}
\ No newline at end of file
package com.xxfc.platform.summit.service;
import java.util.Map;
import java.util.TreeMap;
import java.util.UUID;
import com.xxfc.platform.summit.util.Sha1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import java.util.Map.Entry;
@Service
public class WXjsService {
@Autowired
JsTicketService jsTicketService;
@Value("${wx.appid}")
private String wy_appid;
/**
* 生成js 微信调用配置参数
* @param _wxShareUrl:回掉的地址
* @return
*/
public JSONObject getShareData(String _wxShareUrl)
{
JSONObject data = new JSONObject();
Map<String, String> _wxMap = new TreeMap<String, String>();
//noncestr
String _wxNoncestr = UUID.randomUUID().toString().replace("-", "");
String _wxTimestamp = (System.currentTimeMillis() / 1000) + "";
String _wxJsapiTicket = jsTicketService.getTicket(JsTicketService.JsApiType.jsapi).getTicket();
//参数封装
_wxMap.put("noncestr", _wxNoncestr);
_wxMap.put("timestamp", _wxTimestamp );
_wxMap.put("jsapi_ticket", _wxJsapiTicket);
_wxMap.put("url", _wxShareUrl);
data.put("noncestr", _wxNoncestr);
data.put("timestamp", _wxTimestamp );
data.put("jsapi_ticket", _wxJsapiTicket);
data.put("url", _wxShareUrl);
data.put("appId", wy_appid);
// 加密获取signature
StringBuilder _wxBaseString = new StringBuilder();
for (Entry<String, String> param : _wxMap.entrySet()) {
_wxBaseString.append(param.getKey()).append("=").append(param.getValue()).append("&");
}
String _wxSignString = _wxBaseString.substring(0, _wxBaseString.length() - 1);
data.put("sign", Sha1.getSha1(_wxSignString));
return data;
}
}
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xxfc.platform.summit.util.HttpRequestUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
......@@ -20,6 +21,9 @@ public class WeixinService {
@Value("${wx.appSercet}")
private String wy_secret;
@Autowired
AccessTokenService tokenService;
public JSONObject getAccessToken(String code){
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?";
......@@ -63,6 +67,13 @@ public class WeixinService {
return oauth_api;
}
public JSONObject getBaseUserInfo(String openid){
String url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + tokenService.getAccessTokenStr() + "&openid=" + openid + "&lang=zh_CN";
String result = HttpRequestUtil.httpGet(url);
log.info("---result===="+result);
JSONObject data = JSON.parseObject(result);
return data;
}
}
......@@ -2,4 +2,38 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.summit.mapper.ActivityMapper">
<select id="selectByQuery" resultType="com.xxfc.platform.summit.entity.Activity"
parameterType="com.xxfc.platform.summit.pojo.ActivityQuery">
select * from fc_activity
where
is_del=0
<if test="title != null and title.trim() != '' ">
and title like CONCAT('%',#{title},'%')
</if>
<if test="startTime != null">
and from_unixtime(start_time,'%Y-%m-%e %H')=from_unixtime(unix_timestamp(), '%Y-%m-%e %H')
</if>
<if test="status != null and status == 1">
and (status=#{status} or (status=0 and (start_time/1000) &gt;= unix_timestamp()) )
</if>
<if test="status != null and status == 2">
and (status=#{status} or (status=0 and (start_time/1000) &lt; unix_timestamp() and (end_time/1000)&gt;=unix_timestamp()))
</if>
<if test="status != null and status == 3">
and (status=#{status} or (status=0 and (end_time/1000)&lt;unix_timestamp()))
</if>
<if test="type ==2">
and is_publish=1
and is_show=1
</if>
order by rank asc , start_time desc
</select>
<select id="getdinate" parameterType="java.util.Map" resultType="BigDecimal">
select
IFNULL(ROUND(( (2 * ASIN( SQRT( POW( SIN((latitude * PI() / 180.0- #{params.latitude}* PI() / 180.0)/2), 2)+COS( latitude * PI() / 180.0)*COS( #{params.latitude} * PI() / 180.0)
*POW(SIN((longitude * PI() / 180.0 - #{params.longitude}* PI() /180.0)/2),2))))*6378.137)*10000)/10000 ,0 ) AS distance
FROM fc_activity WHERE id=#{params.id}
</select>
</mapper>
\ No newline at end of file
......@@ -98,4 +98,9 @@ public class RedisKey {
public static final String CACHE_DICTIONARY_ALL =CACHE_DICTIONARY_PREFIX + "all:";
public static final String CACHE_DICTIONARY_ALL_MAP =CACHE_DICTIONARY_ALL + "map:";
public static final String ILLEGAL_VEHICLE_ENQUIRIES ="cache:violation";
/**
* 服务器上传压缩包文件序号
*/
public static final String UPLOAD_ZIP_NO_PREFIX ="upload:zip:no:";
}
package com.xxfc.platform.universal.constant;
import java.util.Arrays;
import java.util.List;
public class VideoConstant {
public static final List<String> forms= Arrays.asList(".mp4");
}
......@@ -2,8 +2,11 @@ package com.xxfc.platform.universal.controller;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.constant.RestCode;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.result.JsonResultUtil;
import com.xxfc.platform.universal.constant.VideoConstant;
import com.xxfc.platform.universal.dto.ImgDTO;
import com.xxfc.platform.universal.dto.UploadImgDTO;
import com.xxfc.platform.universal.service.FileUploadService;
......@@ -12,6 +15,7 @@ import com.xxfc.platform.universal.service.UploadZipService;
import com.xxfc.platform.universal.utils.ImgBase64Util;
import com.xxfc.platform.universal.utils.PublicMsg;
import com.xxfc.platform.universal.vo.Ueditor;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
......@@ -64,6 +68,7 @@ public class UploadController{
return JsonResultUtil.createSuccessResultWithObj(uploadService.uploadFile(file,prefix));
}
@ApiOperation("视频上传")
@RequestMapping(value = "/app/unauth/uploadVideo", method = RequestMethod.POST)
public JSONObject uploadVideo(
@RequestParam("file") MultipartFile file,
......@@ -181,11 +186,25 @@ public class UploadController{
return fileUploadService.handlerUpload(upfile,null,prefix);
}
@ApiOperation("图片压缩包上传")
@PostMapping(value="/app/unauth/pictureZip")
public ObjectRestResponse pictureZip(
@RequestBody MultipartFile file,
@RequestBody String password) throws Exception {
return uploadZipService.uploadPictureZip(file,password);
}
@RequestParam("file")MultipartFile file,
@RequestParam(value = "prefix",defaultValue = "summit")String prefix) throws Exception {
return uploadZipService.uploadPictureZip(file,prefix);
}
// @PostMapping(value="/app/unauth/uploadVideo")
// public ObjectRestResponse video(
// @RequestParam("file")MultipartFile file,
// @RequestParam(value = "prefix",defaultValue = "summit")String prefix) throws Exception {
// String filename = file.getOriginalFilename();
// String suffixName = filename.substring(filename.lastIndexOf("."));
// if (!VideoConstant.forms.contains(suffixName)) {
// return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"只能上传MP4格式");
// }
// return ObjectRestResponse.succ(uploadService.uploadVideo(file,prefix));
// }
}
package com.xxfc.platform.universal.service;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.xxfc.platform.universal.constant.RedisKey;
import com.xxfc.platform.universal.utils.ImgBase64Util;
......@@ -28,6 +29,9 @@ public class UploadService {
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
@Value("${universal.baseUploadPath}")
private String baseUploadPath ;
@Value("${universal.videoUploadPath}")
private String videoUploadPath ;
@Value("${universal.url}")
private String xx_url ;
@Autowired
......@@ -143,4 +147,29 @@ public class UploadService {
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
}
/**
* 写入上传文件,返回相对路径
* @param file
* @return
*/
public String uploadVideo(MultipartFile file,String prefix) throws Exception{
//创建本日存放目录
DateTime now = DateTime.now();
String dirPathToday = "/"+prefix+ "/" + now.toString(DEFAULT_DATE_TIME_FORMATTER);
String redisNoKey = RedisKey.UPLOAD_FILE_NO_PREFIX + now.toString(DEFAULT_DATE_TIME_FORMATTER);
Long no = redisTemplate.opsForValue().increment(redisNoKey);
if(no.equals(1l)){
redisTemplate.expire(redisNoKey,1, TimeUnit.DAYS);
}
String fileName = file.getOriginalFilename();
String realFileRelPath = dirPathToday + "/" + no + fileName.substring(fileName.lastIndexOf("."));
//文件存放路径
String filePath = videoUploadPath + realFileRelPath;
//将文件写入指定位置
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(filePath));
realFileRelPath=xx_url+SystemConfig.VIDEO_URL+realFileRelPath;
return realFileRelPath;
}
}
......@@ -7,5 +7,5 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
public interface UploadZipService {
ObjectRestResponse uploadPictureZip(MultipartFile file, String password) throws IOException;
ObjectRestResponse uploadPictureZip(MultipartFile file, String prefix) throws IOException;
}
......@@ -2,16 +2,24 @@ package com.xxfc.platform.universal.service.impl;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.xxfc.platform.universal.constant.RedisKey;
import com.xxfc.platform.universal.constant.enumerate.FileTypeEnum;
import com.xxfc.platform.universal.service.UploadZipService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.codehaus.plexus.util.IOUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
......@@ -21,57 +29,75 @@ public class UploadZipServiceImpl implements UploadZipService {
@Value("${universal.uploadPath}")
private String uploadPath ;
@Value("${universal.url}")
private String xx_url ;
private static final String APK_SUFFIX=".apk";
private static final String APK_NAME="xxfc.apk";
private static final String JPG=".jpg";
private static final String PNG=".png";
@Value("${photo.format}")
private String PHOTO_FORMAT;
@Autowired
RedisTemplate redisTemplate;
@Override
public ObjectRestResponse uploadPictureZip(MultipartFile file, String password) throws IOException {
if (Objects.isNull(file)) {
public ObjectRestResponse uploadPictureZip(MultipartFile uFile, String prefix) throws IOException {
if (Objects.isNull(uFile)) {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"请上传压缩文件!");
}
String fileContentType = file.getContentType();
String fileContentType = uFile.getContentType();
//将压缩包保存在指定路径
String packFilePath = uploadPath + File.separator + file.getName();
String packFilePath = uploadPath + File.separator + uFile.getName();
if (FileTypeEnum.FILE_TYPE_ZIP.type.equals(fileContentType)||FileTypeEnum.FILE_TYPE_X_ZIP.type.equals(fileContentType)) {
//zip解压缩处理
packFilePath += FileTypeEnum.FILE_TYPE_ZIP.fileStufix;
} else {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"上传的压缩包格式不正确,仅支持zip压缩文件!");
}
File fi = new File(packFilePath);
File file = new File(packFilePath);
try {
file.transferTo(fi);
//保存压缩包
FileOutputStream os = new FileOutputStream(file);
IOUtil.copy(uFile.getInputStream(),os);
os.close();
} catch (IOException e) {
log.error("zip file save to " + uploadPath + " error", e.getMessage(), e);
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"保存压缩文件到:" + uploadPath + " 失败!");
}
//zip压缩包
return unPackZip(fi, password, uploadPath);
//zip压缩包解压
return unPackZip(file, prefix);
}
public ObjectRestResponse unPackZip(File file, String password, String destPath) throws IOException {
ZipFile zipFile = new ZipFile(file);
public ObjectRestResponse<String> unPackZip(File file, String prefix) throws IOException {
ZipFile zipFile = new ZipFile(file, Charset.forName("GBK"));
Enumeration<? extends ZipEntry> entries = zipFile.entries();
long millis = System.currentTimeMillis();
String dirPathToday = prefix+ File.separator + millis;
String redisNoKey = RedisKey.UPLOAD_FILE_NO_PREFIX +millis;
StringBuffer result = new StringBuffer();
Integer index = 0;
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
if (entry.isDirectory()) {
destPath =destPath+File.separator+ entry.getName();
File dir = new File(destPath);
if (entry.isDirectory() && index++ == 0) {
File dir = new File(uploadPath+dirPathToday);
dir.mkdir();
}else {
} else if (!entry.isDirectory()) {
Long no = redisTemplate.opsForValue().increment(redisNoKey);
if(no.equals(1l)){
redisTemplate.expire(redisNoKey,1, TimeUnit.DAYS);
}
String name = entry.getName();
String format = name.substring(name.lastIndexOf("."));
if (PHOTO_FORMAT.contains(format)) {
String realFileRelPath = dirPathToday + File.separator + no +format;
File targetFile = new File(uploadPath+realFileRelPath);
FileUtils.copyInputStreamToFile(zipFile.getInputStream(entry),targetFile);
realFileRelPath=xx_url+ SystemConfig.XXMP_URL+realFileRelPath;
result.append(realFileRelPath+",");
}
return null;
}
}
result.substring(0,result.length()-1);
return ObjectRestResponse.succ(result.substring(0, result.length()-1));
}
}
package com.xxfc.platform.vehicle.entity;
import lombok.Data;
import java.util.Date;
import javax.persistence.*;
@Data
@Table(name = "book_record_update_log")
public class BookRecordUpdateLog {
@Id
private Integer id;
/**
* 订单ID
*/
@Column(name = "order_id")
private Integer orderId;
/**
* 预定记录ID
*/
@Column(name = "book_record_id")
private Long bookRecordId;
/**
* 原还车公司ID
*/
@Column(name = "old_ret_company_id")
private Integer oldRetCompanyId;
/**
* 新还车公司ID
*/
@Column(name = "new_ret_company_id")
private Integer newRetCompanyId;
/**
* 操作人ID
*/
@Column(name = "operater_id")
private Integer operaterId;
/**
* 操作人姓名
*/
@Column(name = "operater_name")
private String operaterName;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}
\ No newline at end of file
......@@ -72,6 +72,16 @@ public class VehicleCountRecord {
)
private Date countDate;
/**
* 无效数据数量(超过还车时间后还未出车的数据)
*/
@Column(name = "no_use_num")
private Integer noUseNum;
@Column(name = "cancel_num")
private Integer cancelNum;
@Transient
private String startTime;
......
......@@ -10,6 +10,7 @@ import com.xxfc.platform.vehicle.pojo.dto.BranchCompanyFindDTO;
import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import com.xxfc.platform.vehicle.pojo.vo.BranComanyLeaderVo;
import com.xxfc.platform.vehicle.pojo.vo.BranchCompanyListVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
......@@ -163,4 +164,8 @@ public interface VehicleFeign {
@GetMapping("/vehicleInfo/findVehicleIds")
List<String> findbyPlateNumberAndVehicleCod(@RequestParam(value = "plateNumber") String plateNumber,@RequestParam(value = "vehicleCode") String vehicleCode);
@RequestMapping(value = "/vehicleInfo/bookRecord/update", method = RequestMethod.POST)
public ObjectRestResponse update(@RequestBody BookRecordUpdateLog bookRecordUpdateLog);
}
package com.xxfc.platform.vehicle.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.entity.BookRecordUpdateLog;
import com.xxfc.platform.vehicle.mapper.BookRecordUpdateLogMapper;
import org.springframework.stereotype.Service;
@Service
public class BookRecordUpdateLogBiz extends BaseBiz<BookRecordUpdateLogMapper, BookRecordUpdateLog> {
public ObjectRestResponse save(BookRecordUpdateLog bookRecordUpdateLog) {
BookRecordUpdateLog oldValue = mapper.selectOne(bookRecordUpdateLog);
if (oldValue != null) {
return ObjectRestResponse.succ();
}
insertSelectiveRe(bookRecordUpdateLog);
return ObjectRestResponse.succ();
}
}
......@@ -78,6 +78,9 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
@Autowired
VehicleDepartureService vehicleDepartureService;
@Autowired
BookRecordUpdateLogBiz bookRecordUpdateLogBiz;
@Override
public UserFeign getUserFeign() {
return userFeign;
......@@ -324,6 +327,21 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
return vehicleBookRecordVos;
}
public ObjectRestResponse update(BookRecordUpdateLog bookRecordUpdateLog) {
VehicleBookRecord vehicleBookRecord = selectById(bookRecordUpdateLog.getBookRecordId());
if(vehicleBookRecord != null) {
vehicleBookRecord.setRetCompany(bookRecordUpdateLog.getNewRetCompanyId());
int a = updateSelectiveByIdRe(vehicleBookRecord);
log.info(vehicleBookRecord.toString());
if(a <= 0) {
return ObjectRestResponse.createDefaultFail();
}
return bookRecordUpdateLogBiz.save(bookRecordUpdateLog);
} else {
return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc());
}
}
public ObjectRestResponse<List<VehicleBookRecordVo>> selectByIds(List<Long> ids) {
Map<String, Object> map = new HashMap<>();
map.put("ids", ids);
......@@ -644,6 +662,10 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
}
public List<VehicleBookRecordVo> selectAllCancelBookRecord(Map<String, Object> param) {
return mapper.selectAllCancelBookRecord(param);
}
public PageDataVO<VehicleRecordInfoVo> getListByParam(VehiclePlanDto vehiclePlanDto) {
Query query = new Query(vehiclePlanDto);
......
......@@ -279,6 +279,24 @@ public class VehicleCountRecordBiz extends BaseBiz<VehicleCountRecordMapper, Veh
if(innerAfterArrivalNum != null && innerAfterArrivalNum > 0) {
innerCountRecord.setAfterArrivalNum(innerAfterArrivalNum);
}
//在当前时间内已经取消的记录数
List<VehicleBookRecordVo> vehicleBookRecordVos = vehicleBookRecordBiz.selectAllCancelBookRecord(param);
if (vehicleBookRecordVos != null && vehicleBookRecordVos.size() > 0) {
innerCountRecord.setCancelNum(vehicleBookRecordVos.size());
}
//过期未出车无效数据
param.put("startTime", DateTime.parse("1970-01-01 00:00:00", DATE_TIME_FORMATTER).toDate());
List<VehicleBookRecordVo> vehicleBookRecordList = vehicleBookRecordBiz.selectAllBookRecord(startTime, endTime, 2).getData();
if (vehicleBookRecordList != null && vehicleBookRecordList.size() > 0) {
Iterator<VehicleBookRecordVo> iterator = vehicleBookRecordList.iterator();
while (iterator.hasNext()) {
if(iterator.next().getVehicleDepartureLogVo() != null) {
iterator.remove();
}
}
innerCountRecord.setNoUseNum(vehicleBookRecordList.size());
}
innerCountRecord.setType(VehicleCountType.INNER.getCode());
vehicleCountRecord.setCountDate(nowDate);
tourCountRecord.setCountDate(nowDate);
......@@ -323,6 +341,13 @@ public class VehicleCountRecordBiz extends BaseBiz<VehicleCountRecordMapper, Veh
vehicleCountRecord.setDepartureNum(vehicleDepartureList.size());
}
Map<String, Object> param = new HashMap<>();
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
startDate = simpleDateFormat1.format(startTime);
endDate = simpleDateFormat1.format(endTime);
} catch (Exception e) {
e.printStackTrace();
}
param.put("startTime", DateTime.parse(startDate, DATE_TIME_FORMATTER).toDate());
param.put("endTime", DateTime.parse(endDate, DATE_TIME_FORMATTER).toDate());
//1代表出车 2代表还车
......@@ -330,6 +355,7 @@ public class VehicleCountRecordBiz extends BaseBiz<VehicleCountRecordMapper, Veh
param.put("bookUser", -2);
//1代表正常出车,2代表提前出车,3代表延期出车
param.put("type", 2);
//租车提前出车数量
Integer beforeDepartureNum = vehicleDepartureService.selectAllDepartureLog(param);
if(beforeDepartureNum != null && beforeDepartureNum > 0) {
......@@ -450,6 +476,24 @@ public class VehicleCountRecordBiz extends BaseBiz<VehicleCountRecordMapper, Veh
innerCountRecord.setAfterArrivalNum(innerAfterArrivalNum);
}
innerCountRecord.setType(VehicleCountType.INNER.getCode());
//在当前时间内已经取消的记录数
List<VehicleBookRecordVo> vehicleBookRecordVos = vehicleBookRecordBiz.selectAllCancelBookRecord(param);
if (vehicleBookRecordVos != null && vehicleBookRecordVos.size() > 0) {
innerCountRecord.setCancelNum(vehicleBookRecordVos.size());
}
//过期未出车无效数据
param.put("startTime", DateTime.parse("1970-01-01 00:00:00", DATE_TIME_FORMATTER).toDate());
List<VehicleBookRecordVo> vehicleBookRecordList = vehicleBookRecordBiz.selectAllBookRecord(startTime, endTime, 2).getData();
if (vehicleBookRecordList != null && vehicleBookRecordList.size() > 0) {
Iterator<VehicleBookRecordVo> iterator = vehicleBookRecordList.iterator();
while (iterator.hasNext()) {
if(iterator.next().getVehicleDepartureLogVo() != null) {
iterator.remove();
}
}
innerCountRecord.setNoUseNum(vehicleBookRecordList.size());
}
vehicleCountRecord.setCountDate(nowDate);
tourCountRecord.setCountDate(nowDate);
innerCountRecord.setCountDate(nowDate);
......
package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.BookRecordUpdateLog;
import tk.mybatis.mapper.common.Mapper;
public interface BookRecordUpdateLogMapper extends Mapper<BookRecordUpdateLog> {
}
\ No newline at end of file
......@@ -43,4 +43,6 @@ public interface VehicleBookRecordMapper extends Mapper<VehicleBookRecord> {
public List<VehicleBookRecordVo> selectAllBookRecord(Map<String, Object> param);
public List<VehicleBookRecordVo> selectByIds(Map<String, Object> param);
public List<VehicleBookRecordVo> selectAllCancelBookRecord(Map<String, Object> param);
}
\ No newline at end of file
package com.xxfc.platform.vehicle.rest;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.biz.BookRecordUpdateLogBiz;
import com.xxfc.platform.vehicle.entity.BookRecordUpdateLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/bookRecord")
public class BookRecordUpdateLogController {
@Autowired
BookRecordUpdateLogBiz bookRecordUpdateLogBiz;
@PostMapping(value = "/update")
public ObjectRestResponse save(@RequestBody BookRecordUpdateLog bookRecordUpdateLog) {
return bookRecordUpdateLogBiz.save(bookRecordUpdateLog);
}
}
......@@ -20,9 +20,7 @@ import com.xxfc.platform.vehicle.common.CustomIllegalParamException;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.entity.VehicleBookInfo;
import com.xxfc.platform.vehicle.entity.*;
import com.xxfc.platform.vehicle.jobhandler.VehicleJobHandler;
import com.xxfc.platform.vehicle.pojo.*;
import com.xxfc.platform.vehicle.pojo.dto.VehiclePlanDto;
......@@ -38,6 +36,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
......@@ -76,6 +75,10 @@ public class VehicleController extends BaseController<VehicleBiz> implements Use
@Autowired
BranchCompanyBiz branchCompanyBiz;
@Autowired
BookRecordUpdateLogBiz bookRecordUpdateLogBiz;
public UserFeign getUserFeign() {
return userFeign;
}
......@@ -304,6 +307,35 @@ public class VehicleController extends BaseController<VehicleBiz> implements Use
}
@RequestMapping(value = "/bookRecord/update", method = RequestMethod.POST)
@ApiOperation(value = "修改预定记录还车地点")
public ObjectRestResponse update(@RequestBody BookRecordUpdateLog bookRecordUpdateLog){
return vehicleBookRecordBiz.update(bookRecordUpdateLog);
}
@RequestMapping(value = "/bookRecord/updateById", method = RequestMethod.POST)
@ApiOperation(value = "修改预定记录还车地点")
public ObjectRestResponse updateById(@RequestBody VehicleBookRecord vehicleBookRecord){
VehicleBookRecord oldValue = vehicleBookRecordBiz.selectById(vehicleBookRecord.getId());
UserDTO userDTO = getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, ResultCode.getMsg(ResultCode.RSTOKEN_EXPIRED_CODE));
}
if(oldValue != null) {
oldValue.setRetCompany(vehicleBookRecord.getRetCompany());
BookRecordUpdateLog bookRecordUpdateLog = new BookRecordUpdateLog();
bookRecordUpdateLog.setBookRecordId(vehicleBookRecord.getId());
bookRecordUpdateLog.setOldRetCompanyId(vehicleBookRecord.getRetCompany());
bookRecordUpdateLog.setNewRetCompanyId(vehicleBookRecord.getRetCompany());
bookRecordUpdateLog.setOperaterId(userDTO.getId());
bookRecordUpdateLog.setOperaterName(userDTO.getName());
bookRecordUpdateLog.setCreateTime(new Date());
vehicleBookRecordBiz.updateSelectiveByIdRe(vehicleBookRecord);
return bookRecordUpdateLogBiz.save(bookRecordUpdateLog);
} else {
return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc());
}
}
@RequestMapping(value = "/bookedRecord", method = RequestMethod.GET)
@ApiOperation(value = "获取多个预定记录")
......
......@@ -37,7 +37,7 @@
<!-- </table>-->
<!-- <table tableName="branch_company_stock_info" domainObjectName="BranchCompanyStockInfo"></table>-->
<!-- <table tableName="branch_company_stock_apply_info" domainObjectName="BranchCompanyStockApplyInfo"></table>-->
<table tableName="vehicle_count_record" domainObjectName="VehicleCountRecord"></table>
<table tableName="book_record_update_log" domainObjectName="BookRecordUpdateLog"></table>
<!-- <table tableName="vehicle_upkeep_log" domainObjectName="VehicleUpkeepLog"></table>-->
</context>
</generatorConfiguration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xxfc.platform.vehicle.mapper.BookRecordUpdateLogMapper" >
</mapper>
\ No newline at end of file
......@@ -526,6 +526,17 @@
and v1.book_end_date between #{startTime} and #{endTime}
</if>
</select>
<!--获取所有已取消的预定记录-->
<select id="selectAllCancelBookRecord" resultMap="searchBookRecord" parameterType="Map">
select v1.* from vehicle_book_record v1
where v1.status in (4,6)
<if test="startTime != null">
and v1.book_start_date &lt; #{startTime} and v1.book_end_date &gt; #{endTime}
</if>
and book_user != -2
</select>
<select id="selectByIds" resultMap="searchBookRecord" parameterType="Map">
select v1.* from vehicle_book_record v1
where v1.status not in (4,6,7,3)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment