Commit ea4c0ca6 by chenweisong

更新

parent b9eb7523
<properties>
<properties>
<easypoi.version>4.1.3</easypoi.version>
<akka.version>2.6.0-M4</akka.version>
</properties>
<!-- easypoi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>${easypoi.version}</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>${easypoi.version}</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>${easypoi.version}</version>
</dependency>
<!-- easypoi -->
<!-- akka -->
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.12</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-testkit_2.12</artifactId>
<version>${akka.version}</version>
<scope>test</scope>
</dependency>
\ No newline at end of file
package com.keymobile.tagmanager.breakexcel.akka.actor;
package com.keymobile.tagmanager.breakexcel.akka.actor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import com.keymobile.tagmanager.breakexcel.akka.message.BreakExcelMsg;
import com.keymobile.tagmanager.breakexcel.akka.message.ConfirmMsg;
import com.keymobile.tagmanager.breakexcel.akka.message.ExportExcelMsg;
import com.keymobile.tagmanager.breakexcel.entity.BankData;
import com.keymobile.tagmanager.breakexcel.util.ExcelModelColumnUtils;
import akka.actor.AbstractActor;
import akka.actor.ActorRef;
import akka.actor.Props;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
public class BreakExcelActor extends AbstractActor{
private Logger logger = LoggerFactory.getLogger(BreakExcelActor.class);
private int numberOfConfirm = 0;//定义返回确认消息的子actor
//定义线程安全的收集反馈确认消息list
private List<Integer> confirmList = new CopyOnWriteArrayList<Integer>();
//定义存储导入的消息
private String confirmMessage = "";
private int excelNum = 0;
@Override
public Receive createReceive() {
return receiveBuilder()
.match(BreakExcelMsg.class,breakExcelMsg -> {
Map<String,List<BankData>> breakResultMap = new HashMap<>();
MultipartFile file = breakExcelMsg.getFile();
String breakColumn = breakExcelMsg.getBreakColumn();
String exportPath = breakExcelMsg.getExportPath();
String modelPath = breakExcelMsg.getModelPath();
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
ExcelImportResult<BankData> excelImportResult = ExcelImportUtil.
importExcelMore(file.getInputStream(),BankData.class,params);
List<BankData> bankDataList = excelImportResult.getList();
logger.info("num:"+bankDataList.size());
String breakColumnEn = ExcelModelColumnUtils.getBreakColumn(breakColumn);
if(StringUtils.isBlank(breakColumnEn)) {
logger.info("excel not exist the break column:"+breakColumnEn);
}else {
for(BankData bd:bankDataList) {
Method m = bd.getClass().getMethod("get"+breakColumnEn);
if(breakResultMap.get(m.invoke(bd)+"")!=null) {
breakResultMap.get(m.invoke(bd)+"").add(bd);
}else {
List<BankData> bankData = new ArrayList<>();
bankData.add(bd);
breakResultMap.put(m.invoke(bd)+"", bankData);
}
}
}
excelNum = breakResultMap.size();
int index = 0;
String fileName = file.getOriginalFilename().substring(0,
file.getOriginalFilename().indexOf(".xlsx"));
for(Map.Entry<String,List<BankData>> entry : breakResultMap.entrySet()) {
ExportExcelMsg exportExcelMsg = new ExportExcelMsg(entry.getValue(),exportPath,
fileName,breakColumn,modelPath,index++);
ActorRef exportExcelActor = this.getContext().actorOf(Props.create(
ExportExcelActor.class,()->new ExportExcelActor()));
exportExcelActor.tell(exportExcelMsg, getSelf());
}
})
.match(ConfirmMsg.class,confirmMsg -> {
//将确认消息状态值加入确认消息list中
confirmList.add(confirmMsg.getIsFinish());
confirmMessage += confirmMsg.getConfirmMessage();
if (++numberOfConfirm >= excelNum) {//导入全部返回
//判断确认消息list是否包含状态值为0的未完成消息
if(confirmList.contains(0)) {
logger.info("excel拆分存在错误");
}else {
logger.info("excel拆分完成");
}
logger.info(confirmMessage);
}
})
.build();
}
}
package com.keymobile.tagmanager.breakexcel.akka.actor;
package com.keymobile.tagmanager.breakexcel.akka.actor;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.poi.ss.usermodel.Workbook;
import com.keymobile.tagmanager.breakexcel.akka.message.ConfirmMsg;
import com.keymobile.tagmanager.breakexcel.akka.message.ExportExcelMsg;
import com.keymobile.tagmanager.breakexcel.entity.BankData;
import akka.actor.AbstractActor;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
public class ExportExcelActor extends AbstractActor{
@Override
public Receive createReceive() {
return receiveBuilder()
.match(ExportExcelMsg.class,exportExcelMsg -> {
List<BankData> bankDataList = exportExcelMsg.getBankData();
String exportPath = exportExcelMsg.getExportPath();
String fileName = exportExcelMsg.getFileName();
String breakColumn = exportExcelMsg.getBreakColumn();
String modelPath = exportExcelMsg.getModelPath();
int index = exportExcelMsg.getIndex();
FileOutputStream fileOutputStream = null;
try {
TemplateExportParams params = new TemplateExportParams(modelPath);
Map<String,Object> map = new HashMap<>() ;
List<BankData> list = new ArrayList<>();
for(BankData bd : bankDataList) {
BankData newBd = new BankData(
bd.getMonth()==null? "" :DateFormatUtils.format(bd.getMonth(), "yyyy/MM/dd"),
bd.getUniqueKey(),bd.getOneSubBank(),bd.getOneSubBankName(),
bd.getBranches(),bd.getCustomerNum(),bd.getCustomerName(),
bd.getUpdateCustomerNum(),bd.getUpdateBranches(),bd.getUpdateCustomerName());
list.add(newBd);
}
map.put("list",list) ;
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
fileName = fileName+"-"+breakColumn+"_"+index+".xlsx";
File pathFile = new File(exportPath);
if(!pathFile.exists()) {
pathFile.mkdirs();
}
fileOutputStream = new FileOutputStream(exportPath+"/"+fileName);
workbook.write(fileOutputStream);
getSender().tell(new ConfirmMsg(1,fileName+":导出完成"),getSelf());
} catch (Exception e) {
e.printStackTrace();
getSender().tell(new ConfirmMsg(0,fileName+":导出异常"),getSelf());
} finally {
if(fileOutputStream!=null) {
fileOutputStream.close();
}
}
})
.build();
}
}
package com.keymobile.tagmanager.breakexcel.akka.message;
package com.keymobile.tagmanager.breakexcel.akka.message;
import java.io.Serializable;
import org.springframework.web.multipart.MultipartFile;
public class BreakExcelMsg implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private MultipartFile file;
private String breakColumn;
private String exportPath;
private String modelPath;
public BreakExcelMsg(MultipartFile file,String breakColumn,String exportPath,String modelPath) {
this.file = file;
this.breakColumn = breakColumn;
this.exportPath = exportPath;
this.setModelPath(modelPath);
}
public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file = file;
}
public String getBreakColumn() {
return breakColumn;
}
public void setBreakColumn(String breakColumn) {
this.breakColumn = breakColumn;
}
public String getExportPath() {
return exportPath;
}
public void setExportPath(String exportPath) {
this.exportPath = exportPath;
}
public String getModelPath() {
return modelPath;
}
public void setModelPath(String modelPath) {
this.modelPath = modelPath;
}
}
\ No newline at end of file
package com.keymobile.tagmanager.breakexcel.akka.message;
package com.keymobile.tagmanager.breakexcel.akka.message;
import java.io.Serializable;
public class ConfirmMsg implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
//是否完成标识:1.完成 0.未完成
private Integer isFinish;
//日志报告
private String confirmMessage;
public ConfirmMsg(Integer isFinish,String confirmMessage) {
this.isFinish = isFinish;
this.confirmMessage = confirmMessage;
}
public Integer getIsFinish() {
return isFinish;
}
public void setIsFinish(Integer isFinish) {
this.isFinish = isFinish;
}
public String getConfirmMessage() {
return confirmMessage;
}
public void setConfirmMessage(String confirmMessage) {
this.confirmMessage = confirmMessage;
}
}
package com.keymobile.tagmanager.breakexcel.akka.message;
package com.keymobile.tagmanager.breakexcel.akka.message;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.keymobile.tagmanager.breakexcel.entity.BankData;
public class ExportExcelMsg implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private List<BankData> bankData = new ArrayList<>();
private String exportPath;
private String fileName;
private String breakColumn;
private String modelPath;
private int index;
public ExportExcelMsg(List<BankData> bankData,String exportPath,
String fileName,String breakColumn,String modelPath,int index) {
this.bankData.addAll(bankData);
this.exportPath =exportPath;
this.fileName = fileName;
this.breakColumn = breakColumn;
this.setModelPath(modelPath);
this.index = index;
}
public List<BankData> getBankData(){
return bankData;
}
public void setBankData(List<BankData> bankData) {
this.bankData.addAll(bankData);
}
public String getExportPath() {
return exportPath;
}
public void setExportPath(String exportPath) {
this.exportPath = exportPath;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getBreakColumn() {
return breakColumn;
}
public void setBreakColumn(String breakColumn) {
this.breakColumn = breakColumn;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getModelPath() {
return modelPath;
}
public void setModelPath(String modelPath) {
this.modelPath = modelPath;
}
}
package com.keymobile.tagmanager.breakexcel.entity;
package com.keymobile.tagmanager.breakexcel.entity;
import java.io.Serializable;
import java.util.Date;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
import cn.afterturn.easypoi.handler.inter.IExcelModel;
@ExcelTarget("BankData")
public class BankData implements Serializable, IExcelModel, IExcelDataModel{
/**
*
*/
private static final long serialVersionUID = 1L;
@Excel(name = "月份", format = "yyyy-MM-dd", orderNum = "0", width=30)
private Date month;//月份
@Excel(name = "唯一键", orderNum = "1", width=30)
private String uniqueKey;//唯一键
@Excel(name = "一级分行", orderNum = "2", width=30)
private String oneSubBank;//一级分行
@Excel(name = "一级分行名称", orderNum = "3", width=30)
private String oneSubBankName;//一级分行名称
@Excel(name = "网点", orderNum = "4", width=30)
private String branches;//网点
@Excel(name = "客户号", orderNum = "5", width=30)
private String customerNum;//客户号
@Excel(name = "客户名称", orderNum = "6", width=30)
private String customerName;//客户名称
@Excel(name = "修正后的客户号", orderNum = "7", width=30)
private String updateCustomerNum;//修正后的客户号
@Excel(name = "修改后的客户开户网点", orderNum = "8", width=30)
private String updateBranches;//修改后的客户开户网点
@Excel(name = "修正后的客户名称", orderNum = "9", width=30)
private String updateCustomerName;//修正后的客户名称
private String monthString;
public BankData() {
super();
}
public BankData(String monthString,String uniqueKey,String oneSubBank,String oneSubBankName,String branches,
String customerNum,String customerName,String updateCustomerNum,String updateBranches,
String updateCustomerName) {
this.monthString = monthString;
this.uniqueKey = uniqueKey;
this.oneSubBank = oneSubBank;
this.oneSubBankName = oneSubBankName;
this.branches = branches;
this.customerNum = customerNum;
this.customerName = customerName;
this.updateCustomerNum = updateCustomerNum;
this.updateBranches = updateBranches;
this.updateCustomerName = updateCustomerName;
}
@Override
public String toString() {
return "BankData [month=" + month + ", uniqueKey=" + uniqueKey + ", oneSubBank=" + oneSubBank
+ ", oneSubBankName=" + oneSubBankName + ", branches=" + branches + ", customerNum=" + customerNum
+ ", customerName=" + customerName + ", updateCustomerNum=" + updateCustomerNum + ", updateBranches="
+ updateBranches + ", updateCustomerName=" + updateCustomerName + "]";
}
public Date getMonth() {
return month;
}
public void setMonth(Date month) {
this.month = month;
}
public String getUniqueKey() {
return uniqueKey;
}
public void setUniqueKey(String uniqueKey) {
this.uniqueKey = uniqueKey;
}
public String getOneSubBank() {
return oneSubBank;
}
public void setOneSubBank(String oneSubBank) {
this.oneSubBank = oneSubBank;
}
public String getOneSubBankName() {
return oneSubBankName;
}
public void setOneSubBankName(String oneSubBankName) {
this.oneSubBankName = oneSubBankName;
}
public String getBranches() {
return branches;
}
public void setBranches(String branches) {
this.branches = branches;
}
public String getCustomerNum() {
return customerNum;
}
public void setCustomerNum(String customerNum) {
this.customerNum = customerNum;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getUpdateCustomerNum() {
return updateCustomerNum;
}
public void setUpdateCustomerNum(String updateCustomerNum) {
this.updateCustomerNum = updateCustomerNum;
}
public String getUpdateBranches() {
return updateBranches;
}
public void setUpdateBranches(String updateBranches) {
this.updateBranches = updateBranches;
}
public String getUpdateCustomerName() {
return updateCustomerName;
}
public void setUpdateCustomerName(String updateCustomerName) {
this.updateCustomerName = updateCustomerName;
}
@org.springframework.data.annotation.Transient
private String errMsg;
@org.springframework.data.annotation.Transient
private int excelRowNum;
@Override
public String getErrorMsg() {
return errMsg;
}
@Override
public void setErrorMsg(String errorMsg) {
this.errMsg = errorMsg;
}
@Override
public Integer getRowNum() {
return excelRowNum;
}
@Override
public void setRowNum(Integer rowNum) {
this.excelRowNum = rowNum;
}
public String getMonthString() {
return monthString;
}
public void setMonthString(String monthString) {
this.monthString = monthString;
}
}
package com.keymobile.tagmanager.breakexcel.service;
package com.keymobile.tagmanager.breakexcel.service;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.keymobile.tagmanager.breakexcel.akka.actor.BreakExcelActor;
import com.keymobile.tagmanager.breakexcel.akka.message.BreakExcelMsg;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
@Service
public class BreakExcelService {
public String breakExcel(MultipartFile file,String breakColumn,
String exportPath,String modelPath)throws Exception{
final ActorSystem system = ActorSystem.create("ExcelBreakAkka");
BreakExcelMsg breakExcelMsg = new BreakExcelMsg(file,breakColumn,exportPath,modelPath);
ActorRef breakExcelActor = system.actorOf(Props.create(BreakExcelActor.class,
()->new BreakExcelActor()));
breakExcelActor.tell(breakExcelMsg, ActorRef.noSender());
return "breaking the excel......";
}
}
package com.keymobile.tagmanager.breakexcel.util;
package com.keymobile.tagmanager.breakexcel.util;
import java.util.HashMap;
import java.util.Map;
public class ExcelModelColumnUtils {
public static Map<String,String> modelColumnMap = new HashMap<>();
static {
modelColumnMap.put("月份", "Month");
modelColumnMap.put("唯一键", "UniqueKey");
modelColumnMap.put("一级分行", "OneSubBank");
modelColumnMap.put("一级分行名称", "OneSubBankName");
modelColumnMap.put("网点", "Branches");
modelColumnMap.put("客户号", "CustomerNum");
modelColumnMap.put("客户名称", "CustomerName");
modelColumnMap.put("修正后的客户号", "UpdateCustomerNum");
modelColumnMap.put("修改后的客户开户网点", "UpdateBranches");
modelColumnMap.put("修正后的客户名称", "UpdateCustomerName");
}
public static String getBreakColumn(String cnName) {
return modelColumnMap.get(cnName);
}
}
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
<java.version>1.8</java.version> <java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<activiti.version>5.22.0</activiti.version> <activiti.version>5.22.0</activiti.version>
<easypoi.version>4.1.3</easypoi.version>
<akka.version>2.6.0-M4</akka.version>
</properties> </properties>
<dependencies> <dependencies>
...@@ -110,6 +112,38 @@ ...@@ -110,6 +112,38 @@
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<!-- <version>8.0.15</version> --> <!-- <version>8.0.15</version> -->
</dependency> </dependency>
<!-- 引入easypoi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>${easypoi.version}</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>${easypoi.version}</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>${easypoi.version}</version>
</dependency>
<!-- 引入easypoi -->
<!-- akka -->
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.12</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-testkit_2.12</artifactId>
<version>${akka.version}</version>
<scope>test</scope>
</dependency>
<!-- activiti start --> <!-- activiti start -->
<dependency> <dependency>
<groupId>org.activiti</groupId> <groupId>org.activiti</groupId>
......
package com.keymobile.rest.akka.actor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import com.keymobile.rest.akka.message.BreakExcelMsg;
import com.keymobile.rest.akka.message.ConfirmMsg;
import com.keymobile.rest.akka.message.ExportExcelMsg;
import com.keymobile.rest.akka.utils.ExcelModelColumnUtils;
import com.keymobile.rest.model.BankData;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import akka.actor.AbstractActor;
import akka.actor.ActorRef;
import akka.actor.Props;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
public class BreakExcelActor extends AbstractActor {
private Logger logger = LoggerFactory.getLogger(BreakExcelActor.class);
private int numberOfConfirm = 0;//定义返回确认消息的子actor
//定义线程安全的收集反馈确认消息list
private List<Integer> confirmList = new CopyOnWriteArrayList<Integer>();
//定义存储导入的消息
private String confirmMessage = "";
private int excelNum = 0;
@Override
public Receive createReceive() {
return receiveBuilder()
.match(BreakExcelMsg.class, breakExcelMsg -> {
Map<String, List<BankData>> breakResultMap = new HashMap<>();
MultipartFile file = breakExcelMsg.getFile();
String breakColumn = breakExcelMsg.getBreakColumn();
String exportPath = breakExcelMsg.getExportPath();
String modelPath = breakExcelMsg.getModelPath();
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
ExcelImportResult<BankData> excelImportResult = ExcelImportUtil.
importExcelMore(file.getInputStream(), BankData.class, params);
List<BankData> bankDataList = excelImportResult.getList();
logger.info("num:" + bankDataList.size());
String breakColumnEn = ExcelModelColumnUtils.getBreakColumn(breakColumn);
if (StringUtils.isBlank(breakColumnEn)) {
logger.info("excel not exist the break column:" + breakColumnEn);
} else {
for (BankData bd : bankDataList) {
Method m = bd.getClass().getMethod("get" + breakColumnEn);
if (breakResultMap.get(m.invoke(bd) + "") != null) {
breakResultMap.get(m.invoke(bd) + "").add(bd);
} else {
List<BankData> bankData = new ArrayList<>();
bankData.add(bd);
breakResultMap.put(m.invoke(bd) + "", bankData);
}
}
}
excelNum = breakResultMap.size();
int index = 0;
String fileName = file.getOriginalFilename().substring(0,
file.getOriginalFilename().indexOf(".xlsx"));
for (Map.Entry<String, List<BankData>> entry : breakResultMap.entrySet()) {
ExportExcelMsg exportExcelMsg = new ExportExcelMsg(entry.getValue(), exportPath,
fileName, breakColumn, modelPath, index++);
ActorRef exportExcelActor = this.getContext().actorOf(Props.create(
ExportExcelActor.class, () -> new ExportExcelActor()));
exportExcelActor.tell(exportExcelMsg, getSelf());
}
})
.match(ConfirmMsg.class, confirmMsg -> {
//将确认消息状态值加入确认消息list中
confirmList.add(confirmMsg.getIsFinish());
confirmMessage += confirmMsg.getConfirmMessage();
if (++numberOfConfirm >= excelNum) {//导入全部返回
//判断确认消息list是否包含状态值为0的未完成消息
if (confirmList.contains(0)) {
logger.info("excel拆分存在错误");
} else {
logger.info("excel拆分完成");
}
logger.info(confirmMessage);
}
})
.build();
}
}
package com.keymobile.rest.akka.actor;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.keymobile.rest.akka.message.ConfirmMsg;
import com.keymobile.rest.akka.message.ExportExcelMsg;
import com.keymobile.rest.model.BankData;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.poi.ss.usermodel.Workbook;
import akka.actor.AbstractActor;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
public class ExportExcelActor extends AbstractActor {
@Override
public Receive createReceive() {
return receiveBuilder()
.match(ExportExcelMsg.class, exportExcelMsg -> {
List<BankData> bankDataList = exportExcelMsg.getBankData();
String exportPath = exportExcelMsg.getExportPath();
String fileName = exportExcelMsg.getFileName();
String breakColumn = exportExcelMsg.getBreakColumn();
String modelPath = exportExcelMsg.getModelPath();
int index = exportExcelMsg.getIndex();
FileOutputStream fileOutputStream = null;
try {
TemplateExportParams params = new TemplateExportParams(modelPath);
Map<String, Object> map = new HashMap<>();
List<BankData> list = new ArrayList<>();
for (BankData bd : bankDataList) {
BankData newBd = new BankData(
bd.getMonth() == null ? "" : DateFormatUtils.format(bd.getMonth(), "yyyy/MM/dd"),
bd.getUniqueKey(), bd.getOneSubBank(), bd.getOneSubBankName(),
bd.getBranches(), bd.getCustomerNum(), bd.getCustomerName(),
bd.getUpdateCustomerNum(), bd.getUpdateBranches(), bd.getUpdateCustomerName());
list.add(newBd);
}
map.put("list", list);
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
fileName = fileName + "-" + breakColumn + "_" + index + ".xlsx";
File pathFile = new File(exportPath);
if (!pathFile.exists()) {
pathFile.mkdirs();
}
fileOutputStream = new FileOutputStream(exportPath + "/" + fileName);
workbook.write(fileOutputStream);
getSender().tell(new ConfirmMsg(1, fileName + ":导出完成"), getSelf());
} catch (Exception e) {
e.printStackTrace();
getSender().tell(new ConfirmMsg(0, fileName + ":导出异常"), getSelf());
} finally {
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
})
.build();
}
}
package com.keymobile.rest.akka.message;
import java.io.Serializable;
import org.springframework.web.multipart.MultipartFile;
public class BreakExcelMsg implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private MultipartFile file;
private String breakColumn;
private String exportPath;
private String modelPath;
public BreakExcelMsg(MultipartFile file,String breakColumn,String exportPath,String modelPath) {
this.file = file;
this.breakColumn = breakColumn;
this.exportPath = exportPath;
this.setModelPath(modelPath);
}
public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file = file;
}
public String getBreakColumn() {
return breakColumn;
}
public void setBreakColumn(String breakColumn) {
this.breakColumn = breakColumn;
}
public String getExportPath() {
return exportPath;
}
public void setExportPath(String exportPath) {
this.exportPath = exportPath;
}
public String getModelPath() {
return modelPath;
}
public void setModelPath(String modelPath) {
this.modelPath = modelPath;
}
}
\ No newline at end of file
package com.keymobile.rest.akka.message;
import java.io.Serializable;
public class ConfirmMsg implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
//是否完成标识:1.完成 0.未完成
private Integer isFinish;
//日志报告
private String confirmMessage;
public ConfirmMsg(Integer isFinish,String confirmMessage) {
this.isFinish = isFinish;
this.confirmMessage = confirmMessage;
}
public Integer getIsFinish() {
return isFinish;
}
public void setIsFinish(Integer isFinish) {
this.isFinish = isFinish;
}
public String getConfirmMessage() {
return confirmMessage;
}
public void setConfirmMessage(String confirmMessage) {
this.confirmMessage = confirmMessage;
}
}
package com.keymobile.rest.akka.message;
import com.keymobile.rest.model.BankData;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class ExportExcelMsg implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<BankData> bankData = new ArrayList<>();
private String exportPath;
private String fileName;
private String breakColumn;
private String modelPath;
private int index;
public ExportExcelMsg(List<BankData> bankData, String exportPath,
String fileName, String breakColumn, String modelPath, int index) {
this.bankData.addAll(bankData);
this.exportPath = exportPath;
this.fileName = fileName;
this.breakColumn = breakColumn;
this.setModelPath(modelPath);
this.index = index;
}
public List<BankData> getBankData() {
return bankData;
}
public void setBankData(List<BankData> bankData) {
this.bankData.addAll(bankData);
}
public String getExportPath() {
return exportPath;
}
public void setExportPath(String exportPath) {
this.exportPath = exportPath;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getBreakColumn() {
return breakColumn;
}
public void setBreakColumn(String breakColumn) {
this.breakColumn = breakColumn;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getModelPath() {
return modelPath;
}
public void setModelPath(String modelPath) {
this.modelPath = modelPath;
}
}
package com.keymobile.rest.akka.utils;
import java.util.HashMap;
import java.util.Map;
public class ExcelModelColumnUtils {
public static Map<String,String> modelColumnMap = new HashMap<>();
static {
modelColumnMap.put("月份", "Month");
modelColumnMap.put("唯一键", "UniqueKey");
modelColumnMap.put("一级分行", "OneSubBank");
modelColumnMap.put("一级分行名称", "OneSubBankName");
modelColumnMap.put("网点", "Branches");
modelColumnMap.put("客户号", "CustomerNum");
modelColumnMap.put("客户名称", "CustomerName");
modelColumnMap.put("修正后的客户号", "UpdateCustomerNum");
modelColumnMap.put("修改后的客户开户网点", "UpdateBranches");
modelColumnMap.put("修正后的客户名称", "UpdateCustomerName");
}
public static String getBreakColumn(String cnName) {
return modelColumnMap.get(cnName);
}
}
package com.keymobile.rest.common.utils; package com.keymobile.rest.common.utils;
import com.keymobile.rest.model.Activity;
import com.keymobile.rest.dto.TaskForm;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@Slf4j @Slf4j
public class BeanUtils { public class BeanUti {
private BeanUtils() { private BeanUti() {
throw new RuntimeException("hey! don't mess up the party!"); throw new RuntimeException("hey! don't mess up the party!");
} }
...@@ -35,17 +33,4 @@ public class BeanUtils { ...@@ -35,17 +33,4 @@ public class BeanUtils {
return t; return t;
} }
public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException, InstantiationException {
TaskForm form = new TaskForm();
Activity activity = new Activity();
form.setName("asdasdas");
form.setRemark("asdasdas");
form.setFreq(4);
convertTo(form, activity);
System.out.printf(activity.getName() + "***********************" + activity.getRemark() + "***********************" + activity.getFreq());
}
} }
...@@ -2,6 +2,8 @@ package com.keymobile.rest.controller; ...@@ -2,6 +2,8 @@ package com.keymobile.rest.controller;
import com.keymobile.rest.common.utils.DateUtil; import com.keymobile.rest.common.utils.DateUtil;
import com.keymobile.rest.common.validator.CommonValidator; import com.keymobile.rest.common.validator.CommonValidator;
import com.keymobile.rest.controller.constant.TaskConstant;
import com.keymobile.rest.model.Activity;
import com.keymobile.rest.model.DataInfo; import com.keymobile.rest.model.DataInfo;
import com.keymobile.rest.model.Process; import com.keymobile.rest.model.Process;
import com.keymobile.rest.model.Template; import com.keymobile.rest.model.Template;
...@@ -9,6 +11,7 @@ import com.keymobile.rest.service.*; ...@@ -9,6 +11,7 @@ import com.keymobile.rest.service.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.activiti.engine.*; import org.activiti.engine.*;
import org.activiti.engine.task.Task; import org.activiti.engine.task.Task;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -25,10 +28,16 @@ public class ExcelController { ...@@ -25,10 +28,16 @@ public class ExcelController {
private DataInfoService dataInfoService; private DataInfoService dataInfoService;
@Autowired @Autowired
private ProcessService processService; private ProcessService processService;
@Autowired
private ActivityService activityService;
@Autowired @Autowired
private UserService userService; private FeignAuthService authService;
@Autowired @Autowired
private TaskService taskService; private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
@ApiOperation(value = "当前补录任务填写补录") @ApiOperation(value = "当前补录任务填写补录")
...@@ -42,16 +51,20 @@ public class ExcelController { ...@@ -42,16 +51,20 @@ public class ExcelController {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
CommonValidator.notNull(task, "任务不存在"); CommonValidator.notNull(task, "任务不存在");
Template template = templateService.get(excelId); Template template = templateService.findById(excelId);
CommonValidator.notNull(template, "模板不存在"); CommonValidator.notNull(template, "模板不存在");
Process process = processService.findByProcessId(task.getProcessInstanceId()); Map user = authService.getUserById(3L);
taskService.claim(taskId, user.get("name").toString());
String processInstanceId = task.getProcessInstanceId();
Process process = processService.findByProcessId(processInstanceId);
DataInfo dataInfo = new DataInfo(); DataInfo dataInfo = new DataInfo();
dataInfo.setCreateAt(DateUtil.getTimestamp()); dataInfo.setCreateAt(DateUtil.getTimestamp());
dataInfo.setTemplate(template); dataInfo.setTemplate(template);
dataInfo.setTaskId(taskId); dataInfo.setTaskId(taskId);
dataInfo.setUserId(3L); dataInfo.setUserId(Long.parseLong(user.get("id").toString()));
dataInfo.setProcess(process); dataInfo.setProcess(process);
dataInfo.setData(dataStr); dataInfo.setData(dataStr);
dataInfoService.save(dataInfo); dataInfoService.save(dataInfo);
...@@ -59,24 +72,39 @@ public class ExcelController { ...@@ -59,24 +72,39 @@ public class ExcelController {
Map vars = new HashMap<>(); Map vars = new HashMap<>();
if (template.getNeedAudit() == Template.NEED_AUDIT) { if (template.getNeedAudit() == Template.NEED_AUDIT) {
vars.put("needDataAudit", true); vars.put("NeedDataAudit", true);
vars.put("auditUser", "审核人"); vars.put("auditUser", "审核人");
} else { } else {
vars.put("needDataAudit", false); vars.put("NeedDataAudit", false);
} }
// 当前流程的所有未完成任务 String executionId = task.getExecutionId();
// long allMissionCount = missionService.countAllByActivityIdAndStatus(template.getActivity().getId(), Mission.STATUS_BEGIN); // 总的会签任务数量
// if (allMissionCount == 0) { int nrOfInstances = Integer.parseInt(runtimeService.getVariable(executionId, "nrOfInstances").toString());
// if (template.getNeedConfirm() == Template.NEED_CONFIRM) { // 当前获取的会签任务数量
// vars.put("needConfirm", true); int nrOfActiveInstances = Integer.parseInt(runtimeService.getVariable(executionId, "nrOfActiveInstances").toString());
// } else { // 已经完成的会签任务数量
// vars.put("needConfirm", false); int nrOfCompletedInstances = Integer.parseInt(runtimeService.getVariable(executionId, "nrOfCompletedInstances").toString());
// vars.put("needDataBackflow", true);
// } if (nrOfCompletedInstances == nrOfInstances - 1) {
// } if (template.getNeedConfirm() == Template.NEED_CONFIRM) {
taskService.complete(task.getId(), vars); vars.put("NeedConfirm", true);
vars.put("manager", "审核人");
} else {
vars.put("NeedConfirm", false);
if (StringUtils.isNotEmpty(template.getBackStreamAddr())) {
vars.put("NeedDataBack", true);
vars.put("backFlowUser", "数据回流人");
} else {
vars.put("NeedDataBack", false);
// 流程完
Activity activity = process.getActivity();
activity.setStatus(Activity.STATUS_WAIT);
activityService.save(activity);
}
}
taskService.complete(task.getId(), vars);
}
return "成功"; return "成功";
} }
......
...@@ -2,7 +2,7 @@ package com.keymobile.rest.controller; ...@@ -2,7 +2,7 @@ package com.keymobile.rest.controller;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.keymobile.rest.common.bean.SimplePage; import com.keymobile.rest.common.bean.SimplePage;
import com.keymobile.rest.common.utils.BeanUtils; import com.keymobile.rest.common.utils.BeanUti;
import com.keymobile.rest.common.utils.DateUtil; import com.keymobile.rest.common.utils.DateUtil;
import com.keymobile.rest.common.validator.CommonValidator; import com.keymobile.rest.common.validator.CommonValidator;
import com.keymobile.rest.controller.constant.TaskConstant; import com.keymobile.rest.controller.constant.TaskConstant;
...@@ -45,8 +45,6 @@ public class TaskController { ...@@ -45,8 +45,6 @@ public class TaskController {
@Autowired @Autowired
private TemplateService templateService; private TemplateService templateService;
@Autowired @Autowired
private UserService userService;
@Autowired
private FeignAuthService feignAuthService; private FeignAuthService feignAuthService;
@Autowired @Autowired
private ProcessService processService; private ProcessService processService;
...@@ -106,7 +104,7 @@ public class TaskController { ...@@ -106,7 +104,7 @@ public class TaskController {
// 获取个人任务 // 获取个人任务
List<Task> tasks = taskService.createTaskQuery().taskAssigneeLike("%" + username + "%").active().list(); List<Task> tasks = taskService.createTaskQuery().taskAssigneeLike("%" + username + "%").active().list();
tasks.forEach(task -> { tasks.forEach(task -> {
missions.add(convert(task, ImmutableMap.of("username", username, "type", TaskConstant.TASK_TYPE_PERSONAL))); missions.add(convertTaskToMission(task, ImmutableMap.of("username", username, "type", TaskConstant.TASK_TYPE_PERSONAL)));
}); });
// 获取组任务 // 获取组任务
...@@ -123,7 +121,7 @@ public class TaskController { ...@@ -123,7 +121,7 @@ public class TaskController {
// 组id // 组id
String groupId = "id:" + templateId; String groupId = "id:" + templateId;
if (groupId.equals(identityLink.getGroupId())) { if (groupId.equals(identityLink.getGroupId())) {
missions.add(convert(groupTask, ImmutableMap.of("username", username, "type", TaskConstant.TASK_TYPE_GROUP, "templateId", templateId))); missions.add(convertTaskToMission(groupTask, ImmutableMap.of("username", username, "type", TaskConstant.TASK_TYPE_GROUP, "templateId", templateId)));
} }
}); });
} }
...@@ -141,13 +139,9 @@ public class TaskController { ...@@ -141,13 +139,9 @@ public class TaskController {
CommonValidator.notNull(form.getType(), "类型不能为空"); CommonValidator.notNull(form.getType(), "类型不能为空");
CommonValidator.isTrue(form.getExcels() != null && form.getExcels().size() != 0, "补录模板不能为空"); CommonValidator.isTrue(form.getExcels() != null && form.getExcels().size() != 0, "补录模板不能为空");
// manager
User admin = userService.getManager();
form.setUser(admin);
// 新建活动 // 新建活动
Activity activity = new Activity(); Activity activity = new Activity();
activity = BeanUtils.convertTo(form, activity); activity = BeanUti.convertTo(form, activity);
activity.setCreateAt(DateUtil.getTimestamp()); activity.setCreateAt(DateUtil.getTimestamp());
activity.setStatus(Activity.STATUS_WAIT); activity.setStatus(Activity.STATUS_WAIT);
final Activity finalActivity = activityService.save(activity); final Activity finalActivity = activityService.save(activity);
...@@ -168,7 +162,7 @@ public class TaskController { ...@@ -168,7 +162,7 @@ public class TaskController {
excelForm.setActivity(finalActivity); excelForm.setActivity(finalActivity);
Template template = new Template(); Template template = new Template();
template = BeanUtils.convertTo(excelForm, template); template = BeanUti.convertTo(excelForm, template);
template.setCreateAt(DateUtil.getTimestamp()); template.setCreateAt(DateUtil.getTimestamp());
final Template finalTemplate = templateService.save(template); final Template finalTemplate = templateService.save(template);
...@@ -285,16 +279,17 @@ public class TaskController { ...@@ -285,16 +279,17 @@ public class TaskController {
return ""; return "";
} }
public Mission convert(Task task, Map<String, Object> params) { public Mission convertTaskToMission(Task task, Map<String, Object> params) {
Mission.MissionBuilder builder = Mission.builder(); Mission.MissionBuilder builder = Mission.builder();
int type = Integer.parseInt(params.get("type").toString()); int type = Integer.parseInt(params.get("type").toString());
builder.id(task.getId()) builder.id(task.getId())
.processId(task.getProcessInstanceId())
.user(params.get("username").toString()) .user(params.get("username").toString())
.taskType(type) .taskType(type)
.createAt(DateUtil.formatDateTime(task.getCreateTime())); .createAt(DateUtil.formatDateTime(task.getCreateTime()));
int missionType = 0; int missionType = 0;
String mission = ""; String mission = "";
if (task.getTaskDefinitionKey().toLowerCase().equals(TaskConstant.MISSION_LOW_CASE_KEY_DATA_ENTER)) { if (task.getTaskDefinitionKey().equals(TaskConstant.MISSION_KEY_DATA_ENTER)) {
missionType = TaskConstant.MISSION_TYPE_DATA_ENTER; missionType = TaskConstant.MISSION_TYPE_DATA_ENTER;
mission = TaskConstant.MISSION_TEXT_DATA_ENTER; mission = TaskConstant.MISSION_TEXT_DATA_ENTER;
long templateId = 0; long templateId = 0;
...@@ -310,14 +305,13 @@ public class TaskController { ...@@ -310,14 +305,13 @@ public class TaskController {
templateId = Long.parseLong(params.get("templateId").toString()); templateId = Long.parseLong(params.get("templateId").toString());
} }
builder.excelId(templateId); builder.excelId(templateId);
} else if (task.getTaskDefinitionKey().toLowerCase().equals(TaskConstant.MISSION_LOW_CASE_KEY__DATA_AUDIT)) { } else if (task.getTaskDefinitionKey().equals(TaskConstant.MISSION_KEY_DATA_AUDIT)) {
missionType = TaskConstant.MISSION_TYPE_DATA_AUDIT; missionType = TaskConstant.MISSION_TYPE_DATA_AUDIT;
mission = TaskConstant.MISSION_TEXT_DATA_AUDIT; mission = TaskConstant.MISSION_TEXT_DATA_AUDIT;
} else if (task.getTaskDefinitionKey().toLowerCase().equals(TaskConstant.MISSION_LOW_CASE_KEY__MANAGER_AUDIT)) { } else if (task.getTaskDefinitionKey().equals(TaskConstant.MISSION_KEY_MANAGER_AUDIT)) {
missionType = TaskConstant.MISSION_TYPE_MANAGER_AUDIT; missionType = TaskConstant.MISSION_TYPE_MANAGER_AUDIT;
mission = TaskConstant.MISSION_TEXT_MANAGER_AUDIT; mission = TaskConstant.MISSION_TEXT_MANAGER_AUDIT;
} else if (task.getTaskDefinitionKey().toLowerCase().equals(TaskConstant.MISSION_LOW_CASE_KEY__DATA_BACK_FLOW) || } else if (task.getTaskDefinitionKey().equals(TaskConstant.MISSION_KEY_DATA_BACK_FLOW)) {
task.getTaskDefinitionKey().toLowerCase().equals("_26")) {
missionType = TaskConstant.MISSION_TYPE_DATA_BACK_FLOW; missionType = TaskConstant.MISSION_TYPE_DATA_BACK_FLOW;
mission = TaskConstant.MISSION_TEXT_DATA_BACK_FLOW; mission = TaskConstant.MISSION_TEXT_DATA_BACK_FLOW;
} }
......
...@@ -10,10 +10,10 @@ public interface TaskConstant { ...@@ -10,10 +10,10 @@ public interface TaskConstant {
int MISSION_TYPE_MANAGER_AUDIT = 3; int MISSION_TYPE_MANAGER_AUDIT = 3;
int MISSION_TYPE_DATA_BACK_FLOW = 4; int MISSION_TYPE_DATA_BACK_FLOW = 4;
String MISSION_LOW_CASE_KEY_DATA_ENTER = "dataenter"; String MISSION_KEY_DATA_ENTER = "DataEnter";
String MISSION_LOW_CASE_KEY__DATA_AUDIT = "dataaudit"; String MISSION_KEY_DATA_AUDIT = "DataAudit";
String MISSION_LOW_CASE_KEY__MANAGER_AUDIT = "managerconfirm"; String MISSION_KEY_MANAGER_AUDIT = "ManagerConfirm";
String MISSION_LOW_CASE_KEY__DATA_BACK_FLOW = "databackflow"; String MISSION_KEY_DATA_BACK_FLOW = "DataBackFlow";
String MISSION_TEXT_DATA_ENTER = "填写补录数据"; String MISSION_TEXT_DATA_ENTER = "填写补录数据";
String MISSION_TEXT_DATA_AUDIT = "审核补录数据"; String MISSION_TEXT_DATA_AUDIT = "审核补录数据";
......
package com.keymobile.rest.dao;
import com.keymobile.rest.model.Mission;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface MissionDao extends JpaRepository<Mission, Long> {
List<Mission> findAllByTemplateIdAndStatus(long templateId, int status);
long countAllByActivityIdAndStatus(long activityId, int status);
Mission findByProcessIdAndTemplateIdAndStatusAndType(long processId, long templateId, int status, int type);
}
...@@ -6,7 +6,5 @@ import org.springframework.data.jpa.repository.JpaRepository; ...@@ -6,7 +6,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;
public interface ProcessDao extends JpaRepository<Process, Long> { public interface ProcessDao extends JpaRepository<Process, Long> {
Process findByProcessId(String processId); Process findByProcessId(String processId);
} }
...@@ -7,7 +7,4 @@ import java.util.List; ...@@ -7,7 +7,4 @@ import java.util.List;
public interface TemplateDao extends JpaRepository<Template, Long> { public interface TemplateDao extends JpaRepository<Template, Long> {
List<Template> findAllByIdIn(List<Long> ids);
List<Template> findAllByActivityId(long activityId);
} }
package com.keymobile.rest.dao;
import com.keymobile.rest.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface UserDao extends JpaRepository<User, Long> {
List<User> findAllByIdIn(List<Long> ids);
List<User> findAllByUsername(String username);
List<User> findAllByRole(int role);
}
...@@ -6,8 +6,5 @@ import org.springframework.data.jpa.repository.JpaRepository; ...@@ -6,8 +6,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;
public interface UserTemplateMapperDao extends JpaRepository<UserTemplateMapper, Long> { public interface UserTemplateMapperDao extends JpaRepository<UserTemplateMapper, Long> {
List<UserTemplateMapper> findAllByTemplateId(long templateId);
List<UserTemplateMapper> findAllByUserIdAndActivityStatus(long userId, int status); List<UserTemplateMapper> findAllByUserIdAndActivityStatus(long userId, int status);
} }
package com.keymobile.rest.dto; package com.keymobile.rest.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.keymobile.rest.model.User;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -17,7 +15,7 @@ public class TaskForm { ...@@ -17,7 +15,7 @@ public class TaskForm {
private String name; private String name;
@ApiModelProperty(required = true, name = "type", value = "收数类型 1手动 2自动", example = "1") @ApiModelProperty(required = true, name = "type", value = "收数类型 1手动 2自动", example = "1")
private Integer type = 1; private Integer type = 1;
@ApiModelProperty(name = "freq", value = "频度 按年 1 按周 2 按月 3 按日 4", example = "1") @ApiModelProperty(name = "freq", value = "频度 按年 1 按周 2 按月 3 按日 4", example = "1")
private Integer freq; private Integer freq;
...@@ -28,6 +26,4 @@ public class TaskForm { ...@@ -28,6 +26,4 @@ public class TaskForm {
@ApiModelProperty(required = true, name = "excels", value = "新建的模板配置数组") @ApiModelProperty(required = true, name = "excels", value = "新建的模板配置数组")
private List<ExcelForm> excels; private List<ExcelForm> excels;
@JsonIgnore
private User user;
} }
...@@ -21,6 +21,9 @@ public class Activity implements Serializable { ...@@ -21,6 +21,9 @@ public class Activity implements Serializable {
public static int TYPE_AUTO = 2; public static int TYPE_AUTO = 2;
public static int TYPE_MANUAL = 1; public static int TYPE_MANUAL = 1;
public static int NEED_CONFIRM = 2;
public static int NO_NEED_CONFIRM = 1;
public static int STATUS_WAIT = 1; public static int STATUS_WAIT = 1;
public static int STATUS_BEGIN = 2; public static int STATUS_BEGIN = 2;
/** /**
...@@ -47,6 +50,9 @@ public class Activity implements Serializable { ...@@ -47,6 +50,9 @@ public class Activity implements Serializable {
@Column(columnDefinition = ("integer(2) comment '频度'")) @Column(columnDefinition = ("integer(2) comment '频度'"))
private Integer freq; private Integer freq;
@Column(name = "need_confirm", columnDefinition = ("integer(2) default 1 comment '需要负责人确认'"))
private Integer needConfirm = 1;
@Column(nullable = false, name = "create_at") @Column(nullable = false, name = "create_at")
private Timestamp createAt; private Timestamp createAt;
...@@ -56,8 +62,8 @@ public class Activity implements Serializable { ...@@ -56,8 +62,8 @@ public class Activity implements Serializable {
/** /**
* 发送人 * 发送人
*/ */
@ManyToOne @Column(nullable = false, columnDefinition = ("bigint(22) comment '发布人id'"))
private User user; private Long userId;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "activity") @OneToMany(fetch = FetchType.EAGER, mappedBy = "activity")
private List<Template> templateList; private List<Template> templateList;
......
package com.keymobile.rest.model;
import java.io.Serializable;
import java.util.Date;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
import cn.afterturn.easypoi.handler.inter.IExcelModel;
@ExcelTarget("BankData")
public class BankData implements Serializable, IExcelModel, IExcelDataModel{
/**
*
*/
private static final long serialVersionUID = 1L;
@Excel(name = "月份", format = "yyyy-MM-dd", orderNum = "0", width=30)
private Date month;//月份
@Excel(name = "唯一键", orderNum = "1", width=30)
private String uniqueKey;//唯一键
@Excel(name = "一级分行", orderNum = "2", width=30)
private String oneSubBank;//一级分行
@Excel(name = "一级分行名称", orderNum = "3", width=30)
private String oneSubBankName;//一级分行名称
@Excel(name = "网点", orderNum = "4", width=30)
private String branches;//网点
@Excel(name = "客户号", orderNum = "5", width=30)
private String customerNum;//客户号
@Excel(name = "客户名称", orderNum = "6", width=30)
private String customerName;//客户名称
@Excel(name = "修正后的客户号", orderNum = "7", width=30)
private String updateCustomerNum;//修正后的客户号
@Excel(name = "修改后的客户开户网点", orderNum = "8", width=30)
private String updateBranches;//修改后的客户开户网点
@Excel(name = "修正后的客户名称", orderNum = "9", width=30)
private String updateCustomerName;//修正后的客户名称
private String monthString;
public BankData() {
super();
}
public BankData(String monthString,String uniqueKey,String oneSubBank,String oneSubBankName,String branches,
String customerNum,String customerName,String updateCustomerNum,String updateBranches,
String updateCustomerName) {
this.monthString = monthString;
this.uniqueKey = uniqueKey;
this.oneSubBank = oneSubBank;
this.oneSubBankName = oneSubBankName;
this.branches = branches;
this.customerNum = customerNum;
this.customerName = customerName;
this.updateCustomerNum = updateCustomerNum;
this.updateBranches = updateBranches;
this.updateCustomerName = updateCustomerName;
}
@Override
public String toString() {
return "BankData [month=" + month + ", uniqueKey=" + uniqueKey + ", oneSubBank=" + oneSubBank
+ ", oneSubBankName=" + oneSubBankName + ", branches=" + branches + ", customerNum=" + customerNum
+ ", customerName=" + customerName + ", updateCustomerNum=" + updateCustomerNum + ", updateBranches="
+ updateBranches + ", updateCustomerName=" + updateCustomerName + "]";
}
public Date getMonth() {
return month;
}
public void setMonth(Date month) {
this.month = month;
}
public String getUniqueKey() {
return uniqueKey;
}
public void setUniqueKey(String uniqueKey) {
this.uniqueKey = uniqueKey;
}
public String getOneSubBank() {
return oneSubBank;
}
public void setOneSubBank(String oneSubBank) {
this.oneSubBank = oneSubBank;
}
public String getOneSubBankName() {
return oneSubBankName;
}
public void setOneSubBankName(String oneSubBankName) {
this.oneSubBankName = oneSubBankName;
}
public String getBranches() {
return branches;
}
public void setBranches(String branches) {
this.branches = branches;
}
public String getCustomerNum() {
return customerNum;
}
public void setCustomerNum(String customerNum) {
this.customerNum = customerNum;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getUpdateCustomerNum() {
return updateCustomerNum;
}
public void setUpdateCustomerNum(String updateCustomerNum) {
this.updateCustomerNum = updateCustomerNum;
}
public String getUpdateBranches() {
return updateBranches;
}
public void setUpdateBranches(String updateBranches) {
this.updateBranches = updateBranches;
}
public String getUpdateCustomerName() {
return updateCustomerName;
}
public void setUpdateCustomerName(String updateCustomerName) {
this.updateCustomerName = updateCustomerName;
}
@org.springframework.data.annotation.Transient
private String errMsg;
@org.springframework.data.annotation.Transient
private int excelRowNum;
@Override
public String getErrorMsg() {
return errMsg;
}
@Override
public void setErrorMsg(String errorMsg) {
this.errMsg = errorMsg;
}
@Override
public Integer getRowNum() {
return excelRowNum;
}
@Override
public void setRowNum(Integer rowNum) {
this.excelRowNum = rowNum;
}
public String getMonthString() {
return monthString;
}
public void setMonthString(String monthString) {
this.monthString = monthString;
}
}
...@@ -18,9 +18,6 @@ public class Template implements Serializable { ...@@ -18,9 +18,6 @@ public class Template implements Serializable {
public static int NEED_AUDIT = 2; public static int NEED_AUDIT = 2;
public static int NO_NEED_AUDIT = 1; public static int NO_NEED_AUDIT = 1;
public static int NEED_CONFIRM = 2;
public static int NO_NEED_CONFIRM = 1;
public static int NEED_MERGE = 2; public static int NEED_MERGE = 2;
public static int NO_NEED_MERGE = 1; public static int NO_NEED_MERGE = 1;
...@@ -40,9 +37,6 @@ public class Template implements Serializable { ...@@ -40,9 +37,6 @@ public class Template implements Serializable {
@Column(name = "need_audit", columnDefinition = ("integer(2) default 1 comment '需要审核'")) @Column(name = "need_audit", columnDefinition = ("integer(2) default 1 comment '需要审核'"))
private Integer needAudit = 1; private Integer needAudit = 1;
@Column(name = "need_confirm", columnDefinition = ("integer(2) default 1 comment '需要负责人确认'"))
private Integer needConfirm = 1;
@Column(name = "need_merge", columnDefinition = ("integer(2) default 1 comment '需要数据合并'")) @Column(name = "need_merge", columnDefinition = ("integer(2) default 1 comment '需要数据合并'"))
private Integer needMerge = 1; private Integer needMerge = 1;
......
package com.keymobile.rest.model;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
/**
* 内部用户 例如 发起人 审核人
*/
@Data
@Entity
@Table(name = "t_user")
public class User implements Serializable {
public static int ROLE_NORMAL = 1;
public static int ROLE_AUDIT = 2;
public static int ROLE_MANAGER = 3;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false, columnDefinition = ("varchar(100) comment '用户名'"))
private String username;
@Column(nullable = false, columnDefinition = ("integer(2) comment '角色 1 普通 2 审核人 3 管理人'"))
private int role;
}
package com.keymobile.rest.service;
import com.keymobile.rest.akka.actor.BreakExcelActor;
import com.keymobile.rest.akka.message.BreakExcelMsg;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
@Service
public class BreakExcelService {
public String breakExcel(MultipartFile file, String breakColumn,
String exportPath, String modelPath) throws Exception {
final ActorSystem system = ActorSystem.create("ExcelBreakAkka");
BreakExcelMsg breakExcelMsg = new BreakExcelMsg(file, breakColumn, exportPath, modelPath);
ActorRef breakExcelActor = system.actorOf(Props.create(BreakExcelActor.class,
() -> new BreakExcelActor()));
breakExcelActor.tell(breakExcelMsg, ActorRef.noSender());
return "breaking the excel......";
}
}
...@@ -12,8 +12,8 @@ public class DataInfoService { ...@@ -12,8 +12,8 @@ public class DataInfoService {
@Autowired @Autowired
private DataInfoDao dataInfoDao; private DataInfoDao dataInfoDao;
public DataInfo get(long id) { public DataInfo findById(long id) {
return dataInfoDao.getOne(id); return dataInfoDao.findById(id).get();
} }
public DataInfo save(DataInfo dataInfo) { public DataInfo save(DataInfo dataInfo) {
......
package com.keymobile.rest.service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.activiti.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Service;
@Service
public class GroupDataStandardServiceImpl {
public List<String> findAssigneesForProcess(DelegateExecution execution, String groupsString) {
System.out.println(groupsString);
String[] groups = groupsString.split(",");
return this.getAssignessByGroup(groups);
}
private List<String> getAssignessByGroup(String[] groups) {
List<String> assignees = new ArrayList<>();
for (String group : groups) {
if ("group1".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group2".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group3".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group4".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group5".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group6".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group7".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group8".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
}
return assignees;
}
}
\ No newline at end of file
package com.keymobile.rest.service;
import com.keymobile.rest.common.utils.DateUtil;
import com.keymobile.rest.dao.*;
import com.keymobile.rest.model.Template;
import com.keymobile.rest.model.Mission;
import com.keymobile.rest.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Timestamp;
import java.util.List;
@Service
public class MissionService {
@Autowired
private MissionDao missionDao;
public Mission save(long userId, Template template) {
Mission info = new Mission();
info.setTemplate(template);
// 初始的开始状态
info.setStatus(Mission.STATUS_BEGIN);
info.setUserId(userId);
info.setType(Mission.TYPE_RECORD);
info.setCreateAt(DateUtil.getTimestamp());
info = missionDao.save(info);
return info;
}
public Mission save(Mission mission) {
missionDao.save(mission);
return mission;
}
public Mission findById(long missionId) {
return missionDao.getOne(missionId);
}
public Mission findByProcessIdAndUsernameAndTemplateIdAndStatusAndType(long processId, String username, long templateId, int status) {
return missionDao.findByProcessIdAndTemplateIdAndStatusAndType(processId, templateId, 1, status);
}
public List<Mission> findAllByTemplateIdAndStatus(long templateId, int status) {
return missionDao.findAllByTemplateIdAndStatus(templateId, status);
}
public long countAllByActivityIdAndStatus(long activityId, int status) {
return missionDao.countAllByActivityIdAndStatus(activityId, status);
}
}
...@@ -5,7 +5,6 @@ import com.keymobile.rest.model.Template; ...@@ -5,7 +5,6 @@ import com.keymobile.rest.model.Template;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
@Service @Service
public class TemplateService { public class TemplateService {
...@@ -13,8 +12,8 @@ public class TemplateService { ...@@ -13,8 +12,8 @@ public class TemplateService {
@Autowired @Autowired
private TemplateDao templateDao; private TemplateDao templateDao;
public Template get(long id) { public Template findById(long id) {
return templateDao.getOne(id); return templateDao.findById(id).get();
} }
public Template save(Template template) { public Template save(Template template) {
...@@ -22,15 +21,4 @@ public class TemplateService { ...@@ -22,15 +21,4 @@ public class TemplateService {
return template; return template;
} }
public List<Template> findAllByIdIn(List<Long> ids) {
return templateDao.findAllByIdIn(ids);
}
public List<Template> findAllByAssignmentId(long assignmentId) {
return templateDao.findAllByActivityId(assignmentId);
}
public void saveAll(List<Template> templateList) {
templateDao.saveAll(templateList);
}
} }
package com.keymobile.rest.service;
import com.keymobile.rest.dao.UserDao;
import com.keymobile.rest.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserDao userDao;
public List<User> findAll() {
return userDao.findAll();
}
public User getManager() {
return userDao.findAllByRole(User.ROLE_MANAGER).get(0);
}
}
...@@ -13,10 +13,6 @@ public class UserTemplateMapperService { ...@@ -13,10 +13,6 @@ public class UserTemplateMapperService {
@Autowired @Autowired
private UserTemplateMapperDao userTemplateMapperDao; private UserTemplateMapperDao userTemplateMapperDao;
public List<UserTemplateMapper> findAllByTemplateId(long templateId) {
return userTemplateMapperDao.findAllByTemplateId(templateId);
}
public List<UserTemplateMapper> findAllByUserIdAndActivityStatus(long userId, int status) { public List<UserTemplateMapper> findAllByUserIdAndActivityStatus(long userId, int status) {
return userTemplateMapperDao.findAllByUserIdAndActivityStatus(userId, status); return userTemplateMapperDao.findAllByUserIdAndActivityStatus(userId, status);
} }
......
...@@ -15,5 +15,5 @@ public class Mission { ...@@ -15,5 +15,5 @@ public class Mission {
private int missionType; private int missionType;
private String mission; private String mission;
private long excelId; private long excelId;
private String processId;
} }
package com.keymobile.rest.vo; package com.keymobile.rest.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.keymobile.rest.common.utils.BeanUtils; import com.keymobile.rest.common.utils.BeanUti;
import com.keymobile.rest.model.Activity; import com.keymobile.rest.model.Activity;
import com.keymobile.rest.model.Template; import com.keymobile.rest.model.Template;
import lombok.Data; import lombok.Data;
...@@ -34,10 +34,10 @@ public class SimpleTask { ...@@ -34,10 +34,10 @@ public class SimpleTask {
List<SimpleTemplate> simpleTemplateList = new ArrayList<>(); List<SimpleTemplate> simpleTemplateList = new ArrayList<>();
List<Template> templateList = activity.getTemplateList(); List<Template> templateList = activity.getTemplateList();
templateList.forEach(template -> { templateList.forEach(template -> {
simpleTemplateList.add(BeanUtils.convertTo(template, new SimpleTemplate())); simpleTemplateList.add(BeanUti.convertTo(template, new SimpleTemplate()));
}); });
SimpleTask task = new SimpleTask(); SimpleTask task = new SimpleTask();
task = BeanUtils.convertTo(activity, task); task = BeanUti.convertTo(activity, task);
task.setExcelList(simpleTemplateList); task.setExcelList(simpleTemplateList);
return task; return task;
} }
......
package com.keymobile.rest.vo; package com.keymobile.rest.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.keymobile.rest.common.utils.BeanUtils; import com.keymobile.rest.common.utils.BeanUti;
import com.keymobile.rest.model.Template; import com.keymobile.rest.model.Template;
import lombok.Data; import lombok.Data;
...@@ -21,7 +21,7 @@ public class SimpleTemplate { ...@@ -21,7 +21,7 @@ public class SimpleTemplate {
public static SimpleTemplate convert(Template template) { public static SimpleTemplate convert(Template template) {
SimpleTemplate simpleTemplate = new SimpleTemplate(); SimpleTemplate simpleTemplate = new SimpleTemplate();
simpleTemplate = BeanUtils.convertTo(template, simpleTemplate); simpleTemplate = BeanUti.convertTo(template, simpleTemplate);
return simpleTemplate; return simpleTemplate;
} }
} }
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
<exclusiveGateway gatewayDirection="Unspecified" id="_22"/> <exclusiveGateway gatewayDirection="Unspecified" id="_22"/>
<exclusiveGateway gatewayDirection="Unspecified" id="_23" name="ExclusiveGateway"/> <exclusiveGateway gatewayDirection="Unspecified" id="_23" name="ExclusiveGateway"/>
<exclusiveGateway gatewayDirection="Unspecified" id="_24" name="ExclusiveGateway"/> <exclusiveGateway gatewayDirection="Unspecified" id="_24" name="ExclusiveGateway"/>
<userTask activiti:assignee="${backFlowUser}" activiti:exclusive="true" id="_26" name="数据回流"/> <userTask activiti:assignee="${backFlowUser}" activiti:exclusive="true" id="DataBackFlow" name="数据回流"/>
<endEvent id="_27" name="EndEvent"/> <endEvent id="_27" name="EndEvent"/>
<sequenceFlow id="_28" sourceRef="SubProcess" targetRef="_22"/> <sequenceFlow id="_28" sourceRef="SubProcess" targetRef="_22"/>
<sequenceFlow id="_31" sourceRef="_24" targetRef="_23"> <sequenceFlow id="_31" sourceRef="_24" targetRef="_23">
...@@ -57,12 +57,12 @@ ...@@ -57,12 +57,12 @@
<![CDATA[${NeedConfirm == false }]]> <![CDATA[${NeedConfirm == false }]]>
</conditionExpression> </conditionExpression>
</sequenceFlow> </sequenceFlow>
<sequenceFlow id="_33" sourceRef="_23" targetRef="_26"> <sequenceFlow id="_33" sourceRef="_23" targetRef="DataBackFlow">
<conditionExpression xsi:type="tFormalExpression"> <conditionExpression xsi:type="tFormalExpression">
<![CDATA[${NeedDataBack == true }]]> <![CDATA[${NeedDataBack == true }]]>
</conditionExpression> </conditionExpression>
</sequenceFlow> </sequenceFlow>
<sequenceFlow id="_34" sourceRef="_26" targetRef="_27"/> <sequenceFlow id="_34" sourceRef="DataBackFlow" targetRef="_27"/>
<sequenceFlow id="_35" sourceRef="_23" targetRef="_27"> <sequenceFlow id="_35" sourceRef="_23" targetRef="_27">
<conditionExpression xsi:type="tFormalExpression"> <conditionExpression xsi:type="tFormalExpression">
<![CDATA[${NeedDataBack == false }]]> <![CDATA[${NeedDataBack == false }]]>
...@@ -113,7 +113,7 @@ ...@@ -113,7 +113,7 @@
<dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> <dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_26" id="Shape-_26"> <bpmndi:BPMNShape bpmnElement="DataBackFlow" id="Shape-DataBackFlow">
<dc:Bounds height="55.0" width="85.0" x="865.0" y="45.0"/> <dc:Bounds height="55.0" width="85.0" x="865.0" y="45.0"/>
<bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
<dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> <dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
...@@ -182,7 +182,7 @@ ...@@ -182,7 +182,7 @@
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_34" id="BPMNEdge__34" sourceElement="_26" targetElement="_27"> <bpmndi:BPMNEdge bpmnElement="_34" id="BPMNEdge__34" sourceElement="DataBackFlow" targetElement="_27">
<di:waypoint x="913.0" y="115.0"/> <di:waypoint x="913.0" y="115.0"/>
<di:waypoint x="913.0" y="170.0"/> <di:waypoint x="913.0" y="170.0"/>
<di:waypoint x="762.0" y="346.0"/> <di:waypoint x="762.0" y="346.0"/>
...@@ -277,7 +277,7 @@ ...@@ -277,7 +277,7 @@
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_33" id="BPMNEdge__33" sourceElement="_23" targetElement="_26"> <bpmndi:BPMNEdge bpmnElement="_33" id="BPMNEdge__33" sourceElement="_23" targetElement="DataBackFlow">
<di:waypoint x="817.0" y="176.0"/> <di:waypoint x="817.0" y="176.0"/>
<di:waypoint x="865.0" y="72.5"/> <di:waypoint x="865.0" y="72.5"/>
<bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
......
...@@ -9,8 +9,8 @@ eureka: ...@@ -9,8 +9,8 @@ eureka:
enabled: true enabled: true
instance: instance:
prefer-ip-address: false prefer-ip-address: false
hostname: 192.168.0.48 # hostname: 192.168.0.48
# hostname: 192.168.0.68 hostname: 192.168.0.68
hystrix: hystrix:
command: command:
default: default:
...@@ -42,7 +42,7 @@ spring: ...@@ -42,7 +42,7 @@ spring:
max-request-size: 100Mb max-request-size: 100Mb
redis: redis:
host: 192.168.0.192 host: 192.168.0.192
# host: 127.0.0.1 # host: 127.0.0.1
port: 6379 port: 6379
session: session:
store-type: redis store-type: redis
...@@ -57,8 +57,8 @@ app: ...@@ -57,8 +57,8 @@ app:
active-process: MoreSubProcessStandard.bpmn active-process: MoreSubProcessStandard.bpmn
swagger2: swagger2:
host: 192.168.0.240:8762/api/datacollector # host: 192.168.0.240:8762/api/datacollector
# host: localhost:8110 host: localhost:8110
security: security:
authUser: root authUser: root
authPwd: pwd authPwd: pwd
......
package com.keymobile; package com.keymobile;
import com.google.common.collect.ImmutableMap;
import com.keymobile.rest.controller.constant.TaskConstant;
import com.keymobile.rest.service.ActivityService; import com.keymobile.rest.service.ActivityService;
import org.activiti.engine.*; import org.activiti.engine.*;
import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.history.HistoricProcessInstance;
...@@ -40,7 +42,7 @@ public class ProcessTest { ...@@ -40,7 +42,7 @@ public class ProcessTest {
// @Value("${app.active-process}") // @Value("${app.active-process}")
private String process = "MoreSubProcessStandard.bpmn"; private String process = "MoreSubProcessStandard.bpmn";
@Test // @Test
public void createActivitiTask() { public void createActivitiTask() {
// 加载的我们创建好的demo.bpmn 文件还有png文件 // 加载的我们创建好的demo.bpmn 文件还有png文件
// 获取流的引擎 // 获取流的引擎
...@@ -125,26 +127,48 @@ public class ProcessTest { ...@@ -125,26 +127,48 @@ public class ProcessTest {
// taskService.complete(resultTask.getId(), ImmutableMap.of("signConfirm", "true", "needDataBackflow", "true")); // taskService.complete(resultTask.getId(), ImmutableMap.of("signConfirm", "true", "needDataBackflow", "true"));
// System.out.println(resultTask); // System.out.println(resultTask);
List<Task> tasks = taskService.createTaskQuery().active().list(); // List<Task> tasks = taskService.createTaskQuery().active().list();
//
// AtomicInteger i = new AtomicInteger();
// tasks.forEach(task -> {
//
//
// if (StringUtils.isEmpty(task.getAssignee())) {
// List<IdentityLink> identityLinkList = taskService.getIdentityLinksForTask(task.getId());
// if (identityLinkList != null && identityLinkList.size() > 0) {
// identityLinkList.forEach(identityLink -> {
// System.out.println("link :" + identityLink.getType());
// if (identityLink.getType().equals("candidate")) {
// i.getAndIncrement();
// taskService.claim(task.getId(), "ss" + i);
// }
// });
// }
// }
//
// });
AtomicInteger i = new AtomicInteger(); // 获取个人任务
List<Task> tasks = taskService.createTaskQuery().active().list();
tasks.forEach(task -> { tasks.forEach(task -> {
try {
System.out.println(task.getId() + "---" + task.getTaskDefinitionKey() + "---" + task.getExecutionId() + "---" + task.getProcessInstanceId());
int nrOfInstances = Integer.parseInt(runtimeService.getVariable(task.getExecutionId(), "nrOfInstances").toString());
// 当前获取的会签任务数量
int nrOfActiveInstances = Integer.parseInt(runtimeService.getVariable(task.getExecutionId(), "nrOfActiveInstances").toString());
// 已经完成的会签任务数量
int nrOfCompletedInstances = Integer.parseInt(runtimeService.getVariable(task.getExecutionId(), "nrOfCompletedInstances").toString());
System.out.println(nrOfInstances + "---" + nrOfActiveInstances + "---" + nrOfCompletedInstances);
if (StringUtils.isEmpty(task.getAssignee())) {
List<IdentityLink> identityLinkList = taskService.getIdentityLinksForTask(task.getId());
if (identityLinkList != null && identityLinkList.size() > 0) {
identityLinkList.forEach(identityLink -> {
System.out.println("link :" + identityLink.getType());
if (identityLink.getType().equals("candidate")) {
i.getAndIncrement();
taskService.claim(task.getId(), "汤颖思" + i);
}
});
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}); });
// taskService.claim("17532", "小米");
} }
@Test @Test
...@@ -207,4 +231,17 @@ public class ProcessTest { ...@@ -207,4 +231,17 @@ public class ProcessTest {
// System.out.println(e.getMessage()); // System.out.println(e.getMessage());
// } // }
} }
@Test
public void asdsa() {
try {
// taskService.complete( "28", ImmutableMap.of("needDataAudit", false, "needConfirm", false, "NeedDataBack", false));
taskService.complete("52504", ImmutableMap.of("DataAudit", true, "NeedDataAudit", true,"auditUser","asdsa", "NeedConfirm", false, "NeedDataBack", false));
} catch (Exception e) {
e.printStackTrace();
}
// taskService.complete("12508", ImmutableMap.of("Confirm", true, "NeedDataBack", false));
}
} }
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