|
@@ -30,6 +30,7 @@ import org.springframework.web.servlet.view.RedirectView;
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.net.URLEncoder;
|
|
|
+import java.sql.Timestamp;
|
|
|
import java.time.*;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
@@ -133,6 +134,8 @@ public class WeiXinCorpController {
|
|
|
SysRoleFunctionMapper sysRoleFunctionMapper;
|
|
|
@Resource
|
|
|
ExpenseTypeService expenseTypeService;
|
|
|
+ @Resource
|
|
|
+ private WxOrderMapper wxOrderMapper;
|
|
|
|
|
|
public static String SUITE_ACCESS_TOKEN = null;
|
|
|
public static long suiteTokenExpireTime = 0L;
|
|
@@ -491,6 +494,16 @@ public class WeiXinCorpController {
|
|
|
org.json.JSONObject jsonObject = XML.toJSONObject(sMsg);
|
|
|
log.info("json=="+jsonObject.toString());
|
|
|
jsonObject = jsonObject.getJSONObject("xml");
|
|
|
+
|
|
|
+ //存储更新订单、更新公司续费情况
|
|
|
+ if (jsonObject.has("OrderId")){
|
|
|
+ boolean b = saveOrderAndUpCompany(jsonObject);
|
|
|
+ if (!b){
|
|
|
+ System.out.println("+++++++++++++++++++微信应用市场付费回调处理失败+++++++++++++++++++++++");
|
|
|
+ System.out.println(jsonObject);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if(jsonObject.has("Event") && ("subscribe".equals(jsonObject.getString("Event")))){
|
|
|
//成员关注应用事件,发生在该企业已经开通应用的情况下。
|
|
|
System.out.println("成员关注应用事件!");
|
|
@@ -2629,4 +2642,141 @@ public class WeiXinCorpController {
|
|
|
int cnt = projectAuditorMapper.selectCount(new QueryWrapper<ProjectAuditor>().eq("auditor_id", userId));
|
|
|
return cnt>0;
|
|
|
}
|
|
|
+
|
|
|
+ private boolean saveOrderAndUpCompany(org.json.JSONObject jsonObject) throws Exception {
|
|
|
+ System.err.println("+++++++++++++++++++"+"订单回调时间"+"++++++++++++++++++++++");
|
|
|
+ String infoType = jsonObject.getString("InfoType");
|
|
|
+ String suiteAccessToken = getSuiteAccessToken();
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ RestTemplate restTemplate = new RestTemplate();
|
|
|
+ MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
|
|
|
+ headers.setContentType(type);
|
|
|
+ headers.add("Accept", MediaType.APPLICATION_JSON.toString());
|
|
|
+ //版本变更
|
|
|
+ if ("change_editon".equals(infoType)){
|
|
|
+ String url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_auth_info?suite_access_token="+suiteAccessToken;
|
|
|
+ String paidCorpId = jsonObject.getString("PaidCorpId");
|
|
|
+ WxCorpInfo corpid = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", paidCorpId));
|
|
|
+ Company company = companyMapper.selectById(corpid.getCompanyId());
|
|
|
+ JSONObject map = new JSONObject();
|
|
|
+ map.put("auth_corpid",corpId);
|
|
|
+ map.put("permanent_code",corpid.getPermanentCode());
|
|
|
+ HttpEntity<JSONObject> detailEntity = new HttpEntity<>(map, headers);
|
|
|
+ ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(url, detailEntity, String.class);
|
|
|
+ JSONObject json = JSONObject.parseObject(detailResponseEntity.getBody());
|
|
|
+ if (json.getInteger("errcode")==0){
|
|
|
+ String editionName = json.getString("edition_name");
|
|
|
+ switch (editionName){
|
|
|
+ case "工时基础版":
|
|
|
+ company.setPackageProject(0);
|
|
|
+ company.setPackageOa(0);
|
|
|
+ company.setPackageExpense(0);
|
|
|
+ company.setPackageCustomer(0);
|
|
|
+ company.setPackageEngineering(0);
|
|
|
+ company.setPackageProvider(0);
|
|
|
+ break;
|
|
|
+ case "项目管理专业版":
|
|
|
+ company.setPackageProject(1);//项目协作平台
|
|
|
+ company.setPackageOa(0);//OA平台;请假,出差等
|
|
|
+ company.setPackageExpense(1);//费用报销
|
|
|
+ company.setPackageCustomer(0);//客户管理
|
|
|
+ company.setPackageEngineering(0);//工程专业
|
|
|
+ company.setPackageProvider(0);//供应商模块
|
|
|
+ break;
|
|
|
+ case "建筑工程管理专业版":
|
|
|
+ company.setPackageProject(1);//项目协作平台
|
|
|
+ company.setPackageOa(0);//OA平台;请假,出差等
|
|
|
+ company.setPackageExpense(1);//费用报销
|
|
|
+ company.setPackageCustomer(1);//客户管理
|
|
|
+ company.setPackageEngineering(1);//工程专业
|
|
|
+ company.setPackageProvider(0);//供应商模块
|
|
|
+ break;
|
|
|
+ case "企业办公旗舰版":
|
|
|
+ company.setPackageProject(1);//项目协作平台
|
|
|
+ company.setPackageOa(1);//OA平台;请假,出差等
|
|
|
+ company.setPackageExpense(1);//费用报销
|
|
|
+ company.setPackageCustomer(1);//客户管理
|
|
|
+ company.setPackageEngineering(0);//工程专业
|
|
|
+ company.setPackageProvider(1);//供应商模块
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ companyMapper.updateById(company);
|
|
|
+ }else {
|
|
|
+ System.out.println("++++++++++++++++++++++"+"版本变更失败!"+"++++++++++++++++++++++++");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ String orderId = "";
|
|
|
+ if (jsonObject.getString("OrderId")!=null){
|
|
|
+ orderId = jsonObject.getString("OrderId");
|
|
|
+ }else {
|
|
|
+ orderId = jsonObject.getString("NewOrderId");
|
|
|
+ }
|
|
|
+ WxOrder wxOrder = new WxOrder();
|
|
|
+ String detailUrl = " https://qyapi.weixin.qq.com/cgi-bin/service/get_order?suite_access_token=" + suiteAccessToken;
|
|
|
+ JSONObject detailMap = new JSONObject();
|
|
|
+ detailMap.put("orderid",orderId);
|
|
|
+ HttpEntity<JSONObject> detailEntity = new HttpEntity<>(detailMap, headers);
|
|
|
+ ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(detailUrl, detailEntity, String.class);
|
|
|
+ String body = detailResponseEntity.getBody();
|
|
|
+ JSONObject orderDetail = JSONObject.parseObject(body);
|
|
|
+ if (orderDetail.getInteger("errcode")==0){
|
|
|
+ wxOrder.setOrderid(orderDetail.getString("orderid"));
|
|
|
+ wxOrder.setOrderStatus(orderDetail.getInteger("order_status"));
|
|
|
+ wxOrder.setOrderType(orderDetail.getInteger("order_type"));
|
|
|
+ wxOrder.setPaidCorpid(orderDetail.getString("paid_corpid"));
|
|
|
+ wxOrder.setOperatorId(orderDetail.getString("operator_id"));
|
|
|
+ wxOrder.setSuiteid(orderDetail.getString("suiteid"));
|
|
|
+ wxOrder.setAppid(orderDetail.getString("appid"));
|
|
|
+ wxOrder.setEditionId(orderDetail.getString("edition_id"));
|
|
|
+ wxOrder.setEditionName(orderDetail.getString("edition_name"));
|
|
|
+ wxOrder.setPrice(orderDetail.getDouble("price"));
|
|
|
+ wxOrder.setUserCount(orderDetail.getInteger("user_count"));
|
|
|
+ wxOrder.setOrderPeriod(orderDetail.getInteger("order_period"));
|
|
|
+ LocalDateTime order_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("order_time")/1000,0,ZoneOffset.ofHours(8));
|
|
|
+ wxOrder.setOrderTime(order_time);
|
|
|
+ LocalDateTime paid_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("paid_time")/1000,0,ZoneOffset.ofHours(8));
|
|
|
+ wxOrder.setPaidTime(paid_time);
|
|
|
+ LocalDateTime begin_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("begin_time")/1000,0,ZoneOffset.ofHours(8));
|
|
|
+ wxOrder.setBeginTime(begin_time);
|
|
|
+ LocalDateTime end_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("end_time")/1000,0,ZoneOffset.ofHours(8));
|
|
|
+ wxOrder.setEndTime(end_time);
|
|
|
+ wxOrder.setOrderFrom(orderDetail.getInteger("order_from"));
|
|
|
+ wxOrder.setOperatorCorpid(orderDetail.getString("operator_corpid"));
|
|
|
+ wxOrder.setServiceShareAmount(orderDetail.getString("service_share_amount"));
|
|
|
+ wxOrder.setPlatformShareAmount(orderDetail.getString("platform_share_amount"));
|
|
|
+ wxOrder.setDealerShareAmount(orderDetail.getString("dealer_share_amount"));
|
|
|
+ JSONObject dealer_corp_info = orderDetail.getJSONObject("dealer_corp_info");
|
|
|
+ wxOrder.setDealerCorpid(dealer_corp_info.getString("corpid"));
|
|
|
+ wxOrder.setDealerCorpName(dealer_corp_info.getString("corp_name"));
|
|
|
+ //获取该公司对象
|
|
|
+ WxCorpInfo corpid = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", wxOrder.getPaidCorpid()));
|
|
|
+ Company company = companyMapper.selectById(corpid.getCompanyId());
|
|
|
+ if ("open_order".equals(infoType)){
|
|
|
+ wxOrderMapper.insert(wxOrder);
|
|
|
+ }else if ("change_order".equals(infoType)){
|
|
|
+ wxOrder.setOldOrderid(jsonObject.getString("OldOrderId"));
|
|
|
+ wxOrderMapper.insert(wxOrder);
|
|
|
+ }else if("pay_for_app_success".equals(infoType)){
|
|
|
+ wxOrderMapper.updateById(wxOrder);
|
|
|
+ if (wxOrder.getOrderPeriod().equals(365)){
|
|
|
+ //若到期时间早已过期,则取当前时间加上开通时长
|
|
|
+ if (LocalDateTime.now().isAfter(company.getExpirationDate())){
|
|
|
+ company.setExpirationDate(LocalDateTime.now().plusYears(1));
|
|
|
+ }else {
|
|
|
+ company.setExpirationDate(company.getExpirationDate().plusYears(1));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if ("refund".equals(infoType)){
|
|
|
+ wxOrderMapper.updateById(wxOrder);
|
|
|
+ //退款则将其到期时间设置为现在的时间减去一天
|
|
|
+ company.setExpirationDate(LocalDateTime.now().minusDays(1));
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ System.out.println("+++++++++++++"+"微信订单查询更新失败"+"+++++++++++++++");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|