From d70484535765b9f4a6192871a8c14fd8258e8a55 Mon Sep 17 00:00:00 2001 From: ArgonarioD Date: Wed, 13 Jul 2022 10:49:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=BA=86import=E7=9A=84?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=92=8C=E6=A8=A1=E6=9D=BF=EF=BC=8C=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E4=BA=86banIP=E4=B8=ADIP=E7=9A=84=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=BA=86import?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=B8=AAbug=EF=BC=8C=E5=88=A0=E6=8E=89?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E6=89=93todo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/MybatisPlusConfig.java | 6 ++-- .../config/SerializeConfig.java | 5 ++- .../controller/ProjectGroupController.java | 3 -- .../controller/StaffController.java | 7 ++--- .../controller/TaskController.java | 4 +-- .../service/impl/StaffServiceImpl.java | 17 +++++----- .../utils/http/IPAddress.java | 3 +- .../resources/static/public/账户导入模板.xlsx | Bin 9942 -> 9968 bytes .../rmdjzz/projectmanagement/ExcelTests.java | 29 ++++++++++++++++++ 9 files changed, 51 insertions(+), 23 deletions(-) create mode 100644 src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/ExcelTests.java diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/MybatisPlusConfig.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/MybatisPlusConfig.java index 341c1ed..f924e36 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/MybatisPlusConfig.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/MybatisPlusConfig.java @@ -22,9 +22,9 @@ public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); - interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); - interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //分页插件 + interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); //乐观锁插件 + interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); //防全表更新删除插件 return interceptor; } } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SerializeConfig.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SerializeConfig.java index ed81dda..84ed59d 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SerializeConfig.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SerializeConfig.java @@ -17,7 +17,7 @@ import java.time.*; import java.util.Map; /** - * Jackson序列化配置,主要配置了{@link LocalDateTime} {@link LocalDate} {@link LocalTime}转为秒级时间戳的序列化 + * Jackson序列化配置以及Springboot Converter配置 * * @author 佘语殊 * @since 2022/6/28 23:59 @@ -103,7 +103,6 @@ public class SerializeConfig { return javaTimeModule; } - //TODO: Redis可能改成tostringSerializer private SimpleModule customClassModule() { SimpleModule customClassModule = new SimpleModule("CustomClassModule"); customClassModule.addSerializer(IPAddress.class, new JsonSerializer<>() { @@ -117,7 +116,7 @@ public class SerializeConfig { customClassModule.addDeserializer(IPAddress.class, new JsonDeserializer<>() { @Override public IPAddress deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - return IPAddress.of(Long.decode(p.getValueAsString())); + return IPAddress.of(Long.decode('#' + p.getValueAsString())); } }); return customClassModule; diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java index b4b79ec..d796b2b 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java @@ -70,7 +70,6 @@ public class ProjectGroupController { )); } - //TODO: test @Operation(description = "body中只传staffUsername和projectStaffPosition") @SneakyThrows @PostMapping @@ -98,7 +97,6 @@ public class ProjectGroupController { throw new BadRequestException(BadRequestException.OPERATE_FAILED); } - //TODO: test @Operation(description = "body中只传projectStaffPosition") @SneakyThrows @PutMapping("/{staffId}") @@ -123,7 +121,6 @@ public class ProjectGroupController { return ResponseMap.ofSuccess(projectGroupService.collectStatsForGroupPositions(token, projectId)); } - //TODO: TEST @Operation(description = "请求体是一个key为taskId,value为staffId的map") @SneakyThrows @PutMapping("/{staffId}/transfer") diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/StaffController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/StaffController.java index 6571d4a..47ecd8b 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/StaffController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/StaffController.java @@ -4,7 +4,6 @@ import cn.edu.hfut.rmdjzz.projectmanagement.entity.Staff; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException; import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService; -import cn.edu.hfut.rmdjzz.projectmanagement.utils.FileUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.HttpUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap; @@ -54,7 +53,7 @@ public class StaffController { @PostMapping(value = "/import") public ResponseMap importStaffs( @RequestHeader(TokenUtils.HEADER_TOKEN) String token, - @RequestHeader(FileUtils.HEADER_FILE_DIGEST) String digest, + @RequestParam("fileDigest") String digest, @RequestParam("uploadFile") MultipartFile uploadFile ) { if (null == uploadFile) { @@ -92,7 +91,7 @@ public class StaffController { @ResponseStatus(HttpStatus.SEE_OTHER) public ResponseMap downloadTemplate() { return ResponseMap.of(HttpStatus.SEE_OTHER.value(), - HttpStatus.SEE_OTHER.getReasonPhrase()) - .put("URI","/public/账户导入模板.xlsx"); + HttpStatus.SEE_OTHER.getReasonPhrase()) + .put("URI", "/public/账户导入模板.xlsx"); } } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java index 6c7105b..5c9505c 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java @@ -1,6 +1,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.StaffProcessDTO; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskDTO; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService; @@ -122,10 +123,9 @@ public class TaskController { return ResponseMap.ofSuccess("查询成功", taskService.getProjectProcessOfEveryone(token, projectId)); } - //TODO: @SneakyThrows @GetMapping({"/stats", "/stats/{staffId}"}) - public ResponseList getProjectStatistics( + public ResponseList getProjectStatistics( @RequestHeader(TokenUtils.HEADER_TOKEN) String token, @PathVariable Integer projectId, @PathVariable(required = false) Integer staffId diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/StaffServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/StaffServiceImpl.java index 0927cf8..5481e7f 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/StaffServiceImpl.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/StaffServiceImpl.java @@ -10,10 +10,13 @@ import cn.edu.hfut.rmdjzz.projectmanagement.utils.MapBuilder; import cn.edu.hfut.rmdjzz.projectmanagement.utils.TimeUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.IPAddress; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; @@ -159,10 +162,8 @@ public class StaffServiceImpl extends ServiceImpl implements throw new BadRequestException("读取列staffGlobalLevel失败"); } System.out.println(staffGlobalLevelC); - for (int i = 0; i < totalCount; i++) { - if (Integer.parseInt(staffGlobalLevelC.get(i)) != 2 && Integer.parseInt(staffGlobalLevelC.get(i)) != 3) { - throw new BadRequestException("列staffGlobalLevel无效"); - } + if (staffGlobalLevelC.stream().anyMatch(level -> Integer.parseInt(level) < 2)) { + throw new BadRequestException("列staffGlobalLevel无效"); } for (int i = 0; i < totalCount; i++) { @@ -198,10 +199,12 @@ public class StaffServiceImpl extends ServiceImpl implements return false; } for (int i = 1; i <= sheet.getLastRowNum(); i++) { - String value = sheet.getRow(i).getCell(columnIndex).getStringCellValue(); - if (value == null || value.length() <= 2) + XSSFCell cell = sheet.getRow(i).getCell(columnIndex); + cell.setCellType(CellType.STRING); + String value = cell.getStringCellValue(); + if (StringUtils.isEmpty(value)) return true; - result.add(value.substring(1, value.length() - 1)); + result.add(value); } return true; } catch (Exception e) { diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/http/IPAddress.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/http/IPAddress.java index ee6b965..3b18564 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/http/IPAddress.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/http/IPAddress.java @@ -16,6 +16,7 @@ public class IPAddress { public static IPAddress of(String ip) { long ipHex = 0; + ip = ip.substring(0, ip.indexOf(':')); String[] split = ip.split("\\."); for (String s : split) { ipHex = (ipHex << 8) + Integer.parseInt(s); @@ -38,6 +39,6 @@ public class IPAddress { @Override public String toString() { - return "#" + Long.toHexString(ipHex); + return Long.toHexString(ipHex); } } diff --git a/src/main/resources/static/public/账户导入模板.xlsx b/src/main/resources/static/public/账户导入模板.xlsx index 35cd573fa03da06a3db03730f95f8a03ded46bc3..e8202999e449194c7f8d99044ceda85d8784ca83 100644 GIT binary patch delta 3309 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 delta 3299 zcmZ9PcQ72<7sr=nwXldFh`ua>)kW`Zl?WSk6D7(j(Swj|tQIB2E)k-$h#nSER~I!( z^csX9PZyCWzvTCud2inD{Bh^ZoO9=%`OdxPbI+d9q*2u@2rZ?Sly^u90Q7(9BHETgRM&eU%rTiW zbfOx~{flRNrj2sd#bQ_t^(J9nMrkCyjgH zk&|&CFsU;F&P9)bH+Q96`I0W?Jkzua)ZqpnYi3yMArF;|h zhD^u>e33%j1^7Uy?RVL3uch2nZhmDjUP{_=4?AsxcKZR@6J(95Ql_%C(M`dioIcI( z0Q{?XTdt|LlkkY&shS^dpL?07c4+h2?Y%P|7g%jDY1s#gUk2whyu6#A!h}6BCIk(M zYK1iUneNr3_$yl@mRvW55!{tIJ;qY@!Ln*d*aXIlnOhiXk#EhkOuGt;H?69Fb!Zq) zQp<&Ae&wz&$|ZtQcQg5K`l~YO!VkO6!Y5 z^RH7}`ypn%3WwOomB_5J@X%>qo~(XUO(cqCy-j)uzvMd7OM~kIge*sG7l_6bRTHSv zhO`OJc`oAw?p?tn<`O{daMrysO+BeiTLW~VnQt&xPhb0*o&5LSmYtEr#)TwR!zfK6 z*NY+?LySTT>I~5SmES3LQWh;-70#JMS<>+3r$K6Y^fG~YCaOpIX=A7yk|Xf@(ks9m&_gcN-KBll@8;D>px+9MhtVF@ys5D z%5pMb0sCzK`KzI*#CT6<`V7Eh{*F$u9bJ{IM-Hl6$C^Zz01Y&UQ3q;1)3`9dP^DtC z=raFUrqN`sGR85@%+o~1Np6o;VV&`iL58~+q1MK7G+j+Miwr@N;BtXXxDbB28dhou zDcwuA!{vM+0Dz$e09XOIC4M$^25v6l4U9f&SLFD{%_Ry)jcKyTvXY&OMmfa9U!P|s zG^;QYwV7t6tsxW}P;JkA?PZDAmv7K}u$HB*sIqnir&-Jaw2;giWiTN|{quNW+|DrO zFi%w5(Hi=dj-w^J<%!e+Ym>jsGeJF9q`LcVQ-*|~`$&g&VK}peuwyNHFUXx`Fo0R> zx>lpTK8K4T&BT~8PklYi5Ftbb)~S#tJO#fSp-j9$mMa7npn_?PX_{;UfGGdy=M8Sj zOXN_9_4>!SNlOW@svS|2NPe3*7tGY&YXK!u_aFyjSPofS)gHHTWMH#b)txa`Y5xV3yT$z13u` zKRBPbYw<&!Xpy&?(-n04K$#rtSJLOKQ z{_c&Jmwy)YWpeU%0tQB}b3gKkq>fqL!c0H;fSXMJd+I~z{=xT0&D@8y0^h+r(VCJ) zc+1PFx|Y&kja3W#8UE}}<|~)m;o!h+TL=qoV(2kCpxkR#lW1C#Eo~9$`C$PYiiRld zg=NL2O%!!(t)spb*uOV5;QJDV>&akGk*;nZ;qgEh!yUKu)&tvb>-&l-v(+ zD=#FD=L6n2Xp*Ch&5a4FuMXj_Mkh=Z9BR^tz312#O-)dU$A9ew@RZ_2eD4(jYJ^Ia;DIm zJrBQOSDur72-G~_o1&@cTHI3PjjSk49ef3L(Z?5{Zs*pG703hfWXTWZ?zE&dAk-r% zN^hbTbKxE8D~@t->h2UBkO4*7Hb0hf*5>T&U~{8>cd~>RvyT*~Ez1%4ZYRK6ut<%B z=L`DzU$q%BdW}oykNOIlEpd^f@?+@ZgDxTE*<~ld}hV8S!n?1vM%auET5ZnRW}ZQHPVE6 zz=<;?>}0Lem1oiM#-m^CjlJLv+GzaSXgi974PC2P-PEk7a)xRlgUWP;i>n__GD25Q zjpZRyF0z?g#+;|^zHDN{c}i?Pi97FQm8VXAk$d#%`gM|hG2C<sJqWr`E=7t75!Q zQoIw<2{T@RKjfgYGN(*aA^`x(aQoM9pe5iy2_}j?hE1jm;;1T@3>UWhvXQK|;-Frk=_E z==@BdDNFMP5r!w_!DD}M?pY(qZc2%sGGRyR@LSE@qbJ&4fIIIEsKqr;@?I+t3f!3H z;iJhsv6a;^PLVulZ1i&5SsvBthxjY!gFsvAi^wyKKz{>`G8z&&r=B23h9+9=hL&k z|L|~+&`NyasPf9oN9~~3m-8w6Db*h#Yb@DGfmAZyW9pW_)pV?J>makp<^y@tD=djxIQ?CnmYvw7|MVVpu)fb5OpI8Dp?98l5l13`S(h zS8rh@4U;9TZEPgtUs!6QhmDpw`eOz(Hs%{k?|sI`3AU1QFiLjZvJ`9h@*eclNmnbR zfaykc=%f|!C8;Lp7StU^3%%I49%(qO$u)gEtW-NUHbh9AbAgY>W`;P94O=1*w`tQ^ z#Z^h0H}^=AoV|!08WqJi0m5`0DxnoX2Vem(6j&h7xcT; z|7~2jMSgA4A7C5=0ulUwApD&LC};lfXz@Qh;P&~L*#CYfWB>ruKZ(D+0bCA5o%9wv v&Y2zZ`*dMaMGl-RhY$|=yO6){!*A>`{A-sY?zw;pNk6VvfDe?;_b2op>&5@s diff --git a/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/ExcelTests.java b/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/ExcelTests.java new file mode 100644 index 0000000..da56d5e --- /dev/null +++ b/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/ExcelTests.java @@ -0,0 +1,29 @@ +package cn.edu.hfut.rmdjzz.projectmanagement; + +import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService; +import cn.edu.hfut.rmdjzz.projectmanagement.utils.FileUtils; +import lombok.SneakyThrows; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.web.multipart.MultipartFile; + +/** + * @author 佘语殊 + * @since 2022/7/13 10:05 + */ +@SpringBootTest +public class ExcelTests { + + @Autowired + private IStaffService staffService; + + @SneakyThrows + @Test + public void importTest() { + MultipartFile excelFile = new MockMultipartFile("账户导入模板.xlsx", + FileUtils.class.getClassLoader().getResourceAsStream("static/public/账户导入模板.xlsx")); + staffService.multiImport("", excelFile); + } +}