Commit 5a9409be by 王祖波

Merge branch 'feature/许可账号购买二期' into 'master'

Feature/许可账号购买二期

See merge request !1212
parents 3e42e9c0 696d3790
......@@ -153,6 +153,18 @@ public class LicenceOrderDTO implements Serializable {
* 微信url
*/
private String wxUrl;
/**
* 企业微信订单过期时间
*/
private Date qywxExpireTime;
public Date getQywxExpireTime() {
return qywxExpireTime;
}
public void setQywxExpireTime(Date qywxExpireTime) {
this.qywxExpireTime = qywxExpireTime;
}
public String getWxUrl() {
return wxUrl;
......
......@@ -131,6 +131,18 @@ public class LicenceOrderPageDTO implements Serializable {
* 微信订单id
*/
private String wxOrderId;
/**
* 企业微信订单过期时间
*/
private Date qywxExpireTime;
public Date getQywxExpireTime() {
return qywxExpireTime;
}
public void setQywxExpireTime(Date qywxExpireTime) {
this.qywxExpireTime = qywxExpireTime;
}
public String getWxOrderId() {
return wxOrderId;
......
......@@ -101,6 +101,18 @@ public class LicenceOrderQDTO implements Serializable {
* 创建人名称
*/
private String creatorName;
/**
* 企业微信订单id
*/
private String qywxOrderId;
public String getQywxOrderId() {
return qywxOrderId;
}
public void setQywxOrderId(String qywxOrderId) {
this.qywxOrderId = qywxOrderId;
}
public Long getOrderId() {
return orderId;
......
......@@ -151,5 +151,11 @@ public interface LicenceOrderApiService {
*/
ServiceResponse<HashMap<String, Integer>> hasPopup(String wxEnterpriseId);
/**
* 查询企业微信订单状态是否过期
* @return
*/
ServiceResponse<Boolean> checkQywxOrderStatus(Long orderId);
}
......@@ -32,6 +32,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
......@@ -92,6 +93,7 @@ public class LicenceOrderController {
if (ObjectUtil.isNotNull(wxEnterpriseDTO)) {
vo.setWxEnterpriseName(wxEnterpriseDTO.getCorpName());
}
vo.setNowTime(new Date());
}
}
return RestResponse.successResult(result);
......@@ -193,6 +195,18 @@ public class LicenceOrderController {
}
return RestResponse.failure(response.getCode(), response.getMessage());
}
/**
* 获取当前系统时间
*/
@RequestMapping("get-system-date")
public RestResponse<Date> getSystemDate(HttpServletRequest request) {
AuthcenterUserDetails loginUser = (AuthcenterUserDetails) SessionContextUtil.getUser(request);
if (loginUser == null) {
return RestResponse.failure(Convert.toStr(HaoBanErrCode.ERR_4.getCode()), HaoBanErrCode.ERR_4.getMsg());
}
return RestResponse.successResult(new Date());
}
}
......
......@@ -132,6 +132,14 @@ public class LicenceOrderPageVO implements Serializable {
* 微信订单id
*/
private String wxOrderId;
/**
* 企业微信订单过期时间
*/
private Date qywxExpireTime;
/**
* 当前时间
*/
private Date nowTime;
}
......@@ -154,5 +154,9 @@ public class LicenceOrderVO implements Serializable {
* 订单进度list
*/
private List<LicenceOrderProgressVO> OrderProgressList;
/**
* 企业微信订单过期时间
*/
private Date qywxExpireTime;
}
......@@ -170,6 +170,10 @@ public class TabHaobanLicenceOrder implements Serializable {
* 微信url
*/
private String wxUrl;
/**
* 企业微信订单过期时间
*/
private Date qywxExpireTime;
}
......@@ -83,8 +83,10 @@ public class LicenceOrderServiceImpl implements LicenceOrderService {
order.setOrderId(orderId);
//默认支付状态为待支付
order.setOrderStatus(0);
order.setQywxOrderStatus(0);
order.setCreateTime(now);
order.setUpdateTime(now);
order.setQywxExpireTime(DateUtil.addDay(now, 10));
//生成订单编号
String num = "ZH"+orderId;
order.setOrderNumber(num);
......@@ -98,6 +100,8 @@ public class LicenceOrderServiceImpl implements LicenceOrderService {
tabHaobanLicenceOrderMapper.insert(order);
//记录订单进度
saveOrderProgress(orderId,"创建订单",licenceOrderQDTO.getEnterpriseId(),licenceOrderQDTO.getWxEnterpriseId(),licenceOrderQDTO.getCreatorName(),1,null,null);
//记录企业微信订单进度
saveOrderProgress(orderId,"创建订单",licenceOrderQDTO.getEnterpriseId(),licenceOrderQDTO.getWxEnterpriseId(),licenceOrderQDTO.getCreatorName(),2,null,null);
return String.valueOf(orderId);
}
......@@ -223,13 +227,6 @@ public class LicenceOrderServiceImpl implements LicenceOrderService {
}
PageHelper.startPage(qdto);
List<TabHaobanLicenceOrder> licenceOrderPage = tabHaobanLicenceOrderMapper.getLicenceOrderPage(qdto);
//判断订单状态,支付时间已过的订单的需要更改订单状态为已过期
for (TabHaobanLicenceOrder dto : licenceOrderPage){
if (dto.getExpireTime().before(new Date()) && dto.getOrderStatus() == 0){
dto.setOrderStatus(3);
updateLicenceOrderType(dto.getOrderId(), 3,dto.getEnterpriseId(), dto.getWxEnterpriseId(), "系统",1);
}
}
return PageHelperUtils.changePageHelperToCurrentPage(licenceOrderPage, LicenceOrderPageDTO.class);
}
......
......@@ -124,15 +124,71 @@ public class LicenceOrderApiServiceImpl implements LicenceOrderApiService {
@Override
public ServiceResponse<String> saveOrUpdateLicenceOrder(LicenceOrderQDTO licenceOrderQDTO) {
//创建企业微信订单,查询企业微信订单详情,返回订单金额
WxEnterpriseDTO wxEnterpriseDTO = wxEnterpriseService.selectById(licenceOrderQDTO.getWxEnterpriseId());
if (wxEnterpriseDTO == null) {
return ServiceResponse.failure("-9999", "企业微信不存在!!");
}
String openCorpid = wxEnterpriseDTO.getOpenCorpid();
String serviceCorpid = config.getCorpid();
CreateOrderQDTO orderQDTO = new CreateOrderQDTO();
orderQDTO.setBaseCount(0);
orderQDTO.setExternalCount(licenceOrderQDTO.getExternalContactCount());
orderQDTO.setBuyerUserid(config.getBuyerUserid());
if (licenceOrderQDTO.getTimeType() == 1) {
orderQDTO.setMonths(licenceOrderQDTO.getTimeValue());
orderQDTO.setDays(0);
} else {
orderQDTO.setMonths(0);
orderQDTO.setDays(licenceOrderQDTO.getTimeValue());
}
ServiceResponse<CreateOrderResponseDTO> newOrder = qywxOrderApiService.createNewOrder(serviceCorpid, openCorpid, orderQDTO);
logger.info("企业微信订单返回信息:{}", JSON.toJSONString(newOrder));
if (newOrder.isSuccess()) {
//更新企业微信订单状态,保存企业微信订单id
String qywxOrderId = newOrder.getResult().getOrderId();
//查询订单详情,获取订单金额
FeeOrderDeatilResponseDTO dto = qywxUserApiService.getOrder(openCorpid, serviceCorpid, qywxOrderId);
logger.info("查询企业微信订单详情返回信息:{}", JSON.toJSONString(dto));
if (null != dto && 0 == dto.getErrcode()){
Integer price = dto.getOrder().getPrice();
licenceOrderQDTO.setQywxOrderId(qywxOrderId);
licenceOrderQDTO.setPrice(price);
String s = licenceOrderService.saveOrUpdateLicenceOrder(licenceOrderQDTO);
return ServiceResponse.success(s);
JSONObject jsonObject = new JSONObject();
jsonObject.put("orderId",s);
jsonObject.put("price",price);
return ServiceResponse.success(JSON.toJSONString(jsonObject));
}
return ServiceResponse.failure(String.valueOf(dto.getErrcode()), dto.getErrmsg());
}
return ServiceResponse.failure(newOrder.getCode(), newOrder.getMessage());
}
@Override
public ServiceResponse<Page<LicenceOrderPageDTO>> getLicenceOrderPage(LicenceOrderPageQDTO licenceOrderPageQDTO) {
Page<LicenceOrderPageDTO> licenceOrderPage = licenceOrderService.getLicenceOrderPage(licenceOrderPageQDTO);
List<LicenceOrderPageDTO> list = licenceOrderPage.getResult();
if (CollUtil.isNotEmpty(list)){
//判断订单状态,支付时间已过的订单的需要更改订单状态为已过期
for (LicenceOrderPageDTO dto : list){
Date now = new Date();
if (null!=dto.getExpireTime() && dto.getExpireTime().before(now) && dto.getOrderStatus() == 0){
dto.setOrderStatus(3);
updateLicenceOrderType(dto.getOrderId(), 3,dto.getEnterpriseId(), dto.getWxEnterpriseId(), "系统",1);
//取消企业微信订单
cancelQywxOrder(dto.getOrderId());
}
if (null!=dto.getQywxExpireTime() && dto.getQywxExpireTime().before(now) && dto.getQywxOrderStatus() == 0){
dto.setQywxOrderStatus(3);
updateLicenceOrderType(dto.getOrderId(), 3,dto.getEnterpriseId(), dto.getWxEnterpriseId(), "系统",0);
}
}
licenceOrderPage.setResult(list);
return ServiceResponse.success(licenceOrderPage);
}
return ServiceResponse.success(new Page<>());
}
@Override
public ServiceResponse<Boolean> updateLicenceOrderType(Long orderId, Integer type, String enterpriseId, String wxEnterpriseId, String creatorName, Integer wxFlag) {
......@@ -142,8 +198,11 @@ public class LicenceOrderApiServiceImpl implements LicenceOrderApiService {
@Override
public ServiceResponse<Boolean> uploadLicenceOrderVoucher(Long orderId, String voucher, String enterpriseId, String wxEnterpriseId, String creatorName) {
ServiceResponse<Boolean> response = checkQywxOrderStatus(orderId);
if (response.isSuccess()){
licenceOrderService.uploadLicenceOrderVoucher(orderId, voucher, enterpriseId, wxEnterpriseId, creatorName);
return ServiceResponse.success(true);
}
return response;
}
@Override
......@@ -285,12 +344,14 @@ public class LicenceOrderApiServiceImpl implements LicenceOrderApiService {
String date_time = formatter.format(new Date(Long.valueOf(timeStamp) * 1000L));
Date date = DateUtil.strToDate(date_time, DateUtil.FORMAT_DATETIME_19);
if (order == null) {
logger.info("该笔订单不存在!");
RedisUtil.unlock(key);
return ServiceResponse.success(false);
}
if ("license_pay_success".equals(infoType)) {
if (order.getQywxPayTime() != null) {
if (order.getQywxPayTime() != null && order.getQywxOrderStatus() != 0) {
//该笔订单已处理
logger.info("该笔订单已处理!");
RedisUtil.unlock(key);
return ServiceResponse.success(false);
}
......@@ -302,6 +363,7 @@ public class LicenceOrderApiServiceImpl implements LicenceOrderApiService {
if ("license_refund".equals(infoType)) {
if (order.getQywxRefundTime() != null) {
//该笔订单已处理
logger.info("该笔订单已处理!");
RedisUtil.unlock(key);
return ServiceResponse.success(false);
}
......@@ -350,8 +412,8 @@ public class LicenceOrderApiServiceImpl implements LicenceOrderApiService {
licenceOrderService.updateLicenceOrderType(order.getOrderId(), 4, order.getEnterpriseId(), order.getWxEnterpriseId(), "系统", 1);
return ServiceResponse.success(true);
}
if (4 == order.getOrderStatus()){
return ServiceResponse.failure("-9999", "该笔订单已退款!");
if (1 != order.getOrderStatus()){
return ServiceResponse.failure("-9999", "该笔订单不是已支付状态!");
}
RefundReqDataDTO reqData = new RefundReqDataDTO(order.getWxOrderId(), null, null, String.valueOf(orderId), order.getPrice(),
order.getPrice(), null, null);
......@@ -412,8 +474,8 @@ public class LicenceOrderApiServiceImpl implements LicenceOrderApiService {
if (wxEnterpriseDTO == null) {
return ServiceResponse.failure("-9999", "微信企业不存在!!");
}
//先申请微信退款,再取消企业微信订单
wxRefund(orderId);
//取消企业微信订单,退款由财务人员手动触发
// wxRefund(orderId);
String openCorpid = wxEnterpriseDTO.getOpenCorpid();
String serviceCorpid = config.getCorpid();
ServiceResponse<QywxResponseDTO> response = qywxOrderApiService.cancelOrder(serviceCorpid, openCorpid, order.getQywxOrderId());
......@@ -450,4 +512,29 @@ public class LicenceOrderApiServiceImpl implements LicenceOrderApiService {
return ServiceResponse.success(map);
}
@Override
public ServiceResponse<Boolean> checkQywxOrderStatus(Long orderId) {
//查询企业微信订单状态是否过期,过期则不能上传订单支付凭证
TabHaobanLicenceOrder order = licenceOrderService.getLicenceOrderDetail(orderId);
if (null == order){
return ServiceResponse.failure("9999", "订单不存在!!");
}
WxEnterpriseDTO wxEnterpriseDTO = wxEnterpriseService.selectById(order.getWxEnterpriseId());
if (wxEnterpriseDTO == null) {
return ServiceResponse.failure("9999", "微信企业不存在!!");
}
String openCorpid = wxEnterpriseDTO.getOpenCorpid();
String serviceCorpid = config.getCorpid();
FeeOrderDeatilResponseDTO dto = qywxUserApiService.getOrder(openCorpid, serviceCorpid, order.getQywxOrderId());
if (null != dto && null != dto.getOrder() && dto.getOrder().getOrderStatus() == 3){
//订单失效,记录订单状态
licenceOrderService.updateLicenceOrderType(order.getOrderId(), 3, order.getEnterpriseId(),
order.getWxEnterpriseId(), "系统", 0);
licenceOrderService.updateLicenceOrderType(order.getOrderId(), 2, order.getEnterpriseId(),
order.getWxEnterpriseId(), "系统", 1);
return ServiceResponse.failure("-9999","企业微信订单已过期!");
}
return ServiceResponse.success();
}
}
......@@ -33,6 +33,7 @@
<result column="prepay_id" property="prepayId"/>
<result column="wx_order_id" property="wxOrderId"/>
<result column="wx_url" property="wxUrl"/>
<result column="qywx_expire_time" property="qywxExpireTime"/>
</resultMap>
<sql id="Base_Column_List">
order_id,
......@@ -65,7 +66,8 @@
expire_time,
prepay_id,
wx_order_id,
wx_url
wx_url,
qywx_expire_time
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.licence.TabHaobanLicenceOrder"
......@@ -98,7 +100,8 @@
update_time,
creator_id,
creator_name,
expire_time)
expire_time,
qywx_expire_time)
VALUES (#{orderId,jdbcType=BIGINT},
#{enterpriseId,jdbcType=VARCHAR},
#{wxEnterpriseId,jdbcType=VARCHAR},
......@@ -126,7 +129,8 @@
now(),
#{creatorId,jdbcType=VARCHAR},
#{creatorName,jdbcType=VARCHAR},
#{expireTime,jdbcType=VARCHAR})
#{expireTime,jdbcType=TIMESTAMP},
#{qywxExpireTime,jdbcType=TIMESTAMP})
]]>
</insert>
......@@ -205,7 +209,7 @@
FROM tab_haoban_licence_order
WHERE wx_enterprise_id = #{wxEnterpriseId}
and delete_flag = 0
and order_status = 0 limit 1
and qywx_order_status = 0 limit 1
</select>
<select id="getLicenceOrderPage" resultMap="BaseResultMap">
......
......@@ -5,6 +5,7 @@ import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.licence.LicenceOrderDTO;
import com.gic.haoban.manage.api.dto.licence.LicenceOrderPageDTO;
import com.gic.haoban.manage.api.dto.qdto.licence.LicenceOrderPageQDTO;
import com.gic.haoban.manage.api.dto.qdto.licence.LicenceOrderQDTO;
import com.gic.haoban.manage.api.service.licence.LicenceOrderApiService;
import com.gic.haoban.manage.service.entity.licence.TabHaobanLicenceOrder;
import com.gic.haoban.manage.service.service.licence.LicenceOrderService;
......@@ -68,4 +69,18 @@ public class LicenceOrderServiceTest {
public void test7(){
licenceOrderApiService.hasPopup("ca66a01b79474c40b3e7c7f93daf1a3b");
}
@Test
public void test8(){
LicenceOrderQDTO licenceOrderQDTO = new LicenceOrderQDTO();
licenceOrderQDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000");
licenceOrderQDTO.setWxEnterpriseId("ca66a01b79474c40b3e7c7f93daf1a3b");
licenceOrderQDTO.setOrderType(1);
licenceOrderQDTO.setExternalContactCount(10);
licenceOrderQDTO.setTimeType(1);
licenceOrderQDTO.setTimeValue(2);
licenceOrderQDTO.setPayType(1);
ServiceResponse<String> stringServiceResponse = licenceOrderApiService.saveOrUpdateLicenceOrder(licenceOrderQDTO);
}
}
......@@ -9,7 +9,6 @@ import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.PageHelperUtils;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.EnterpriseService;
......@@ -98,38 +97,39 @@ public class LicenceOrderController {
// }
/**
* 新增或者修改订单
* 新增订单
*
* @param licenceOrderQO
* @return JSONObject key:orderId 和 price
*/
@RequestMapping("licence-order-saveOrUpdate")
@GicLogRecord(value = "${#logValue}", category = GicLogRecordCategoryEnum.HB_LICENCE_ORDER,
optType = GicLogRecordOptTypeEnum.HB_1004_01, userFunc = LogRecordUserServiceImpl.class, optPage = "购买企业微信许可账号")
public RestResponse<String> saveOrUpdateLicenceOrder(@RequestBody LicenceOrderQO licenceOrderQO) {
public RestResponse<JSONObject> saveOrUpdateLicenceOrder(@RequestBody LicenceOrderQO licenceOrderQO) {
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
if (loginUser == null || StringUtils.isBlank(loginUser.getEnterpriseId())) {
return RestResponse.failure(Convert.toStr(HaoBanErrCode.ERR_4.getCode()), HaoBanErrCode.ERR_4.getMsg());
}
//金额校验
Integer integer = licenceOrderQO.checkPrice();
if (integer == -1) {
return RestResponse.failure("-9999", "许可账号数量有误!");
} else if (integer == 0) {
return RestResponse.failure("-9999", "购买金额计算有误!");
}
LicenceOrderQDTO licenceOrderQDTO = JSONObject.parseObject(JSONObject.toJSONString(licenceOrderQO), LicenceOrderQDTO.class);
licenceOrderQDTO.setEnterpriseId(loginUser.getEnterpriseId());
licenceOrderQDTO.setWxEnterpriseId(loginUser.getWxEnterpriseId());
licenceOrderQDTO.setCreatorId(loginUser.getClerkId());
licenceOrderQDTO.setCreatorName(loginUser.getClerkName());
String result = licenceOrderApiService.saveOrUpdateLicenceOrder(licenceOrderQDTO).getResult();
ServiceResponse<String> response = licenceOrderApiService.saveOrUpdateLicenceOrder(licenceOrderQDTO);
if (response.isSuccess()) {
JSONObject object = JSONObject.parseObject(response.getResult(), JSONObject.class);
String time = "";
if (licenceOrderQO.getTimeType() == 1) {
time = licenceOrderQO.getTimeValue() + "个月";
} else {
time = licenceOrderQO.getTimeValue() + "天";
}
String logValue = "【购买企微许可账号】:订单编号ZH" + result + ",企业员工账号" + licenceOrderQO.getExternalContactCount() + "个,时长" + time;
String logValue = "【购买企微许可账号】:订单编号ZH" + object.getString("orderId") + ",企业员工账号" + licenceOrderQO.getExternalContactCount() + "个,时长" + time;
GicLogRecordEvaluationContext.putAttribute("logValue", logValue);
return RestResponse.successResult(result);
return RestResponse.successResult(object);
}
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure(response.getCode(), response.getMessage());
}
/**
......@@ -155,7 +155,7 @@ public class LicenceOrderController {
}
/**
* 取消订单/订单已经过期
* 取消订单
*/
@RequestMapping("licence-order-cancel")
@GicLogRecord(value = "${#logValue}", category = GicLogRecordCategoryEnum.HB_LICENCE_ORDER,
......@@ -173,11 +173,19 @@ public class LicenceOrderController {
String enterpriseId = loginUser.getEnterpriseId();
String wxEnterpriseId = loginUser.getWxEnterpriseId();
String clerkName = loginUser.getClerkName();
//取消企业微信订单
ServiceResponse<Boolean> response = licenceOrderApiService.cancelQywxOrder(orderId);
if (response.isSuccess()) {
Boolean result = licenceOrderApiService.updateLicenceOrderType(orderId, type, enterpriseId, wxEnterpriseId, clerkName, 1).getResult();
//操作日志记录
String logValue = "【取消购买企微许可账号订单】:订单编号" + dto.getOrderNumber() + ",取消时间" + DateUtil.dateToStr(new Date(), DateUtil.FORMAT_DATETIME_19);
GicLogRecordEvaluationContext.putAttribute("logValue", logValue);
return RestResponse.successResult(result);
}
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure(response.getCode(), response.getMessage());
}
/**
* 订单凭证上传
......@@ -198,10 +206,14 @@ public class LicenceOrderController {
String enterpriseId = loginUser.getEnterpriseId();
String wxEnterpriseId = loginUser.getWxEnterpriseId();
String clerkName = loginUser.getClerkName();
Boolean result = licenceOrderApiService.uploadLicenceOrderVoucher(orderId, voucher, enterpriseId, wxEnterpriseId, clerkName).getResult();
ServiceResponse<Boolean> response = licenceOrderApiService.uploadLicenceOrderVoucher(orderId, voucher, enterpriseId, wxEnterpriseId, clerkName);
if (response.isSuccess()) {
String logValue = "【上传购买企微许可账号支付凭证】:订单编号" + dto.getOrderNumber() + ",上传时间" + DateUtil.dateToStr(new Date(), DateUtil.FORMAT_DATETIME_19);
GicLogRecordEvaluationContext.putAttribute("logValue", logValue);
return RestResponse.successResult(result);
return RestResponse.successResult(true);
}
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure(response.getCode(), response.getMessage());
}
/**
......@@ -226,7 +238,7 @@ public class LicenceOrderController {
return RestResponse.successResult(map);
}
Integer money = result.getPrice();
if (null != loginUser.getPhoneNumber() && Arrays.asList("13456789987", "13429152802","13383841777","13576223447").contains(loginUser.getPhoneNumber())) {
if (null != loginUser.getPhoneNumber() && Arrays.asList("13456789987", "13429152802", "13383841777", "13576223447").contains(loginUser.getPhoneNumber())) {
//测试账号付款一分
money = 1;
}
......
......@@ -154,5 +154,9 @@ public class LicenceOrderVO implements Serializable {
* 订单进度list
*/
private List<LicenceOrderProgressVO> OrderProgressList;
/**
* 企业微信订单过期时间
*/
private Date qywxExpireTime;
}
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