diff --git a/pom.xml b/pom.xml
index 2608b6e..c60d5e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -248,6 +248,16 @@
bcutil-jdk18on
1.78.1
+
+ org.apache.poi
+ poi
+ 5.2.5
+
+
+ org.apache.poi
+ poi-ooxml
+ 5.2.5
+
@@ -467,6 +477,7 @@
42.7.3
+
diff --git a/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoManageController.java b/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoManageController.java
index 451981a..0aa8309 100644
--- a/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoManageController.java
+++ b/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoManageController.java
@@ -242,15 +242,16 @@ public class ContractInfoManageController {
ContractInfoStatus bean = new ContractInfoStatus();
bean.setTs_code(contractInfo.getTs_code());
contractInfoStatusMapper.insertSelective(bean);
+ }else {
+ ContractInfoStatus info = opStatu.get();
+ info.setContract_status(0);
+ info.setScribe_status(null);
+ info.setScribe_update_time(null);
+ info.setScribe_number(null);
+ info.setTs_code(null);
+ contractInfoStatusMapper.updateByPrimaryKeySelective(info);
}
- ContractInfoStatus info = opStatu.get();
- info.setContract_status(0);
- info.setScribe_status(null);
- info.setScribe_status(null);
- info.setScribe_update_time(null);
- info.setScribe_number(null);
- info.setTs_code(null);
- contractInfoStatusMapper.updateByPrimaryKeySelective(info);
+
}
return R.SUCCESS("ok");
@@ -292,15 +293,16 @@ public class ContractInfoManageController {
bean.setTs_code(contractInfo.getTs_code());
bean.setContract_status(1);
contractInfoStatusMapper.insertSelective(bean);
+ }else {
+ ContractInfoStatus info = opStatu.get();
+ info.setContract_status(1);
+ info.setScribe_status(null);
+ info.setScribe_update_time(null);
+ info.setScribe_number(null);
+ info.setTs_code(null);
+ contractInfoStatusMapper.updateByPrimaryKeySelective(info);
}
- ContractInfoStatus info = opStatu.get();
- info.setContract_status(1);
- info.setScribe_status(null);
- info.setScribe_status(null);
- info.setScribe_update_time(null);
- info.setScribe_number(null);
- info.setTs_code(null);
- contractInfoStatusMapper.updateByPrimaryKeySelective(info);
+
}
diff --git a/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoScribeController.java b/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoScribeController.java
index d0c3af3..daeaed3 100644
--- a/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoScribeController.java
+++ b/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoScribeController.java
@@ -1,6 +1,14 @@
package jj.tech.finance.biz.webadmin.controller;
-import static org.mybatis.dynamic.sql.SqlBuilder.*;
+import static org.mybatis.dynamic.sql.SqlBuilder.count;
+import static org.mybatis.dynamic.sql.SqlBuilder.equalTo;
+import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;
+import static org.mybatis.dynamic.sql.SqlBuilder.isEqualToWhenPresent;
+import static org.mybatis.dynamic.sql.SqlBuilder.isLikeWhenPresent;
+import static org.mybatis.dynamic.sql.SqlBuilder.isNull;
+import static org.mybatis.dynamic.sql.SqlBuilder.or;
+import static org.mybatis.dynamic.sql.SqlBuilder.select;
+import static org.mybatis.dynamic.sql.SqlBuilder.selectDistinct;
import java.time.LocalDateTime;
import java.util.HashMap;
@@ -14,7 +22,6 @@ import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.dynamic.sql.BasicColumn;
import org.mybatis.dynamic.sql.SqlBuilder;
-import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
import org.mybatis.dynamic.sql.render.RenderingStrategies;
import org.mybatis.dynamic.sql.select.QueryExpressionDSL;
import org.mybatis.dynamic.sql.select.SelectModel;
@@ -22,11 +29,9 @@ import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.where.WhereApplier;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -37,7 +42,6 @@ import jakarta.validation.Valid;
import jj.tech.finance.biz.web.dao.ContractInfoSelectMapper;
import jj.tech.finance.biz.webadmin.dao.SelectMapper;
import jj.tech.finance.biz.webadmin.vo.ContractInfoStatuScribe;
-import jj.tech.finance.biz.webadmin.vo.ContractInfoStatuScribeStore;
import jj.tech.finance.biz.webadmin.vo.ScribeVo;
import jj.tech.finance.biz.webadmin.vo.parm.Contract;
import jj.tech.finance.biz.webadmin.vo.parm.Id;
@@ -411,5 +415,8 @@ public class ContractInfoScribeController {
}
+
+
+
}
diff --git a/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoScribeExcelController.java b/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoScribeExcelController.java
new file mode 100644
index 0000000..d305944
--- /dev/null
+++ b/src/main/java/jj/tech/finance/biz/webadmin/controller/ContractInfoScribeExcelController.java
@@ -0,0 +1,172 @@
+package jj.tech.finance.biz.webadmin.controller;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jj.tech.finance.biz.web.dao.ContractInfoSelectMapper;
+import jj.tech.finance.biz.webadmin.dao.SelectMapper;
+import jj.tech.finance.biz.webadmin.service.ScribeService;
+import jj.tech.finance.biz.webadmin.vo.ScribeExcelVo;
+import jj.tech.finance.biz.webadmin.vo.parm.Contract;
+import jj.tech.finance.repository.mybatis.dao.ContractInfoMapper;
+import jj.tech.finance.repository.mybatis.dao.ContractInfoStatusMapper;
+import jj.tech.finance.repository.mybatis.dao.ContractInfoStatusScribeMapper;
+import jj.tech.finance.repository.mybatis.dao.FutDailyMapper;
+import jj.tech.finance.repository.mybatis.entity.ContractInfoStatusScribe;
+import jj.tech.finance.utils.R;
+
+@RestController
+@Tag(name = "contractInfoScribeExcelController", description = "划线管理,excel,最大处理1万条")
+@RequestMapping(value = "/op/scribe/excel", name = "划线管理,excel")
+public class ContractInfoScribeExcelController {
+
+ @Autowired ObjectMapper objectMapper;
+ @Autowired ContractInfoMapper contractInfoMapper;
+ @Autowired ContractInfoStatusMapper contractInfoStatusMapper;
+ @Autowired ContractInfoStatusScribeMapper contractInfoStatusScribeMapper;
+ @Autowired ContractInfoSelectMapper contractInfoSelectMapper;
+ @Autowired FutDailyMapper futDailyMapper;
+ @Autowired SelectMapper selectMapper;
+ @Autowired ScribeService scribeService;
+
+
+ @Operation(summary = "传入解析excel之后的json数据,批量给合约添加划线值", description = "")
+ @PostMapping(value="/do")
+ public Object dos(@RequestBody(required = true) List parm) {
+
+ Map> map = parm.stream().collect(Collectors.groupingBy(ScribeExcelVo::getTs_code));
+
+ AtomicInteger item_sum = new AtomicInteger(0);
+ AtomicInteger ts_code_sum = new AtomicInteger(0);
+ map.forEach((ts_code, v)->{
+ int sum = scribeService.add(ts_code, v);
+ item_sum.addAndGet(sum);
+ ts_code_sum.addAndGet(1);
+ });
+ HashMap h = new HashMap();
+ h.put("item_sum", item_sum.intValue());
+ h.put("ts_code_sum", ts_code_sum.intValue());
+ return R.SUCCESS("item_sum:更新划线条数, ts_code_sum:合约数", h);
+ }
+
+
+ @Operation(summary = "导入划线excel,返回解析完成的json数据,最大处理1万条数据", description = "")
+ @PostMapping(value="/import", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+ public Object importExcel(@RequestPart(value = "file") MultipartFile excelFile) throws Exception {
+
+ List list = new ArrayList();
+ XSSFWorkbook workbook = new XSSFWorkbook(excelFile.getInputStream());
+ XSSFSheet worksheet = workbook.getSheetAt(0);
+
+ if(worksheet.getPhysicalNumberOfRows()>10000) {
+ return R.FALSE("批处理数据不能大于1万条");
+ }
+
+ for(int i=5;i<=worksheet.getPhysicalNumberOfRows() ;i++) {
+
+ try {
+ XSSFRow row = worksheet.getRow(i);
+ ScribeExcelVo vo = new ScribeExcelVo();
+ vo.setName(row.getCell(0).getStringCellValue());
+ vo.setTs_code(row.getCell(1).getStringCellValue());
+ vo.setIdname(row.getCell(2).getStringCellValue());
+ vo.setScribe_value(BigDecimal.valueOf(row.getCell(3).getNumericCellValue()));
+ vo.setScribe_shor_name(row.getCell(4).getStringCellValue());
+ vo.setScribe_id(Double.valueOf(row.getCell(5).getNumericCellValue()).intValue());
+ vo.setScribe_name(row.getCell(6).getStringCellValue());
+ list.add(vo);
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+// System.out.println(row.getCell(0).getStringCellValue());
+// System.out.println(row.getCell(1).getStringCellValue());
+// System.out.println(row.getCell(2).getStringCellValue());
+// System.out.println(row.getCell(3).getNumericCellValue());
+// System.out.println(row.getCell(4).getStringCellValue());
+// System.out.println(row.getCell(5).getNumericCellValue());
+// System.out.println(row.getCell(6).getStringCellValue());
+// System.out.println("=============");
+ }
+ IOUtils.close(workbook);
+ return R.SUCCESS(list);
+ }
+
+
+ @Operation(summary = "导入划线excel,并直接给合约添加划线数据, 最大处理1万条。 返回成功的条数", description = "")
+ @PostMapping(value="/importdo", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+ public Object importExcelAndDo(@RequestPart(value = "file") MultipartFile excelFile) throws Exception {
+
+ List list = new ArrayList();
+ XSSFWorkbook workbook = new XSSFWorkbook(excelFile.getInputStream());
+ XSSFSheet worksheet = workbook.getSheetAt(0);
+
+ if(worksheet.getPhysicalNumberOfRows()>10000) {
+ return R.FALSE("批处理数据不能大于1万条");
+ }
+
+ for(int i=5;i<=worksheet.getPhysicalNumberOfRows() ;i++) {
+
+ try {
+ XSSFRow row = worksheet.getRow(i);
+ ScribeExcelVo vo = new ScribeExcelVo();
+ vo.setName(row.getCell(0).getStringCellValue());
+ vo.setTs_code(row.getCell(1).getStringCellValue());
+ vo.setIdname(row.getCell(2).getStringCellValue());
+ vo.setScribe_value(BigDecimal.valueOf(row.getCell(3).getNumericCellValue()));
+ vo.setScribe_shor_name(row.getCell(4).getStringCellValue());
+ vo.setScribe_id(Double.valueOf(row.getCell(5).getNumericCellValue()).intValue());
+ vo.setScribe_name(row.getCell(6).getStringCellValue());
+ list.add(vo);
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ IOUtils.close(workbook);
+
+
+ Map> map = list.stream().collect(Collectors.groupingBy(ScribeExcelVo::getTs_code));
+ AtomicInteger item_sum = new AtomicInteger(0);
+ AtomicInteger ts_code_sum = new AtomicInteger(0);
+ map.forEach((ts_code, v)->{
+ int sum = scribeService.add(ts_code, v);
+ item_sum.addAndGet(sum);
+ ts_code_sum.addAndGet(1);
+ });
+ HashMap h = new HashMap();
+ h.put("item_sum", item_sum.intValue());
+ h.put("ts_code_sum", ts_code_sum.intValue());
+ return R.SUCCESS("item_sum:更新划线条数, ts_code_sum:合约数", h);
+
+ }
+
+
+
+
+
+}
diff --git a/src/main/java/jj/tech/finance/biz/webadmin/controller/SysAdminLoginController.java b/src/main/java/jj/tech/finance/biz/webadmin/controller/SysAdminLoginController.java
index 5173844..08adbb8 100644
--- a/src/main/java/jj/tech/finance/biz/webadmin/controller/SysAdminLoginController.java
+++ b/src/main/java/jj/tech/finance/biz/webadmin/controller/SysAdminLoginController.java
@@ -85,6 +85,10 @@ public class SysAdminLoginController {
return R.SUCCESS("logout is ok");
}
+ public static void main(String[] args) {
+ System.out.println(DigestUtils.sha3_256Hex("test114514@"));;
+ }
+
}
diff --git a/src/main/java/jj/tech/finance/biz/webadmin/controller/UploadExcleController.java b/src/main/java/jj/tech/finance/biz/webadmin/controller/UploadExcleController.java
new file mode 100644
index 0000000..44fb96a
--- /dev/null
+++ b/src/main/java/jj/tech/finance/biz/webadmin/controller/UploadExcleController.java
@@ -0,0 +1,6 @@
+package jj.tech.finance.biz.webadmin.controller;
+
+public class UploadExcleController {
+
+
+}
diff --git a/src/main/java/jj/tech/finance/biz/webadmin/service/ScribeService.java b/src/main/java/jj/tech/finance/biz/webadmin/service/ScribeService.java
new file mode 100644
index 0000000..0134063
--- /dev/null
+++ b/src/main/java/jj/tech/finance/biz/webadmin/service/ScribeService.java
@@ -0,0 +1,78 @@
+package jj.tech.finance.biz.webadmin.service;
+
+import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.commons.lang3.mutable.MutableInt;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jj.tech.finance.biz.web.dao.ContractInfoSelectMapper;
+import jj.tech.finance.biz.webadmin.vo.ScribeExcelVo;
+import jj.tech.finance.repository.mybatis.dao.ContractInfoStatusMapper;
+import jj.tech.finance.repository.mybatis.dao.ContractInfoStatusScribeMapper;
+import jj.tech.finance.repository.mybatis.dao.support.ContractInfoStatusDynamicSqlSupport;
+import jj.tech.finance.repository.mybatis.dao.support.ContractInfoStatusScribeDynamicSqlSupport;
+import jj.tech.finance.repository.mybatis.entity.ContractInfoStatus;
+import jj.tech.finance.repository.mybatis.entity.ContractInfoStatusScribe;
+
+@Service
+public class ScribeService {
+
+ @Autowired ContractInfoStatusMapper contractInfoStatusMapper;
+ @Autowired ContractInfoStatusScribeMapper contractInfoStatusScribeMapper;
+ @Autowired ContractInfoSelectMapper contractInfoSelectMapper;
+
+ @Transactional
+ public Integer add(String ts_code, List listExcel) {
+
+
+ contractInfoStatusScribeMapper.delete(d->d.where(
+ ContractInfoStatusScribeDynamicSqlSupport.ts_code, isEqualTo(ts_code)));
+
+ AtomicInteger sum = new AtomicInteger(0);
+// MutableInt cnt = new MutableInt(0);//线程不安全
+// BigDecimal sum = BigDecimal.ZERO;
+ listExcel.forEach(i->{
+ ContractInfoStatusScribe entity = new ContractInfoStatusScribe();
+ entity.setScribe_id(i.getScribe_id());
+ entity.setScribe_value(i.getScribe_value());
+ entity.setColour("");
+ entity.setTs_code(ts_code);
+ contractInfoStatusScribeMapper.insertSelective(entity);
+ sum.addAndGet(1);
+ });
+
+
+ ContractInfoStatus info = contractInfoStatusMapper.selectOne(s->s
+ .where(ContractInfoStatusDynamicSqlSupport.ts_code, isEqualTo(ts_code))
+ .limit(1)
+ ).orElse(null);
+
+ if(info==null) {
+ ContractInfoStatus bean = new ContractInfoStatus();
+ bean.setTs_code(ts_code);
+ bean.setContract_status(0);
+ bean.setScribe_status(0);
+ bean.setScribe_number(sum.intValue());
+ bean.setScribe_update_time(LocalDateTime.now());
+ contractInfoStatusMapper.insertSelective(bean);
+ }else {
+ ContractInfoStatus bean = new ContractInfoStatus();
+ bean.setId(info.getId());
+ bean.setScribe_update_time(LocalDateTime.now());
+ bean.setScribe_number(sum.intValue());
+ contractInfoStatusMapper.updateByPrimaryKeySelective(bean);
+ }
+
+
+ return sum.intValue();
+
+ }
+
+}
diff --git a/src/main/java/jj/tech/finance/biz/webadmin/vo/ScribeExcelVo.java b/src/main/java/jj/tech/finance/biz/webadmin/vo/ScribeExcelVo.java
new file mode 100644
index 0000000..da35e59
--- /dev/null
+++ b/src/main/java/jj/tech/finance/biz/webadmin/vo/ScribeExcelVo.java
@@ -0,0 +1,61 @@
+package jj.tech.finance.biz.webadmin.vo;
+
+import java.math.BigDecimal;
+
+public class ScribeExcelVo {
+ public String name;
+ public String ts_code;
+ public String idname;
+ public BigDecimal scribe_value;
+ public String scribe_shor_name;
+ public Integer scribe_id;
+ public String scribe_name;
+
+
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getTs_code() {
+ return ts_code;
+ }
+ public void setTs_code(String ts_code) {
+ this.ts_code = ts_code;
+ }
+ public String getIdname() {
+ return idname;
+ }
+ public void setIdname(String idname) {
+ this.idname = idname;
+ }
+ public BigDecimal getScribe_value() {
+ return scribe_value;
+ }
+ public void setScribe_value(BigDecimal scribe_value) {
+ this.scribe_value = scribe_value;
+ }
+ public String getScribe_shor_name() {
+ return scribe_shor_name;
+ }
+ public void setScribe_shor_name(String scribe_shor_name) {
+ this.scribe_shor_name = scribe_shor_name;
+ }
+ public Integer getScribe_id() {
+ return scribe_id;
+ }
+ public void setScribe_id(Integer scribe_id) {
+ this.scribe_id = scribe_id;
+ }
+ public String getScribe_name() {
+ return scribe_name;
+ }
+ public void setScribe_name(String scribe_name) {
+ this.scribe_name = scribe_name;
+ }
+
+
+
+
+}
diff --git a/src/main/java/jj/tech/finance/config/enums/ScribeEnum.java b/src/main/java/jj/tech/finance/config/enums/ScribeEnum.java
new file mode 100644
index 0000000..b48b40e
--- /dev/null
+++ b/src/main/java/jj/tech/finance/config/enums/ScribeEnum.java
@@ -0,0 +1,31 @@
+package jj.tech.finance.config.enums;
+
+public enum ScribeEnum {
+
+ s1(1,"小动态支撑",""), s2(2,"普通/动态支撑",""), s3(3,"高级支撑",""),
+ s4(4,"小动态压力",""), s5(5,"普通/动态压力",""), s6(6,"高级压力",""),
+ s7(7,"小动态重合位",""), s8(8,"重合位",""), s9(9,"高级重合位","")
+ ;
+
+ public Integer id;
+ public String scribe_name;
+ public String colour;
+
+ ScribeEnum(Integer id, String scribe_name, String colour) {
+ this.scribe_name=scribe_name;
+ this.colour=colour;
+ }
+
+ public Integer getId() {
+ return this.id;
+ }
+
+ public String getScribeName() {
+ return this.scribe_name;
+ }
+
+ public String getColour() {
+ return this.colour;
+ }
+
+}