添加工单接受提醒与工单未完结提醒
This commit is contained in:
parent
00be6f52ab
commit
6b5935f880
@ -65,7 +65,7 @@ public class EasyLearnUnionPayBo {
|
||||
* 订单类型
|
||||
*/
|
||||
@NotNull(message = "联合支付类型不能为空")
|
||||
@ApiModelProperty(value = "联合支付类型(PREPAYMENT:预付;REPAYMENT:还款;MEMBER:会员)",required = true)
|
||||
@ApiModelProperty(value = "联合支付类型(WX_PAY:微信支付;PREPAYMENT:预付;REPAYMENT:还款;MEMBER:会员)",required = true)
|
||||
private String easyLearnUnionPay;
|
||||
|
||||
/**
|
||||
@ -87,5 +87,11 @@ public class EasyLearnUnionPayBo {
|
||||
@ApiModelProperty("订单内容(课卡名/商品名)")
|
||||
private String orderContent;
|
||||
|
||||
/**
|
||||
* 顾问
|
||||
*/
|
||||
@ApiModelProperty("顾问")
|
||||
private String counselor;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,15 +1,9 @@
|
||||
package com.cpop.jambox.business.controller.backstage;
|
||||
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.cpop.core.base.R;
|
||||
import com.cpop.jambox.business.bo.EasyLearnPageBo;
|
||||
import com.cpop.jambox.business.bo.EasyLearnUnifiedPayBo;
|
||||
import com.cpop.jambox.business.bo.EasyLearnUnionPayBo;
|
||||
import com.cpop.jambox.business.bo.OncePlaceOrderBo;
|
||||
import com.cpop.jambox.business.dto.EasyLearnPageDto;
|
||||
import com.cpop.jambox.business.service.EasyLearnOrderService;
|
||||
import com.cpop.jambox.business.vo.EasyLearnPageVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
@ -17,10 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
/**
|
||||
* 果酱-放心学订单表 控制层。
|
||||
*
|
||||
|
||||
@ -583,7 +583,7 @@ public class EasyLearnOrderServiceImpl extends ServiceImpl<EasyLearnOrderMapper,
|
||||
orderRequest.setSpbillCreateIp(IpUtils.getHostIp())
|
||||
.setOpenid(bo.getOpenId())
|
||||
//商品描述
|
||||
.setBody("一次性支付")
|
||||
.setBody("联合支付")
|
||||
.setOutTradeNo(easyLearnOrder.getId())
|
||||
//元转分
|
||||
.setTotalFee(easyLearnOrder.getTotalAmount().scaleByPowerOfTen(2).intValue())
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cpop.mall.web;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cpop.core.utils.uuid.IdUtils;
|
||||
import com.cpop.pay.framewok.config.wxPay.WxPayProperties;
|
||||
@ -51,18 +52,18 @@ public class CpopWxPayTests {
|
||||
WxPayRefundV3Request.Amount amount = new WxPayRefundV3Request.Amount();
|
||||
//退款金额(单位分)
|
||||
//int refund = order.getTotalAmount().scaleByPowerOfTen(2).intValue();
|
||||
int refund = 100;
|
||||
int refund = 8400;
|
||||
amount.setRefund(refund)
|
||||
.setTotal(refund)
|
||||
.setCurrency("CNY");
|
||||
request.setTransactionId("4200002127202401249900965739")
|
||||
request.setTransactionId("4200002111202402019716818254")
|
||||
//.setOutTradeNo("1000000000202401121937112562856")
|
||||
//.setTransactionId(order.getOutOrderNo())
|
||||
//.setOutTradeNo(order.getId())
|
||||
.setNotifyUrl(wxPayProperties.getNotifyRefund())
|
||||
.setOutRefundNo(IdUtils.fastSimpleUUID())
|
||||
.setOutRefundNo(IdUtil.getSnowflakeNextIdStr())
|
||||
.setSubMchid("1661323640")
|
||||
.setReason("测试退款")
|
||||
.setReason("先学后付重复核销退款")
|
||||
.setAmount(amount);
|
||||
WxPayRefundV3Result result = wxPayService.refundV3(request);
|
||||
System.out.println(result);
|
||||
@ -80,13 +81,14 @@ public class CpopWxPayTests {
|
||||
//ProfitSharing profitSharing = SpringUtils.getBean(ProfitSharingService.class).getById("77860920238751744");
|
||||
//profitSharingReturnRequest.setOrderId(profitSharing.getOutProfitSharingId());
|
||||
//profitSharingReturnRequest.setOutReturnNo(profitSharing.getId());
|
||||
profitSharingReturnRequest.setOrderId("30001002562023122858679309202");
|
||||
profitSharingReturnRequest.setOutReturnNo("97948799695069184");
|
||||
profitSharingReturnRequest.setOrderId("30001803972024020160326538828");
|
||||
profitSharingReturnRequest.setOutReturnNo(IdUtil.getSnowflakeNextIdStr());
|
||||
profitSharingReturnRequest.setDescription("分账退款");
|
||||
profitSharingReturnRequest.setSubMchId("1661323640");
|
||||
profitSharingReturnRequest.setReturnAccount("1618884922");
|
||||
profitSharingReturnRequest.setReturnAccountType("MERCHANT_ID");
|
||||
//profitSharingReturnRequest.setAmount(profitSharing.getAmount());
|
||||
profitSharingReturnRequest.setReturnAmount(6);
|
||||
profitSharingReturnRequest.setReturnAmount(504);
|
||||
wxPayService.getProfitSharingService().profitSharingReturn(profitSharingReturnRequest);
|
||||
}
|
||||
|
||||
@ -135,8 +137,8 @@ public class CpopWxPayTests {
|
||||
public void getOrderInfo() throws WxPayException {
|
||||
WxPayConfig config = wxPayService.getConfig();
|
||||
config.setSubMchId("1661323640");
|
||||
WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder("4200002124202401230220836382", null);
|
||||
System.out.println(wxPayOrderQueryResult);
|
||||
WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder("4200002122202402014187762767", null);
|
||||
System.out.println(JSONObject.toJSONString(wxPayOrderQueryResult));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -148,8 +150,8 @@ public class CpopWxPayTests {
|
||||
@Test
|
||||
public void getSharingInfo() throws WxPayException {
|
||||
ProfitSharingQueryRequest profitSharingQueryRequest = new ProfitSharingQueryRequest();
|
||||
profitSharingQueryRequest.setOutOrderNo("107321591016267776").setTransactionId("4200002119202401230387612728");
|
||||
profitSharingQueryRequest.setSubMchId("1661807764");
|
||||
profitSharingQueryRequest.setOutOrderNo("1736629608413073417").setTransactionId("4200002111202402019716818254");
|
||||
profitSharingQueryRequest.setSubMchId("1661323640");
|
||||
ProfitSharingQueryResult result = wxPayService.getProfitSharingService().profitSharingQuery(profitSharingQueryRequest);
|
||||
System.out.println(result.getResultCode());
|
||||
}
|
||||
@ -188,7 +190,7 @@ public class CpopWxPayTests {
|
||||
@Test
|
||||
public void getPayScoreUserSignPlans() throws WxPayException {
|
||||
wxPayService.getConfig().setServiceId("00003053000000169450961228104460");
|
||||
wxPayService.getV3("https://api.mch.weixin.qq.com/v3/payscore/sign-plan/partner/user-sign-plans/merchant-sign-plan-no/1735294783081091132?sub_mchid=1618925571");
|
||||
wxPayService.getV3("https://api.mch.weixin.qq.com/v3/payscore/sign-plan/partner/user-sign-plans/merchant-sign-plan-no/1736679801829396540?sub_mchid=1661323640");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -133,8 +133,6 @@ wx:
|
||||
corpId: ww9b83a363662f219f
|
||||
#o2认证注册到oam中的地址
|
||||
oAuth2registerUrl: https://oam.jamboxsys.com/wxCpRegister/
|
||||
#登陆跳转地址
|
||||
oAuth2LoginUri: https://oam.jamboxsys.com/wxCpLogin/
|
||||
appConfigs:
|
||||
#通讯录
|
||||
- agentId: 1000000
|
||||
|
||||
@ -71,7 +71,7 @@ public class CpopCoreTests {
|
||||
System.out.println("私钥:");
|
||||
System.out.println(privateKey);
|
||||
System.out.println();
|
||||
String source = "Admin@123";
|
||||
String source = "jambox5772";
|
||||
System.out.println("待加密字符串:"+source);
|
||||
System.out.println();
|
||||
String strEncrypt = rsaUtils.encrypt(source);
|
||||
|
||||
@ -16,6 +16,7 @@ import com.cpop.jambox.business.service.StoreExtendService;
|
||||
import com.cpop.jambox.framework.constant.JamboxCloudUrl;
|
||||
import com.cpop.pay.framewok.config.wxPay.WxPayProperties;
|
||||
import com.cpop.pay.framewok.handler.wxPay.WxPayHandler;
|
||||
import com.github.binarywang.wxpay.bean.payscore.*;
|
||||
import com.github.binarywang.wxpay.bean.profitsharing.request.ProfitSharingBillV3Request;
|
||||
import com.github.binarywang.wxpay.bean.profitsharing.request.ProfitSharingReceiverRequest;
|
||||
import com.github.binarywang.wxpay.bean.profitsharing.request.ProfitSharingRequest;
|
||||
@ -31,6 +32,7 @@ import com.github.binarywang.wxpay.bean.result.WxPayApplyBillV3Result;
|
||||
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
|
||||
import com.github.binarywang.wxpay.config.WxPayConfig;
|
||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||
import com.github.binarywang.wxpay.service.PartnerPayScoreSignPlanService;
|
||||
import com.github.binarywang.wxpay.service.ProfitSharingService;
|
||||
import com.github.binarywang.wxpay.service.WxPayService;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
@ -273,17 +275,62 @@ public class CpopEasyLearnTest {
|
||||
|
||||
@Test
|
||||
public void queryOrderAndSharing() throws WxPayException {
|
||||
WxPayService wxPayService = wxPayHandler.getWxPayService(null, "1663310469");
|
||||
WxPayService wxPayService = wxPayHandler.getWxPayService(null, "1661323640");
|
||||
WxPayOrderQueryRequest wxPayOrderQueryRequest = new WxPayOrderQueryRequest();
|
||||
wxPayOrderQueryRequest.setTransactionId("4200001925202401173471747106");
|
||||
wxPayOrderQueryRequest.setTransactionId("4200002116202402013721924373");
|
||||
WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder(wxPayOrderQueryRequest);
|
||||
ProfitSharingService profitSharingService = wxPayService.getProfitSharingService();
|
||||
ProfitSharingV3Result profitSharingV3Result = profitSharingService.profitSharingQueryV3("105490200209170432", "4200002126202401189482541307", "1663310469");
|
||||
ProfitSharingOrderAmountQueryV3Result profitSharingOrderAmountQueryV3Result = profitSharingService.profitSharingUnsplitAmountQueryV3("4200001925202401173471747106");
|
||||
ProfitSharingV3Result profitSharingV3Result = profitSharingService.profitSharingQueryV3("1752967538354028544", "4200002116202402013721924373", "1661323640");
|
||||
System.out.println(JSONObject.toJSONString(wxPayOrderQueryResult));
|
||||
System.out.println(JSONObject.toJSONString(profitSharingV3Result));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryServiceOrder() throws WxPayException {
|
||||
WxPayService wxPayService = wxPayHandler.getWxPayService();
|
||||
WxPartnerPayScoreResult wxPartnerPayScoreResult = wxPayService.getPartnerPayScoreService().queryServiceOrder("00003053000000169450961228104460", "1661323640", "1736629608413073418", null);
|
||||
System.out.println(JSONObject.toJSONString(wxPartnerPayScoreResult));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void completeOrder() throws WxPayException {
|
||||
WxPayService wxPayService = wxPayHandler.getWxPayService();
|
||||
WxPartnerPayScoreRequest wxPayScoreRequest = new WxPartnerPayScoreRequest();
|
||||
PostPayment postPayment = new PostPayment();
|
||||
List<PostPayment> postPayments = new ArrayList<>();
|
||||
postPayment.setAmount(8400);
|
||||
postPayment.setName("成人hiphop(基础)-课程核销");
|
||||
postPayments.add(postPayment);
|
||||
wxPayScoreRequest.setOutOrderNo("1736679801829396489").setPostPayments(postPayments).setTotalAmount(8400);
|
||||
TimeRange timeRange = new TimeRange();
|
||||
timeRange.setStartTime("20240130235313");
|
||||
timeRange.setEndTime("20240130235422");
|
||||
wxPayScoreRequest.setTimeRange(timeRange);
|
||||
wxPayScoreRequest.setSubMchid("1661323640");
|
||||
wxPayScoreRequest.setServiceId("00003053000000169450961228104460");
|
||||
wxPayService.getPartnerPayScoreService().completeServiceOrder(wxPayScoreRequest);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getWxPayPlan() {
|
||||
WxPayService wxPayService = wxPayHandler.getWxPayService(null,"1661323640");
|
||||
PartnerUserSignPlanEntity result = null;
|
||||
try {
|
||||
result = wxPayService.getPartnerPayScoreSignPlanService().queryUserSignPlans("1736679801829396540", "1661323640");
|
||||
System.out.println(JSONObject.toJSONString(result));
|
||||
} catch (WxPayException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryOrder() throws WxPayException {
|
||||
WxPayService wxPayService = wxPayHandler.getWxPayService(null, "1661323640");
|
||||
WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder("4200002115202401300171921108",null);
|
||||
System.out.println(JSONObject.toJSONString(wxPayOrderQueryResult));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void orderProfitSharing() throws WxPayException {
|
||||
//固定商户信息
|
||||
@ -330,7 +377,7 @@ public class CpopEasyLearnTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testtest(){
|
||||
public void subSpecialCharacter(){
|
||||
String serviceIntroduction = "排课000\uD83C\uDF3F\uD83C\uDF8B\uD83C\uDF15\uD83C\uDF44\uD83D\uDC1A";
|
||||
String newServiceIntroduction = "";
|
||||
//特殊字符过滤
|
||||
@ -368,4 +415,6 @@ public class CpopEasyLearnTest {
|
||||
|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
|
||||
|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.cpop.oam.web;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cpop.common.utils.StringUtils;
|
||||
import com.cpop.core.base.enums.OrderSource;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
@ -17,6 +19,7 @@ import com.github.binarywang.wxpay.bean.payscore.PayScorePlanDetailResult;
|
||||
import com.github.binarywang.wxpay.bean.payscore.WxPartnerPayScoreSignPlanResult;
|
||||
import com.github.binarywang.wxpay.bean.profitsharing.result.ProfitSharingV3Result;
|
||||
import com.github.binarywang.wxpay.bean.request.WxPayPartnerOrderQueryV3Request;
|
||||
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
|
||||
import com.github.binarywang.wxpay.bean.result.WxPayPartnerOrderQueryV3Result;
|
||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||
import com.github.binarywang.wxpay.service.WxPayService;
|
||||
@ -53,7 +56,7 @@ import static com.cpop.system.business.entity.table.WxPayScoreTableDef.WX_PAY_SC
|
||||
*/
|
||||
@Slf4j
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@ActiveProfiles(profiles = {"prod","core"})
|
||||
@ActiveProfiles(profiles = {"dev","core","pay"})
|
||||
public class CpopOldDataSyncTests {
|
||||
|
||||
@Autowired
|
||||
@ -429,4 +432,16 @@ public class CpopOldDataSyncTests {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getWxPayPlanDetail() {
|
||||
WxPayService wxPayService = wxPayHandler.getWxPayService(null,"1661323640");
|
||||
PartnerUserSignPlanEntity result = null;
|
||||
try {
|
||||
WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder("4200002115202402010692134851", null);
|
||||
System.out.println(JSONObject.toJSONString(wxPayOrderQueryResult));
|
||||
} catch (WxPayException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
package com.cpop.oam.business.bo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @version 1.0.0
|
||||
* @since 2024-02-04 9:30
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value = "EnforceFinishWorkOrderBo对象", description = "强制办结工单")
|
||||
public class EnforceFinishWorkOrderBo {
|
||||
|
||||
/**
|
||||
* 工单id
|
||||
*/
|
||||
@NotBlank(message = "工单id不能为空")
|
||||
@ApiModelProperty(value = "工单id", required = true)
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 强制办结原因
|
||||
*/
|
||||
@NotBlank(message = "强制办结原因不能为空")
|
||||
@ApiModelProperty(value = "强制办结原因", required = true)
|
||||
private String enforceFinishReason;
|
||||
}
|
||||
@ -111,8 +111,7 @@ public class BackstageTaskTechnologyController {
|
||||
@PreAuthorize("@aps.hasPermission('oamTask:technology:deploy')")
|
||||
@ApiOperation("技术模块-任务归档-设置任务归档")
|
||||
@PutMapping("/setTaskArchiving/{taskId}")
|
||||
public R<Void> setTaskArchiving(@PathVariable @ApiParam("任务id")
|
||||
String taskId) {
|
||||
public R<Void> setTaskArchiving(@PathVariable @ApiParam("任务id") String taskId) {
|
||||
taskService.setTaskArchiving(taskId);
|
||||
return R.ok();
|
||||
}
|
||||
@ -365,4 +364,18 @@ public class BackstageTaskTechnologyController {
|
||||
return R.ok(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制办结工单
|
||||
* @author DB
|
||||
* @since 2024/2/4
|
||||
* @param bo 请求
|
||||
* @return R<Void>
|
||||
*/
|
||||
@PutMapping("/enforceFinishWorkOrder")
|
||||
@ApiOperation("强制办结工单")
|
||||
public R<Void> enforceFinishWorkOrder(@RequestBody @Validated EnforceFinishWorkOrderBo bo) {
|
||||
taskWorkOrderService.enforceFinishWorkOrder(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ import com.cpop.core.base.R;
|
||||
import com.cpop.core.base.entity.PageDomain;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.core.utils.sql.SqlUtils;
|
||||
import com.cpop.oam.business.bo.EnforceFinishWorkOrderBo;
|
||||
import com.cpop.oam.business.bo.TechnologyToolBo;
|
||||
import com.cpop.oam.business.vo.TechnologyToolPageVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
|
||||
@ -35,8 +35,8 @@ public class BackstageWxCpController {
|
||||
|
||||
/**
|
||||
* @author LOST.yuan
|
||||
* @Description 根据code换取用户信息
|
||||
* @date 14:52 2022/9/7
|
||||
* 根据code换取用户信息
|
||||
* @since 14:52 2022/9/7
|
||||
* @return {@link R<LoginUserInfoVo>}
|
||||
**/
|
||||
@GetMapping("/getOauth2Url")
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
package com.cpop.oam.business.dto;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.format.DateTimeFormat;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 数据导入Dto
|
||||
|
||||
@ -83,6 +83,11 @@ public class TaskWorkOrder extends BaseEntity implements Serializable {
|
||||
*/
|
||||
private LocalDateTime pauseExpireTime;
|
||||
|
||||
/**
|
||||
* 强制办结原因
|
||||
*/
|
||||
private String enforceFinishReason;
|
||||
|
||||
/**
|
||||
* 是否删除(0否1是)
|
||||
*/
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cpop.oam.business.service;
|
||||
|
||||
import com.cpop.oam.business.bo.EnforceFinishWorkOrderBo;
|
||||
import com.cpop.oam.business.vo.*;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
@ -122,4 +123,12 @@ public interface TaskWorkOrderService extends IService<TaskWorkOrder> {
|
||||
* @return R<Page<TaskWorkOrderPageVo>>
|
||||
*/
|
||||
Page<TaskWorkOrderStatPageVo> getWorkOrderStatPage(String staffId,LocalDate startDate,LocalDate endDate);
|
||||
|
||||
/**
|
||||
* 强制办结工单
|
||||
* @author DB
|
||||
* @since 2024/2/4
|
||||
* @param bo 请求参数
|
||||
*/
|
||||
void enforceFinishWorkOrder(EnforceFinishWorkOrderBo bo);
|
||||
}
|
||||
|
||||
@ -46,6 +46,8 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
@ -87,7 +89,6 @@ public class DataImportServiceImpl extends ServiceImpl<DataImportMapper, DataImp
|
||||
.orderBy(DATA_IMPORT.CREATE_TIME.desc()),
|
||||
DataImportPageVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增数据导入
|
||||
* @author DB
|
||||
@ -174,57 +175,81 @@ public class DataImportServiceImpl extends ServiceImpl<DataImportMapper, DataImp
|
||||
EasyExcel.read(file.getInputStream(), DataImportDto.class, new ReadListener<DataImportDto>() {
|
||||
@Override
|
||||
public void invoke(DataImportDto dataImportDto, AnalysisContext analysisContext) {
|
||||
//检查手机号
|
||||
if (StringUtils.isBlank(dataImportDto.getName())) {
|
||||
throw new ServiceException(String.format("第%s行姓名为空,请核实", analysisContext.readRowHolder().getRowIndex() + 1));
|
||||
}
|
||||
//检查手机号
|
||||
if (StringUtils.isBlank(dataImportDto.getPhone())) {
|
||||
dataImportDto.setPhone(IdUtil.getSnowflakeNextIdStr());
|
||||
}
|
||||
//课卡类型
|
||||
if (StringUtils.isBlank(dataImportDto.getCardType())) {
|
||||
dataImportDto.setCardType("少儿");
|
||||
}
|
||||
//计费类型
|
||||
if (StringUtils.isBlank(dataImportDto.getBillingType())) {
|
||||
dataImportDto.setBillingType("限时卡");
|
||||
}
|
||||
//首充课时
|
||||
if (dataImportDto.getFirstChargePeriod() == null) {
|
||||
dataImportDto.setFirstChargePeriod(0);
|
||||
}
|
||||
//剩余课时
|
||||
if (dataImportDto.getRemainingClassHours() == null) {
|
||||
dataImportDto.setFirstChargePeriod(0);
|
||||
}
|
||||
//消费金额
|
||||
if (dataImportDto.getAmountSpent() == null) {
|
||||
dataImportDto.setAmountSpent(0);
|
||||
}
|
||||
//课程顾问
|
||||
if (StringUtils.isBlank(dataImportDto.getBillingType())) {
|
||||
dataImportDto.setBillingType("校长");
|
||||
}
|
||||
//性别
|
||||
if (StringUtils.isBlank(dataImportDto.getSex())) {
|
||||
dataImportDto.setSex("女");
|
||||
}
|
||||
//课卡名称
|
||||
if (StringUtils.isBlank(dataImportDto.getCardName())) {
|
||||
throw new ServiceException(String.format("第%s行课卡名称为空,请核实", analysisContext.readRowHolder().getRowIndex() + 1));
|
||||
}
|
||||
//停卡时剩余天数
|
||||
if (dataImportDto.getStopCardRemainingDays() == null) {
|
||||
dataImportDto.setStopCardRemainingDays(0);
|
||||
dataImportDto.setCardStatus("使用中");
|
||||
//计费类型
|
||||
if (!StringUtils.equals(dataImportDto.getBillingType(), "储值卡")) {
|
||||
throw new ServiceException(String.format("第%s行计费类型不为储值卡时课卡类型不能为空,请核实", analysisContext.readRowHolder().getRowIndex() + 1));
|
||||
}
|
||||
} else {
|
||||
dataImportDto.setCardStatus("停卡");
|
||||
}
|
||||
//停卡缓冲天数
|
||||
if (dataImportDto.getStopCardBufferDays() == null) {
|
||||
dataImportDto.setStopCardBufferDays(0);
|
||||
}
|
||||
if (dataImportDto.getStopCardBufferDays() != 0 && StringUtils.equals("使用中", dataImportDto.getCardStatus())) {
|
||||
dataImportDto.setCardStatus("未激活");
|
||||
} else if (dataImportDto.getStopCardBufferDays() != 0 && StringUtils.equals("停卡", dataImportDto.getCardStatus())) {
|
||||
dataImportDto.setCardStatus("停卡未激活");
|
||||
//计费类型
|
||||
if (!StringUtils.equals(dataImportDto.getBillingType(), "暂无")) {
|
||||
//计费类型
|
||||
if (StringUtils.isBlank(dataImportDto.getBillingType())) {
|
||||
throw new ServiceException(String.format("第%s行课卡类型不为暂无时计费类型不能为空,请核实", analysisContext.readRowHolder().getRowIndex() + 1));
|
||||
} else {
|
||||
if (!StringUtils.equals(dataImportDto.getBillingType(), "时限卡")){
|
||||
//首充课时
|
||||
if (dataImportDto.getFirstChargePeriod() == null || dataImportDto.getFirstChargePeriod() <= 0) {
|
||||
throw new ServiceException(String.format("第%s行计费类型不为时限卡时首充课时不能为空或0,请核实", analysisContext.readRowHolder().getRowIndex() + 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
//剩余课时
|
||||
if (dataImportDto.getRemainingClassHours() == null) {
|
||||
dataImportDto.setFirstChargePeriod(0);
|
||||
}
|
||||
//消费金额
|
||||
if (dataImportDto.getAmountSpent() == null) {
|
||||
dataImportDto.setAmountSpent(0);
|
||||
}
|
||||
//验证日期是否标准并且办卡日期小于有效期
|
||||
if (StringUtils.isBlank(dataImportDto.getExpiryDate()) || StringUtils.isBlank(dataImportDto.getCreateCardDate())) {
|
||||
throw new ServiceException(String.format("第%s行办卡日期或到期日期不能为空,请核实", analysisContext.readRowHolder().getRowIndex() + 1));
|
||||
} else {
|
||||
LocalDate expiryDate = LocalDate.parse(dataImportDto.getExpiryDate(), DateTimeFormatter.ofPattern("yyyy/M/d"));
|
||||
LocalDate createCardDate = LocalDate.parse(dataImportDto.getExpiryDate(), DateTimeFormatter.ofPattern("yyyy/M/d"));
|
||||
if (expiryDate.isBefore(createCardDate)) {
|
||||
throw new ServiceException(String.format("第%s行办卡日期不能大于到期日期,请核实", analysisContext.readRowHolder().getRowIndex() + 1));
|
||||
}
|
||||
}
|
||||
//课程顾问
|
||||
if (StringUtils.isBlank(dataImportDto.getBillingType())) {
|
||||
dataImportDto.setBillingType("校长");
|
||||
}
|
||||
//性别
|
||||
if (StringUtils.isBlank(dataImportDto.getSex())) {
|
||||
dataImportDto.setSex("女");
|
||||
}
|
||||
//课卡名称
|
||||
if (StringUtils.isBlank(dataImportDto.getCardName())) {
|
||||
throw new ServiceException(String.format("第%s行课卡名称为空,请核实", analysisContext.readRowHolder().getRowIndex() + 1));
|
||||
}
|
||||
//停卡时剩余天数
|
||||
if (dataImportDto.getStopCardRemainingDays() == null) {
|
||||
dataImportDto.setStopCardRemainingDays(0);
|
||||
dataImportDto.setCardStatus("使用中");
|
||||
} else {
|
||||
dataImportDto.setCardStatus("停卡");
|
||||
}
|
||||
//停卡缓冲天数
|
||||
if (dataImportDto.getStopCardBufferDays() == null) {
|
||||
dataImportDto.setStopCardBufferDays(0);
|
||||
}
|
||||
if (dataImportDto.getStopCardBufferDays() != 0 && StringUtils.equals("使用中", dataImportDto.getCardStatus())) {
|
||||
dataImportDto.setCardStatus("未激活");
|
||||
} else if (dataImportDto.getStopCardBufferDays() != 0 && StringUtils.equals("停卡", dataImportDto.getCardStatus())) {
|
||||
dataImportDto.setCardStatus("停卡未激活");
|
||||
}
|
||||
}
|
||||
}
|
||||
cachedDataList.add(dataImportDto);
|
||||
}
|
||||
@ -259,7 +284,6 @@ public class DataImportServiceImpl extends ServiceImpl<DataImportMapper, DataImp
|
||||
EasyExcel.write(tempFile.getPath(), DataImportDto.class)
|
||||
.sheet("模板")
|
||||
.doWrite(() -> {
|
||||
// 分页查询数据
|
||||
return cachedDataList;
|
||||
});
|
||||
MultipartFile multipartFile = FileUtils.getInstance().getMultipartFile(tempFile);
|
||||
|
||||
@ -12,10 +12,7 @@ import com.cpop.core.utils.QuartzUtils;
|
||||
import com.cpop.core.utils.SecurityUtils;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.core.utils.sql.SqlUtils;
|
||||
import com.cpop.oam.business.bo.PauseWorkOrderBo;
|
||||
import com.cpop.oam.business.bo.TaskDemandBo;
|
||||
import com.cpop.oam.business.bo.TaskWorkOrderBo;
|
||||
import com.cpop.oam.business.bo.TaskWorkOrderRecordBo;
|
||||
import com.cpop.oam.business.bo.*;
|
||||
import com.cpop.oam.business.dto.TaskWorkOrderReceiveDealPauseDto;
|
||||
import com.cpop.oam.business.entity.*;
|
||||
import com.cpop.oam.business.mapper.TaskWorkOrderMapper;
|
||||
@ -24,9 +21,7 @@ import com.cpop.oam.business.vo.*;
|
||||
import com.cpop.oam.framework.constant.WebHookKeyConstant;
|
||||
import com.cpop.oam.framework.enums.OamConfigEnum;
|
||||
import com.cpop.oam.framework.enums.QuartzEnums;
|
||||
import com.cpop.oam.framework.tasks.WorkOrderAcceptOverTimeTask;
|
||||
import com.cpop.oam.framework.tasks.WorkOrderOvertimeTask;
|
||||
import com.cpop.oam.framework.tasks.WorkOrderPauseRecoverTask;
|
||||
import com.cpop.oam.framework.tasks.*;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
@ -279,7 +274,91 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
}
|
||||
}
|
||||
// 添加未接收任务
|
||||
startOrRemoveWorkOrderAcceptTask(entity.getId(), true, LocalDateTime.now());
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
startOrRemoveWorkOrderAcceptTask(entity.getId(), true, now);
|
||||
// 添加未接收工单超时提醒任务
|
||||
startOrRemoveWorkOrderAcceptOverTimeRemindTask(entity.getId(), true, now);
|
||||
}
|
||||
|
||||
/**
|
||||
* 工单接受超时提醒任务
|
||||
* @author DB
|
||||
* @since 2024/2/4
|
||||
* @param workOrderId 工单id
|
||||
* @param isStart 是否是开始标识
|
||||
* @param dateTime 时间
|
||||
*/
|
||||
private void startOrRemoveWorkOrderAcceptOverTimeRemindTask(String workOrderId, Boolean isStart, LocalDateTime dateTime) {
|
||||
// 基于表达式构建触发器
|
||||
QuartzUtils quartzUtils = SpringUtils.getBean(QuartzUtils.class);
|
||||
try {
|
||||
QuartzEnums acceptEnums = QuartzEnums.WORK_ORDER_ACCEPT_OVERTIME_REMIND_TASK;
|
||||
// 开始
|
||||
if (isStart) {
|
||||
// 通过JobBuilder构建JobDetail实例,JobDetail规定其job只能是实现Job接口的实例
|
||||
JobDetail jobDetail = JobBuilder.newJob(WorkOrderAcceptOverTimeRemindTask.class)
|
||||
.withIdentity(acceptEnums.getName() + workOrderId, acceptEnums.getGroup())
|
||||
.usingJobData("WorkOrderId", workOrderId)
|
||||
.build();
|
||||
LocalDateTime localDateTime = dateTime.plusMinutes(25);
|
||||
ZoneId zoneId = ZoneId.systemDefault();
|
||||
String cron = quartzUtils.convertToCron(Date.from(localDateTime.atZone(zoneId).toInstant()));
|
||||
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
|
||||
// CronTrigger表达式触发器 继承于Trigger。TriggerBuilder 用于构建触发器实例
|
||||
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
|
||||
.withIdentity(acceptEnums.getName() + workOrderId, acceptEnums.getGroup())
|
||||
.withSchedule(cronScheduleBuilder)
|
||||
.build();
|
||||
scheduler.scheduleJob(jobDetail, cronTrigger);
|
||||
} else {
|
||||
// 删除
|
||||
quartzUtils.deleteJob(acceptEnums.getName() + workOrderId, acceptEnums.getGroup());
|
||||
}
|
||||
} catch (SchedulerException | ParseException e) {
|
||||
throw new ServiceException("生成工单接收任务失败!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 工单完结超时提醒
|
||||
* @author DB
|
||||
* @since 2024/2/4
|
||||
* @param workOrderId 工单id
|
||||
* @param status 命令状态 0:新增;1:更新;2:删除
|
||||
* @param dateTime 时间
|
||||
*/
|
||||
private void workOrderFinishOverTimeRemindTask(String workOrderId, Integer status, LocalDateTime dateTime) {
|
||||
// 基于表达式构建触发器
|
||||
QuartzUtils quartzUtils = SpringUtils.getBean(QuartzUtils.class);
|
||||
try {
|
||||
QuartzEnums acceptEnums = QuartzEnums.WORK_ORDER_FINISH_OVERTIME_REMIND_TASK;
|
||||
LocalDateTime localDateTime = dateTime.plusMinutes(105);
|
||||
ZoneId zoneId = ZoneId.systemDefault();
|
||||
String cron = quartzUtils.convertToCron(Date.from(localDateTime.atZone(zoneId).toInstant()));
|
||||
// 开始
|
||||
if (status == 0) {
|
||||
// 通过JobBuilder构建JobDetail实例,JobDetail规定其job只能是实现Job接口的实例
|
||||
JobDetail jobDetail = JobBuilder.newJob(WorkOrderFinishOverTimeRemindTask.class)
|
||||
.withIdentity(acceptEnums.getName() + workOrderId, acceptEnums.getGroup())
|
||||
.usingJobData("WorkOrderId", workOrderId)
|
||||
.build();
|
||||
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
|
||||
// CronTrigger表达式触发器 继承于Trigger。TriggerBuilder 用于构建触发器实例
|
||||
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
|
||||
.withIdentity(acceptEnums.getName() + workOrderId, acceptEnums.getGroup())
|
||||
.withSchedule(cronScheduleBuilder)
|
||||
.build();
|
||||
scheduler.scheduleJob(jobDetail, cronTrigger);
|
||||
} else if (status == 1) {
|
||||
//修改
|
||||
quartzUtils.modifyJob(acceptEnums.getName() + workOrderId, QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup(), cron);
|
||||
} else {
|
||||
// 删除
|
||||
quartzUtils.deleteJob(acceptEnums.getName() + workOrderId, acceptEnums.getGroup());
|
||||
}
|
||||
} catch (SchedulerException | ParseException e) {
|
||||
throw new ServiceException("生成工单接收任务失败!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -535,7 +614,10 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
if (task.getTaskStatus() == 2) {
|
||||
startOrUpdateWorkOrderOvertimeTask(bo.getWorkOrderId(), true, bo.getPauseExpireTime());
|
||||
}
|
||||
// 工单暂停
|
||||
startOrRemoveWorkOrderPauseRecover(bo.getWorkOrderId(), true, bo.getPauseExpireTime());
|
||||
// 工单完结超时
|
||||
workOrderFinishOverTimeRemindTask(bo.getWorkOrderId(), 1, bo.getPauseExpireTime());
|
||||
// 设定任务状态暂停
|
||||
task.setTaskStatus(5);
|
||||
taskService.updateById(task);
|
||||
@ -677,7 +759,10 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
SpringUtils.getBean(QuartzUtils.class)
|
||||
.deleteJob(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId,
|
||||
QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup());
|
||||
// 删除工单暂停恢复任务
|
||||
startOrRemoveWorkOrderPauseRecover(workOrderId, false, null);
|
||||
// 删除工单完结超时任务
|
||||
workOrderFinishOverTimeRemindTask(workOrderId, 2, null);
|
||||
} catch (SchedulerException e) {
|
||||
throw new ServiceException("删除工单完结超时任务失败");
|
||||
}
|
||||
@ -754,13 +839,17 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
.set(TASK.TASK_RECEIPT_TIME, now)
|
||||
.where(TASK.ID.eq(task.getId()))
|
||||
.update();
|
||||
Duration duration = Duration.between(now, workOrder.getCreateTime());
|
||||
Duration duration = Duration.between(workOrder.getCreateTime(), now);
|
||||
workOrder.setReceivingTime((int) duration.toMinutes());
|
||||
this.updateById(workOrder);
|
||||
//删除工单接收超时任务
|
||||
startOrRemoveWorkOrderAcceptTask(taskWorkOrderId, false, now);
|
||||
//删除工单接收超时提醒任务
|
||||
startOrRemoveWorkOrderAcceptOverTimeRemindTask(taskWorkOrderId, false, now);
|
||||
//生成工单处理超时任务
|
||||
startOrUpdateWorkOrderOvertimeTask(taskWorkOrderId, false, now);
|
||||
//生成工单完结超时任务提醒
|
||||
workOrderFinishOverTimeRemindTask(taskWorkOrderId, 0, now);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -845,4 +934,15 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制办结工单
|
||||
* @author DB
|
||||
* @since 2024/2/4
|
||||
* @param bo 请求参数
|
||||
*/
|
||||
@Override
|
||||
public void enforceFinishWorkOrder(EnforceFinishWorkOrderBo bo) {
|
||||
throw new ServiceException("功能未实现");
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,4 +21,9 @@ public interface WebHookKeyConstant {
|
||||
* 技术-售后
|
||||
*/
|
||||
String ORDER_INFO_BOT = "0423ac02-dc26-4b4e-b67f-4e0f0953013f";
|
||||
|
||||
/**
|
||||
* 市场部
|
||||
*/
|
||||
String MARKET_BOT = "146d2f06-a6af-46b2-9b22-103ee58cd022";
|
||||
}
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
package com.cpop.oam.framework.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author: DB
|
||||
* @Date: 2023/07/13/9:30
|
||||
* @Description: 定时任务枚举类
|
||||
* 定时任务枚举类
|
||||
* @author DB
|
||||
* @since 2023/07/13/9:30
|
||||
*/
|
||||
@Getter
|
||||
public enum QuartzEnums {
|
||||
|
||||
/**
|
||||
@ -18,7 +21,18 @@ public enum QuartzEnums {
|
||||
/**
|
||||
* 工单暂停回复任务
|
||||
*/
|
||||
WORK_ORDER_PAUSE_RECOVER_TASK("WorkOrderPauseRecoverTask:", "WorkOrder");;
|
||||
WORK_ORDER_PAUSE_RECOVER_TASK("WorkOrderPauseRecoverTask:", "WorkOrder"),
|
||||
|
||||
/**
|
||||
* 工单接受超时提醒
|
||||
*/
|
||||
WORK_ORDER_ACCEPT_OVERTIME_REMIND_TASK("WorkOrderAcceptOvertimeRemindTask:", "WorkOrder"),
|
||||
|
||||
/**
|
||||
* 工单办结超时提醒
|
||||
*/
|
||||
WORK_ORDER_FINISH_OVERTIME_REMIND_TASK("WorkOrderFinishOvertimeRemindTask:", "WorkOrder"),
|
||||
;
|
||||
|
||||
QuartzEnums(String name, String group) {
|
||||
this.name = name;
|
||||
@ -35,18 +49,10 @@ public enum QuartzEnums {
|
||||
*/
|
||||
private String group;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getGroup() {
|
||||
return group;
|
||||
}
|
||||
|
||||
public void setGroup(String group) {
|
||||
this.group = group;
|
||||
}
|
||||
|
||||
@ -0,0 +1,57 @@
|
||||
package com.cpop.oam.framework.tasks;
|
||||
|
||||
import com.cpop.api.tencent.wxWork.handler.WebHookSendHandler;
|
||||
import com.cpop.core.base.exception.ServiceException;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.oam.business.entity.Duty;
|
||||
import com.cpop.oam.business.entity.Task;
|
||||
import com.cpop.oam.business.entity.TaskWorkOrder;
|
||||
import com.cpop.oam.business.service.*;
|
||||
import com.cpop.oam.business.vo.StaffInfoVo;
|
||||
import com.cpop.oam.framework.constant.WebHookKeyConstant;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobDataMap;
|
||||
import org.quartz.JobExecutionContext;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cpop.oam.business.entity.table.DutyTableDef.DUTY;
|
||||
import static com.cpop.oam.business.entity.table.TaskStaffGroupTableDef.TASK_STAFF_GROUP;
|
||||
import static com.cpop.oam.business.entity.table.TaskTableDef.TASK;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
*/
|
||||
public class WorkOrderAcceptOverTimeRemindTask implements Job {
|
||||
|
||||
@Override
|
||||
public void execute(JobExecutionContext jobExecutionContext) {
|
||||
// 获取工单id
|
||||
JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
|
||||
String workOrderId = jobDataMap.getString("WorkOrderId");
|
||||
TaskWorkOrderService taskWorkOrderService = SpringUtils.getBean(TaskWorkOrderService.class);
|
||||
TaskWorkOrder workOrder = taskWorkOrderService.getById(workOrderId);
|
||||
//获取工单任务创建日期的值班人员
|
||||
Duty duty = SpringUtils.getBean(DutyService.class).queryChain()
|
||||
.where(DUTY.DUTY_DATE.eq(workOrder.getCreateTime().toLocalDate()))
|
||||
.one();
|
||||
List<String> phoneList = new ArrayList<>();
|
||||
if (duty != null){
|
||||
// 获取任务
|
||||
TaskService taskService = SpringUtils.getBean(TaskService.class);
|
||||
Task task = taskService.getById(workOrder.getTaskId());
|
||||
StaffService staffService = SpringUtils.getBean(StaffService.class);
|
||||
StaffInfoVo responsibleStaff = staffService.getStaffInfo(duty.getTechnologyStaffId());
|
||||
phoneList.add(responsibleStaff.getPhoneNumber());
|
||||
try {
|
||||
SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList,
|
||||
task.getTaskContent() + "\n您有一个工单即将接受超时,请尽快接受",
|
||||
false);
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException("发送工单接受超时消息通知失败!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -24,8 +24,6 @@ import org.slf4j.LoggerFactory;
|
||||
*/
|
||||
public class WorkOrderAcceptOverTimeTask implements Job {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class);
|
||||
|
||||
@Override
|
||||
public void execute(JobExecutionContext jobExecutionContext) {
|
||||
// 获取工单id
|
||||
|
||||
@ -0,0 +1,57 @@
|
||||
package com.cpop.oam.framework.tasks;
|
||||
|
||||
import com.cpop.api.tencent.wxWork.handler.WebHookSendHandler;
|
||||
import com.cpop.core.base.exception.ServiceException;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.oam.business.entity.Duty;
|
||||
import com.cpop.oam.business.entity.Task;
|
||||
import com.cpop.oam.business.entity.TaskWorkOrder;
|
||||
import com.cpop.oam.business.service.DutyService;
|
||||
import com.cpop.oam.business.service.StaffService;
|
||||
import com.cpop.oam.business.service.TaskService;
|
||||
import com.cpop.oam.business.service.TaskWorkOrderService;
|
||||
import com.cpop.oam.business.vo.StaffInfoVo;
|
||||
import com.cpop.oam.framework.constant.WebHookKeyConstant;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobDataMap;
|
||||
import org.quartz.JobExecutionContext;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cpop.oam.business.entity.table.DutyTableDef.DUTY;
|
||||
|
||||
/**
|
||||
* 工单完结超时提醒任务
|
||||
* @author DB
|
||||
*/
|
||||
public class WorkOrderFinishOverTimeRemindTask implements Job {
|
||||
|
||||
@Override
|
||||
public void execute(JobExecutionContext jobExecutionContext) {
|
||||
// 获取工单id
|
||||
JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
|
||||
String workOrderId = jobDataMap.getString("WorkOrderId");
|
||||
TaskWorkOrderService taskWorkOrderService = SpringUtils.getBean(TaskWorkOrderService.class);
|
||||
TaskWorkOrder workOrder = taskWorkOrderService.getById(workOrderId);
|
||||
// 获取任务
|
||||
TaskService taskService = SpringUtils.getBean(TaskService.class);
|
||||
Task task = taskService.getById(workOrder.getTaskId());
|
||||
List<String> phoneList = new ArrayList<>();
|
||||
if (task != null){
|
||||
StaffService staffService = SpringUtils.getBean(StaffService.class);
|
||||
StaffInfoVo responsibleStaff = staffService.getStaffInfo(task.getResponsibleStaffId());
|
||||
StaffInfoVo recordStaff = staffService.getStaffInfo(task.getRecordStaffId());
|
||||
phoneList.add(responsibleStaff.getPhoneNumber());
|
||||
phoneList.add(recordStaff.getPhoneNumber());
|
||||
try {
|
||||
SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList,
|
||||
task.getTaskContent() + "\n您有一个工单即将完结超时,请尽快练习相关人员办结",
|
||||
false);
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException("发送工单完结超时消息通知失败!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user