From cc8d2b9a40189629c1b4513d3749251cbaf68133 Mon Sep 17 00:00:00 2001 From: jiangxiaoming <jiangxiaoming@seaskysh.com> Date: Fri, 13 Dec 2024 13:23:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E5=8D=95=E5=AF=BC=E5=85=A5=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=A2=9E=E5=88=A0=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/enums/IncomeStateEnum.java | 31 +++++ .../template/web/api/IIncomeController.java | 47 +++++++ .../web/dto/request/DepartmentRequest.java | 4 - .../web/dto/request/IncomeFailTemplate.java | 19 +++ .../web/dto/request/IncomeSaveRequest.java | 55 ++++++++ .../web/dto/request/IncomeTemplate.java | 45 ++++++ .../web/dto/request/TrainingFailTemplate.java | 2 +- .../web/dto/request/TrainingRequest.java | 3 - .../src/main/java/com/seasky/Application.java | 2 + .../template/business/api/IncomeService.java | 24 ++++ .../business/dao/mapper/IncomeMapper.java | 36 +++++ .../business/dao/mapper/TrainingMapper.java | 2 +- .../template/business/entity/Income.java | 60 ++++++++ .../business/service/IncomeServiceImpl.java | 118 ++++++++++++++++ .../business/service/TrainServiceImpl.java | 5 + .../web/controller/IncomeController.java | 128 ++++++++++++++++++ .../src/main/resources/application.properties | 2 + 17 files changed, 574 insertions(+), 9 deletions(-) create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/IncomeStateEnum.java create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/IIncomeController.java create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeFailTemplate.java create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeSaveRequest.java create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeTemplate.java create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/business/api/IncomeService.java create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/IncomeMapper.java create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/Income.java create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/business/service/IncomeServiceImpl.java create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/IncomeController.java diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/IncomeStateEnum.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/IncomeStateEnum.java new file mode 100644 index 0000000..f62e74b --- /dev/null +++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/IncomeStateEnum.java @@ -0,0 +1,31 @@ +package com.seasky.template.enums; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum IncomeStateEnum { + + 鏈垎绫�("鏈垎绫�","鏈垎绫�"), + 宸插垎绫�("宸插垎绫�","宸插垎绫�"), + 寰呰棰�("寰呰棰�","寰呰棰�"), + 宸插畬鎴�("宸插畬鎴�","宸插畬鎴�"); + private final String value; + private final String code; + IncomeStateEnum(String value, + String code + ) { + this.value = value; + this.code = code; + } + + public String getValue() { + return value; + } + public String getCode() { + return code; + } + public static List<String> getList() { + return Arrays.stream(IncomeStateEnum.values()).map(t->{return t.getValue();}).collect(Collectors.toList()); + } +} diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/IIncomeController.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/IIncomeController.java new file mode 100644 index 0000000..50d2818 --- /dev/null +++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/IIncomeController.java @@ -0,0 +1,47 @@ +package com.seasky.template.web.api; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.seasky.core.common.Result; +import com.seasky.template.web.dto.request.DepartmentRequest; +import com.seasky.template.web.dto.request.IncomeSaveRequest; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @Author jxm + * @Date 2024/12/12 15:25 + * @Version 1.0 + */ +@Api(tags = "涓氬姟澶勭悊-鏀跺叆鐧昏") +@RequestMapping("income") +@RestController +public interface IIncomeController { + + + @ApiOperation("鎵嬪姩鏂板") + @PostMapping("add") + Result<Object> add(@Validated @RequestBody IncomeSaveRequest income); + + @ApiOperation("鍒犻櫎") + @GetMapping("remove") + Result<Object> remove(@RequestParam("id") Long id); + + @ApiOperation("瀵煎叆妯℃澘涓嬭浇") + @GetMapping("downLoadTemplate") + void downLoadTemplate(HttpServletResponse response) throws JsonProcessingException; + + @ApiOperation("瀵煎嚭") + @GetMapping("export") + void export(HttpServletResponse response) throws JsonProcessingException; + + @ApiOperation("瀵煎叆") + @PostMapping("importIncome") + Result<Object> importIncome(HttpServletRequest request, HttpServletResponse response, @RequestBody + MultipartFile file) throws JsonProcessingException; +} diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/DepartmentRequest.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/DepartmentRequest.java index a674292..d3fdc1a 100644 --- a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/DepartmentRequest.java +++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/DepartmentRequest.java @@ -21,19 +21,15 @@ import javax.validation.constraints.NotNull; public class DepartmentRequest { @ApiModelProperty("閮ㄩ棬id 淇敼闇€瑕�") private Long id; - @NotNull(message="閮ㄩ棬缂栧彿涓嶈兘涓虹┖") @NotBlank(message="閮ㄩ棬缂栧彿涓嶈兘涓虹┖") @ApiModelProperty("閮ㄩ棬缂栧彿") private String departmentCode; - @NotNull(message="閮ㄩ棬鍚嶇О涓嶈兘涓虹┖") @NotBlank(message="閮ㄩ棬鍚嶇О涓嶈兘涓虹┖") @ApiModelProperty("閮ㄩ棬鍚嶇О") private String departmentName; - @NotNull(message="绠$悊浜哄憳缂栧彿涓嶈兘涓虹┖") @NotBlank(message="绠$悊浜哄憳缂栧彿涓嶈兘涓虹┖") @ApiModelProperty("绠$悊浜哄憳缂栧彿") private String managementCode; - @NotNull(message="绠$悊浜哄憳涓嶈兘涓虹┖") @NotBlank(message="绠$悊浜哄憳涓嶈兘涓虹┖") @ApiModelProperty("绠$悊浜哄憳") private String managementPerson; diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeFailTemplate.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeFailTemplate.java new file mode 100644 index 0000000..a799bde --- /dev/null +++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeFailTemplate.java @@ -0,0 +1,19 @@ +package com.seasky.template.web.dto.request; +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author jxm + * @Date 2024/12/11 11:12 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class IncomeFailTemplate extends IncomeTemplate { + + @Excel(needMerge = true,orderNum ="10",name="閿欒淇℃伅",width = 20) + private String errMsg; +} diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeSaveRequest.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeSaveRequest.java new file mode 100644 index 0000000..554c6b1 --- /dev/null +++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeSaveRequest.java @@ -0,0 +1,55 @@ +package com.seasky.template.web.dto.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Author jxm + * @Date 2024/12/12 15:27 + * @Version 1.0 + */ +@AllArgsConstructor +@NoArgsConstructor +@Data +public class IncomeSaveRequest { + @NotBlank(message = "閾惰璐︽埛鍚嶇О涓嶈兘涓虹┖") + @ApiModelProperty(value = "閾惰璐︽埛鍚嶇О") + private String bankName; + @NotBlank(message = "鏀舵鍗曞彿涓嶈兘涓虹┖") + @ApiModelProperty(value = "鏀舵鍗曞彿") + private String billNo; + @JsonFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "鏀舵鏃ユ湡涓嶈兘涓虹┖") + @ApiModelProperty(value = "鏀舵鏃ユ湡") + private Date incomeDate; + @NotNull(message = "鍥炲崟閲戦涓嶈兘涓虹┖") + @ApiModelProperty(value = "鍥炲崟閲戦") + private BigDecimal incomeAmount; + @NotBlank(message = "鏀舵璐︽埛涓嶈兘涓虹┖") + @ApiModelProperty(value = "鏀舵璐︽埛") + private String incomeAccount; + @NotBlank(message = "浠樻璐︽埛涓嶈兘涓虹┖") + @ApiModelProperty(value = "浠樻璐︽埛") + private String paymentAccount; + @NotBlank(message = "鏀舵浜哄悕绉颁笉鑳戒负绌�") + @ApiModelProperty(value = "鏀舵浜哄悕绉�") + private String incomeName; + @NotBlank(message = "浠樻浜哄悕绉颁笉鑳戒负绌�") + @ApiModelProperty(value = "浠樻浜哄悕绉�") + private String paymentName; + @NotBlank(message = "鎽樿涓嶈兘涓虹┖") + @ApiModelProperty(value = "鎽樿") + private String incomeSummary; + @NotBlank(message = "闄勮█涓嶈兘涓虹┖") + @ApiModelProperty(value = "闄勮█") + private String incomePostscript; + +} diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeTemplate.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeTemplate.java new file mode 100644 index 0000000..26b540c --- /dev/null +++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/IncomeTemplate.java @@ -0,0 +1,45 @@ +package com.seasky.template.web.dto.request; +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Author jxm + * @Date 2024/12/11 11:12 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class IncomeTemplate implements Serializable { + @Excel(needMerge = true,orderNum ="1",name="閾惰璐︽埛鍚嶇О",width = 20) + private String bankName; + @Excel(needMerge = true,orderNum ="2",name="鏀舵鍗曞彿",width = 20) + private String billNo; + @Excel(needMerge = true,orderNum ="3",name="鏀舵鏃ユ湡",width = 20) + private Date incomeDate; + + @Excel(needMerge = true,orderNum ="4",name="鏀舵閲戦",width = 20) + private BigDecimal incomeAmount; + + @Excel(needMerge = true,orderNum ="5",name="鏀舵璐︽埛",width = 20) + private String incomeAccount; + + @Excel(needMerge = true,orderNum ="6",name="浠樻璐︽埛",width = 20) + private String paymentAccount; + + @Excel(needMerge = true,orderNum ="7",name="鏀舵浜哄悕绉�",width = 20) + private String incomeName; + + @Excel(needMerge = true,orderNum ="8",name="浠樻浜哄悕绉�",width = 20) + private String paymentName; + + @Excel(needMerge = true,orderNum ="9",name="鎽樿",width = 20) + private String incomeSummary; + +} diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/TrainingFailTemplate.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/TrainingFailTemplate.java index 6d0ebf7..f468dc7 100644 --- a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/TrainingFailTemplate.java +++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/TrainingFailTemplate.java @@ -16,6 +16,6 @@ import java.io.Serializable; @NoArgsConstructor public class TrainingFailTemplate extends TrainingTemplate { - @Excel(needMerge = true,orderNum ="4",name="鍩硅绫诲瀷",width = 20) + @Excel(needMerge = true,orderNum ="4",name="閿欒淇℃伅",width = 20) private String errMsg; } diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/TrainingRequest.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/TrainingRequest.java index 9eb1958..3a4fe2a 100644 --- a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/TrainingRequest.java +++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/TrainingRequest.java @@ -20,15 +20,12 @@ import javax.validation.constraints.NotNull; public class TrainingRequest { private Long id; - @NotNull @ApiModelProperty(value = "鍩硅鍚嶇О") @NotBlank(message="鍩硅鍚嶇О涓嶈兘涓虹┖") private String trainingName; - @NotNull(message = "瀵瑰簲鏀跺叆绉戠洰缂栧彿涓嶈兘涓虹┖") @NotBlank(message="瀵瑰簲鏀跺叆绉戠洰缂栧彿涓嶈兘涓虹┖") @ApiModelProperty(value = "瀵瑰簲鏀跺叆绉戠洰缂栧彿") private String accountCode; - @NotNull @NotBlank(message="鍩硅绫诲瀷涓嶈兘涓虹┖") @ApiModelProperty(value = "鍩硅绫诲瀷") private String trainingType; diff --git a/ServiceSiteCommon/src/main/java/com/seasky/Application.java b/ServiceSiteCommon/src/main/java/com/seasky/Application.java index 391f230..c7248cf 100644 --- a/ServiceSiteCommon/src/main/java/com/seasky/Application.java +++ b/ServiceSiteCommon/src/main/java/com/seasky/Application.java @@ -1,5 +1,6 @@ package com.seasky; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @@ -10,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableAsync; /*** * @author bandi * */ +@MapperScan("com.seasky.template.business.dao.mapper") @SpringBootApplication @EnableAspectJAutoProxy(proxyTargetClass = true) @EnableDiscoveryClient diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/IncomeService.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/IncomeService.java new file mode 100644 index 0000000..96d73dc --- /dev/null +++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/IncomeService.java @@ -0,0 +1,24 @@ +package com.seasky.template.business.api; + +import com.seasky.core.base.BaseService; +import com.seasky.template.business.entity.Income; +import com.seasky.template.business.entity.IncomeType; +import com.seasky.template.web.dto.request.IncomeSaveRequest; +import com.seasky.template.web.dto.request.IncomeTemplate; + +import java.util.List; +import java.util.Map; + +/** + * @Author jxm + * @Date 2024/12/12 17:14 + * @Version 1.0 + */ +public interface IncomeService extends BaseService<Income> { + + void add(IncomeSaveRequest saveRequest); + + void delete(Long id); + + Map<Integer, String> importExcel(List<IncomeTemplate> list); +} diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/IncomeMapper.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/IncomeMapper.java new file mode 100644 index 0000000..618f01b --- /dev/null +++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/IncomeMapper.java @@ -0,0 +1,36 @@ +package com.seasky.template.business.dao.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.seasky.core.base.BaseMapper; +import com.seasky.template.business.entity.Department; +import com.seasky.template.business.entity.Income; +import com.seasky.template.web.dto.request.DepartmentQueryListRequest; +import com.seasky.template.web.dto.request.DepartmentQueryRequest; +import com.seasky.template.web.dto.result.DepartmentResult; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +@Mapper +public interface IncomeMapper extends BaseMapper<Income> { + + @Select("select bill_no from t_income where bill_no = #{billNo} and available ='YES'") + String selectExistOrderNo(@Param("billNo") String billNo); + + + @Select({ + "<script>", + "SELECT bill_no FROM t_income", + "WHERE bill_no IN", + "<foreach item='item' index='index' collection='stringList' open='(' separator=',' close=')'>", + "#{item}", + "</foreach>", + "</script>" + }) + List<String> checkBillExist(@Param("stringList") List<String> stringList); + + @Select("select * from t_income where available ='YES'") + List<Income> selectList(); +} diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/TrainingMapper.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/TrainingMapper.java index da7655a..31127cc 100644 --- a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/TrainingMapper.java +++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/TrainingMapper.java @@ -17,7 +17,7 @@ public interface TrainingMapper extends BaseMapper<Training> { List<TrainingResult> selectList(@Param("trainingRequest") TrainingRequest trainingRequest); - @Select("select count(1) from t_training where training_name = #{trainingName}") + @Select("select count(1) from t_training where training_name = #{trainingName} and available ='YES'") int selectExist(@Param("trainingName") String trainingName); @Select({ diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/Income.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/Income.java new file mode 100644 index 0000000..148cbf8 --- /dev/null +++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/Income.java @@ -0,0 +1,60 @@ +package com.seasky.template.business.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.seasky.core.base.BaseModel; +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Author jxm + * @Date 2024/12/12 15:21 + * @Version 1.0 + */ +@TableName("t_income") +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("鏀跺叆鍥炲崟瀹炰綋") +@Data +public class Income extends BaseModel { + + /** Bank account name */ + private String bankName; + + /** Receipt number */ + private String billNo; + + /** Date of income */ + private Date incomeDate; + + /** Income amount */ + private BigDecimal incomeAmount; + + /** Receiving account */ + private String incomeAccount; + + /** Payment account */ + private String paymentAccount; + + /** Name of the recipient */ + private String incomeName; + + /** Name of the payer */ + private String paymentName; + + /** Summary */ + private String incomeSummary; + + /** Postscript */ + private String incomePostscript; + + /** Assigned income type ID */ + private Long incomeTypeId; + + /** Income state */ + private String state; +} diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/IncomeServiceImpl.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/IncomeServiceImpl.java new file mode 100644 index 0000000..a383ba2 --- /dev/null +++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/IncomeServiceImpl.java @@ -0,0 +1,118 @@ +package com.seasky.template.business.service; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.seasky.core.base.AbstractService; +import com.seasky.core.ddd.utils.MapperUtils; +import com.seasky.core.util.ExceptionUtil; +import com.seasky.template.annotation.NullableField; +import com.seasky.template.business.api.IncomeService; +import com.seasky.template.business.dao.mapper.IncomeMapper; +import com.seasky.template.business.entity.Income; +import com.seasky.template.enums.IncomeStateEnum; +import com.seasky.template.web.dto.request.IncomeSaveRequest; +import com.seasky.template.web.dto.request.IncomeTemplate; +import com.seasky.template.web.dto.request.TrainingTemplate; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author jxm + * @Date 2024/12/12 17:16 + * @Version 1.0 + */ +@Service +public class IncomeServiceImpl extends AbstractService<Income, IncomeMapper> implements IncomeService { + + @Autowired + IncomeMapper incomeMapper; + + @Override + public void add(IncomeSaveRequest saveRequest) { + String orderNo = incomeMapper.selectExistOrderNo(saveRequest.getBillNo()); + if(!StringUtils.isEmpty(orderNo)){ + throw ExceptionUtil.getException(null,"鏀舵鍗曞彿宸插瓨鍦�"); + } + Income income = MapperUtils.INSTANCE.map(Income.class,saveRequest); + income.setState(IncomeStateEnum.鏈垎绫�.getValue()); + this.insert(income); + } + + @Override + public void delete(Long id) { + Income income = incomeMapper.selectById(id); + if(income ==null){ + throw new RuntimeException("鍥炲崟涓嶅瓨鍦�"); + } + if(income.getState()!=null && !income.getState().equals(IncomeStateEnum.鏈垎绫�.getValue())){ + throw new RuntimeException("闈炴湭鍒嗙被鐨勫洖鍗曚笉鍏佽鍒犻櫎"); + } + this.logicDelete(id); + } + + @Override + public Map<Integer, String> importExcel(List<IncomeTemplate> list) { + Map<Integer, String> resMap = new HashMap<>(); + List<String> stringList = list.stream().map(t -> { + return t.getBillNo(); + }).collect(Collectors.toList()); + List<String> existList = incomeMapper.checkBillExist(stringList); + if (existList!=null && !existList.isEmpty()) { + Map<String, Integer> existListMap = new HashMap<>(); + // 灏� existList 鐨勫厓绱犲拰瀹冧滑鐨勭储寮曞瓨鍏� HashMap + for (int i = 0; i < existList.size(); i++) { + existListMap.put(existList.get(i), i); + } + for (int i = 0; i < stringList.size(); i++) { + String item = stringList.get(i); + if (existListMap.containsKey(item)) { + resMap.put(i, "鍥炲崟宸插瓨鍦�"); + } + } + if(!resMap.isEmpty()){ + return resMap; + } + } + for (int i = 0; i < list.size(); i++) { + StringBuilder errMsg = new StringBuilder(); + IncomeTemplate template = list.get(i); + Field[] fields = IncomeTemplate.class.getDeclaredFields(); + for (Field field : fields) { + ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class); + String excelHeader = excelProperty.value()[0]; // 鑾峰彇 ExcelProperty 娉ㄨВ涓殑鍊� + if (field.isAnnotationPresent(NullableField.class)) { + continue; // 璺宠繃鏍囪浜� @NullableField 鐨勫瓧娈� + } + field.setAccessible(true); + try { + Object value = field.get(template); + if (value == null || (value instanceof String && io.seata.common.util.StringUtils.isEmpty((String) value))) { + errMsg.append(excelHeader).append("涓嶈兘涓虹┖,"); + } else if (value instanceof BigDecimal && ((BigDecimal) value).compareTo(BigDecimal.ZERO) == 0) { + errMsg.append(excelHeader).append("涓嶈兘涓虹┖,"); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + if (errMsg.length() > 0) { + resMap.put(i, errMsg.toString().substring(0, errMsg.length()-1)); + } + } + if (resMap.values().size() > 0) { + return resMap; + } + //鎵归噺淇濆瓨 + List<Income> incomes = MapperUtils.INSTANCE.mapAsList(Income.class, list); + incomes.forEach(t->{t.setState(IncomeStateEnum.鏈垎绫�.getValue());}); + this.insertBatch(incomes); + return resMap; + } +} diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/TrainServiceImpl.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/TrainServiceImpl.java index 12a5ced..dad9fb2 100644 --- a/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/TrainServiceImpl.java +++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/TrainServiceImpl.java @@ -116,6 +116,11 @@ public class TrainServiceImpl extends AbstractService<Training, TrainingMapper> resMap.put(i, errMsg.toString().substring(0, errMsg.length()-1)); } } + if(resMap.size()>0){ + return resMap; + } + List<Training> trainings = MapperUtils.INSTANCE.mapAsList(Training.class, list); + this.insertBatch(trainings); return resMap; } } diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/IncomeController.java b/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/IncomeController.java new file mode 100644 index 0000000..f36f987 --- /dev/null +++ b/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/IncomeController.java @@ -0,0 +1,128 @@ +package com.seasky.template.web.controller; + +import com.alibaba.excel.EasyExcel; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.seasky.core.common.ResponseCode; +import com.seasky.core.common.Result; +import com.seasky.core.ddd.utils.MapperUtils; +import com.seasky.core.util.ExceptionUtil; +import com.seasky.template.business.api.IncomeService; +import com.seasky.template.business.dao.mapper.IncomeMapper; +import com.seasky.template.business.entity.Income; +import com.seasky.template.utils.EasyPoiUtils; +import com.seasky.template.utils.ExcelCheckUtil; +import com.seasky.template.web.api.IIncomeController; +import com.seasky.template.web.controller.excel.EasyExcelHelper; +import com.seasky.template.web.controller.listen.ExcelEventListener; +import com.seasky.template.web.dto.request.IncomeSaveRequest; +import com.seasky.template.web.dto.request.IncomeTemplate; +import com.seasky.template.web.dto.request.TrainingFailTemplate; +import com.seasky.template.web.dto.request.TrainingTemplate; +import com.seasky.template.web.dto.result.TrainingResult; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static com.seasky.core.common.Response.ok; + +/** + * @Author jxm + * @Date 2024/12/12 15:24 + * @Version 1.0 + */ +@RestController +public class IncomeController implements IIncomeController { + + @Autowired + IncomeService incomeService; + @Autowired + IncomeMapper incomeMapper; + @Override + public Result<Object> add(IncomeSaveRequest saveRequest) { + incomeService.add(saveRequest); + return ok(ResponseCode.SUCCESS); + } + + @Override + public Result<Object> remove(Long id) { + incomeService.delete(id); + return ok(ResponseCode.SUCCESS); + } + + @Override + public void downLoadTemplate(HttpServletResponse response) throws JsonProcessingException { + List<IncomeTemplate> outs = Collections.emptyList(); + EasyPoiUtils.exportExcel(outs, null, "sheet1", IncomeTemplate.class, "鍥炲崟瀵煎嚭.xls", true, response); + } + + @Override + public void export(HttpServletResponse response) throws JsonProcessingException { + List<Income> results = incomeMapper.selectList(); + if(results == null){ + List<IncomeTemplate> outs = Collections.emptyList(); + EasyExcelHelper.downExcel(response, outs, TrainingTemplate.class, "鍥炲崟瀵煎嚭.xlsx", "鍥炲崟瀵煎嚭"); + return; + } + List<IncomeTemplate> outs = MapperUtils.INSTANCE.mapAsList(IncomeTemplate.class,results); + EasyExcelHelper.downExcel(response, outs, IncomeTemplate.class, "鍥炲崟瀵煎嚭.xlsx", "鍥炲崟瀵煎嚭"); + } + + @Override + public Result<Object> importIncome(HttpServletRequest request, HttpServletResponse response, MultipartFile file) throws JsonProcessingException { + File f = null; + InputStream inputStream = null; + try { + List<IncomeTemplate> list = ExcelCheckUtil.checkExcelAnd2List(file, IncomeTemplate.class); + List<String> titles = new ArrayList<>(); + try { + f = File.createTempFile("temp", null); + // 鎶妋ultipartFile鍐欏叆涓存椂鏂囦欢 + file.transferTo(f); + // 浣跨敤鏂囦欢鍒涘缓 inputStream 娴� + inputStream = new FileInputStream(f); + } catch (Exception e) { + e.printStackTrace(); + throw ExceptionUtil.getException(null, e.getMessage()); + } + + ExcelEventListener listener = new ExcelEventListener(); + EasyExcel.read(inputStream, listener).sheet(0).doReadSync(); + Map<Integer, String> map = listener.getMap().get(0); + map.values().forEach(e -> titles.add(e)); + String header = StringUtils.join(titles, ","); + if (!("閾惰璐︽埛鍚嶇О,鏀舵鍗曞彿,鏀舵鏃ユ湡,鏀舵閲戦,鏀舵璐︽埛,浠樻璐︽埛,鏀舵浜哄悕绉�,鏀舵浜哄悕绉�,鎽樿").equals(header) + ) { throw ExceptionUtil.getException(null, "琛ㄥご涓嶆纭�"); + } + Map<Integer, String> checkMap = incomeService.importExcel(list); + if (checkMap.size() > 0) { + List<TrainingFailTemplate> exportList = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + String errMsg = checkMap.get(i); + TrainingFailTemplate ruleFailTemplate = MapperUtils.INSTANCE.map(TrainingFailTemplate.class, list.get(i)); + ruleFailTemplate.setErrMsg(StringUtils.isEmpty(errMsg) ? "" : errMsg); + exportList.add(ruleFailTemplate); + } + EasyPoiUtils.exportExcel(exportList, null, "sheet1", TrainingTemplate.class, "鍩硅瀵煎嚭閿欒淇℃伅.xlsx", true, response); + //EasyExcelHelper.downExcel(response, exportList, InvoiceFailTemplate.class, "鍙戠エ瀵煎叆閿欒淇℃伅", "鍙戠エ瀵煎叆閿欒淇℃伅"); + } + return ok(ResponseCode.SUCCESS); + } finally { + if (f != null) { + f.deleteOnExit(); + } + } + } + +} diff --git a/ServiceSiteCommon/src/main/resources/application.properties b/ServiceSiteCommon/src/main/resources/application.properties index 208b3b0..92eb20b 100644 --- a/ServiceSiteCommon/src/main/resources/application.properties +++ b/ServiceSiteCommon/src/main/resources/application.properties @@ -25,3 +25,5 @@ spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 spring.datasource.druid.stat-view-servlet.reset-enable=false spring.datasource.druid.stat-view-servlet.login-username=druid spring.datasource.druid.stat-view-servlet.login-password=druid + +spring.jackson.time-zone=Asia/Shanghai -- GitLab