工作组成员导入,设置收费通知接口开发

This commit is contained in:
梁琦涛
2021-09-02 17:23:44 +08:00
parent 746e0cbd62
commit 0cbccc387d
6 changed files with 366 additions and 7 deletions
@@ -1,9 +1,11 @@
package com.jero.project.controller;
import java.util.Arrays;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.vo.Result;
@@ -11,7 +13,13 @@ import com.jero.common.exception.JeroBootException;
import com.jero.common.service.ProjectDetailService;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.util.PasswordUtil;
import com.jero.common.util.ValidUtil;
import com.jero.company.common.PayCompanyManagementCommon;
import com.jero.company.entity.PayCompanyManagement;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.service.IPayCompanyManagementService;
import com.jero.company.service.IPayContactsManagementService;
import com.jero.project.common.PayProjectCommon;
import com.jero.project.entity.PayWorkingGroup;
import com.jero.project.entity.PayWorkingGroupSubItem;
@@ -20,15 +28,22 @@ import com.jero.project.service.IPayWorkingGroupSubItemService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.project.vo.SetChargeInput;
import com.jero.temporary.entity.PayCompanyManagementTemporary;
import com.jero.temporary.entity.PayContactsManagementTemporary;
import com.jero.temporary.service.IPayCompanyManagementTemporaryService;
import com.jero.temporary.service.IPayContactsManagementTemporaryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.jeecgframework.poi.excel.ExcelImportCheckUtil;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -50,6 +65,10 @@ public class PayWorkingGroupSubItemController extends JeroController<PayWorkingG
@Autowired
private IPayContactsManagementTemporaryService payContactsManagementTemporaryService;
@Autowired
private IPayCompanyManagementService payCompanyManagementService;
@Autowired
private IPayContactsManagementService payContactsManagementService;
@Autowired
private IPayWorkingGroupService payWorkingGroupService;
@Autowired
private ProjectDetailService projectDetailService;
@@ -68,14 +87,13 @@ public class PayWorkingGroupSubItemController extends JeroController<PayWorkingG
public Result<?> queryPageList(PayWorkingGroupSubItem payWorkingGroupSubitem,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
@RequestParam(name="paymentDate",required = false) String paymentDate,
HttpServletRequest req) {
if(!StringUtils.isBlank(payWorkingGroupSubitem.getChargeCompanyTemporaryName()) && payWorkingGroupSubitem.getChargeCompanyTemporaryName().length() > 50){
return Result.error("成员单位长度不能大于50个字符");
}
// todo 缺少到账,开票,邮寄记录查询
QueryWrapper<PayWorkingGroupSubItem> queryWrapper = QueryGenerator.initQueryWrapper(payWorkingGroupSubitem, req.getParameterMap());
Page<PayWorkingGroupSubItem> page = new Page<PayWorkingGroupSubItem>(pageNo, pageSize);
IPage<PayWorkingGroupSubItem> pageList = payWorkingGroupSubItemService.page(page, queryWrapper);
IPage<PayWorkingGroupSubItem> pageList = payWorkingGroupSubItemService.queryPageList(page, payWorkingGroupSubitem,paymentDate);
return Result.OK(pageList);
}
@@ -246,6 +264,31 @@ public class PayWorkingGroupSubItemController extends JeroController<PayWorkingG
this.payWorkingGroupSubItemService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 设置收费通知
*
* @param input
* @return
*/
@ApiOperation(value="工作组成员-设置收费通知", notes="工作组成员-设置收费通知")
@PostMapping(value = "/setCharge")
public Result<?> setCharge(@RequestBody SetChargeInput input) {
if(StringUtils.isBlank(input.getIds())){
return Result.error("id不能为空!");
}
String[] s = input.getIds().split(",");
for (String s1 : s) {
if(StringUtils.isBlank(s1)){
return Result.error("id不能为空!");
}
}
input.setList(Arrays.asList(input.getIds().split(",")));
payWorkingGroupSubItemService.updateBatchSetCharge(input);
return Result.OK("设置收费通知成功!");
}
/**
* 通过id查询
@@ -300,8 +343,161 @@ public class PayWorkingGroupSubItemController extends JeroController<PayWorkingG
*/
@PostMapping(value = "/importExcel")
@ApiOperation(value="工作组成员-通过excel导入数据", notes="工作组成员-通过excel导入数据")
@Transactional
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, PayWorkingGroupSubItem.class);
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
MultipartFile file = entity.getValue();// 获取上传文件对象
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
try {
//导入Excel格式校验,看匹配的字段文本概率
Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), PayWorkingGroupSubItem.class, params);
if(!t){
throw new RuntimeException("导入Excel校验失败 !");
}
List<PayWorkingGroupSubItem> list = ExcelImportUtil.importExcel(file.getInputStream(), PayWorkingGroupSubItem.class, params);
if(!CollectionUtils.isEmpty(list)){
// 校验重复成员的集合
List<PayWorkingGroupSubItem> listCompanyAndContacts = new ArrayList<>();
StringBuilder msg = new StringBuilder();
// 获取excel中的企业名称
List<String> listCompanyName = list.stream().map(PayWorkingGroupSubItem::getChargeCompanyTemporaryName).collect(Collectors.toList());
// 获取excel企业信息
LambdaQueryWrapper<PayCompanyManagement> companyWrapper = new LambdaQueryWrapper<>();
companyWrapper.in(PayCompanyManagement::getCompanyName,listCompanyName);
List<PayCompanyManagement> listCompanyInfo = payCompanyManagementService.list(companyWrapper);
if(CollectionUtils.isEmpty(listCompanyInfo)){
throw new RuntimeException("excel中企业不存在 !");
}
// 获取excel中联系人名称
List<String> listContactsName = list.stream().map(PayWorkingGroupSubItem::getContactsTemporaryNameOne).collect(Collectors.toList());
// 获取excel联系人信息
LambdaQueryWrapper<PayContactsManagement> contactsWrapper = new LambdaQueryWrapper<>();
contactsWrapper.in(PayContactsManagement::getName,listContactsName);
List<PayContactsManagement> listContactsInfo = payContactsManagementService.list(contactsWrapper);
if(CollectionUtils.isEmpty(listContactsInfo)){
throw new RuntimeException("excel中联系人不存在 !");
}
list.forEach(p->{
int count = list.indexOf(p);
// 校验企业名称
List<PayCompanyManagement> listCompany = new ArrayList<>();
if(StringUtils.isBlank(p.getChargeCompanyTemporaryName())){
msg.append("第 ").append(count + 3).append(" 行:企业名称不能为空,请修改。</br>");
}else{
// 通过企业名称获取企业id
listCompany = listCompanyInfo.stream().filter(item->
Objects.equals(item.getCompanyName(),p.getChargeCompanyTemporaryName())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(listCompany)){
msg.append("第 ").append(count + 3).append(" 行:企业名称不存在,请修改。</br>");
}else{
p.setChargeCompanyId(listCompany.get(0).getId());
}
}
// 校验联系人一
if(StringUtils.isBlank(p.getContactsTemporaryNameOne())){
msg.append("第 ").append(count + 3).append(" 行:联系人不能为空,请修改。</br>");
}else{
if(!CollectionUtils.isEmpty(listCompany)){
// 通过联系人获取联系人id
List<PayCompanyManagement> finalListCompany = listCompany;
List<PayContactsManagement> listContacts = listContactsInfo.stream().filter(item->
Objects.equals(item.getName(),p.getContactsTemporaryNameOne())
&& Objects.equals(item.getCompanyId(), finalListCompany.get(0).getId())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(listContacts)){
msg.append("第 ").append(count + 3).append(" 行:该企业下不存在该联系人一,请修改。</br>");
}else{
p.setContactsIdOne(listContacts.get(0).getId());
}
}
}
// 校验联系人二
if(!StringUtils.isBlank(p.getContactsTemporaryNameTwo()) && !CollectionUtils.isEmpty(listCompany)){
if(!CollectionUtils.isEmpty(listCompany)){
// 通过联系人获取联系人id
List<PayCompanyManagement> finalListCompany = listCompany;
List<PayContactsManagement> listContacts = listContactsInfo.stream().filter(item->
Objects.equals(item.getName(),p.getContactsTemporaryNameTwo())
&& Objects.equals(item.getCompanyId(), finalListCompany.get(0).getId())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(listContacts)){
msg.append("第 ").append(count + 3).append(" 行:该企业下不存在该联系人二,请修改。</br>");
}else{
p.setContactsIdTwo(listContacts.get(0).getId());
}
}
}
// 校验联系人三
if(!StringUtils.isBlank(p.getContactsTemporaryNameThree()) && !CollectionUtils.isEmpty(listCompany)){
if(!CollectionUtils.isEmpty(listCompany)){
// 通过联系人获取联系人id
List<PayCompanyManagement> finalListCompany = listCompany;
List<PayContactsManagement> listContacts = listContactsInfo.stream().filter(item->
Objects.equals(item.getName(),p.getContactsTemporaryNameThree())
&& Objects.equals(item.getCompanyId(), finalListCompany.get(0).getId())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(listContacts)){
msg.append("第 ").append(count + 3).append(" 行:该企业下不存在该联系人三,请修改。</br>");
}else{
p.setContactsIdThree(listContacts.get(0).getId());
}
}
}
// 校验邮寄联系人
if(StringUtils.isBlank(p.getMailContactsTemporaryName())){
msg.append("第 ").append(count + 3).append(" 行:邮寄联系人不能为空,请修改。</br>");
}else{
if(!CollectionUtils.isEmpty(listCompany)){
// 通过联系人获取联系人id
List<PayCompanyManagement> finalListCompany = listCompany;
List<PayContactsManagement> listContacts = listContactsInfo.stream().filter(item->
Objects.equals(item.getName(),p.getMailContactsTemporaryName())
&& Objects.equals(item.getCompanyId(), finalListCompany.get(0).getId())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(listContacts)){
msg.append("第 ").append(count + 3).append(" 行:该企业下不存在该:邮寄联系人,请修改。</br>");
}else{
p.setMailContactsId(listContacts.get(0).getId());
}
}
}
// 校验成员唯一性
List<PayWorkingGroupSubItem> listCompanyAndContactsNew = listCompanyAndContacts.stream().filter(item->Objects.equals(p.getChargeCompanyTemporaryName(),item.getChargeCompanyTemporaryName())
&& Objects.equals(p.getContactsTemporaryNameOne(),item.getContactsTemporaryNameOne())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(listCompanyAndContactsNew)){
msg.append("第 ").append(count + 3).append(" 行:工作组成员重复出现,请修改。</br>");
}
listCompanyAndContacts.add(p);
// 校验字段值
StringBuilder s = ValidUtil.validateExcel(p,(count+3));
if(!StringUtils.isBlank(s)){
msg.append(s);
}
});
if(!StringUtils.isBlank(msg)){
return Result.error(msg.toString());
}
// 拷贝企业,联系人
list.forEach(p->{
setPayWorkingGroupSubItem(p);
});
// 更新数据
payWorkingGroupSubItemService.saveBatch(list);
}
} catch (Exception e) {
log.error(e.getMessage(),e);
return Result.error("文件导入失败!");
} finally {
try {
file.getInputStream().close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return Result.OK("文件导入成功!");
}
}
@@ -1,7 +1,11 @@
package com.jero.project.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.project.entity.PayWorkingGroupSubItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.project.vo.SetChargeInput;
import org.apache.ibatis.annotations.Param;
/**
* @Description: pay_working_group_subitem
@@ -10,5 +14,25 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @Version: V1.0
*/
public interface PayWorkingGroupSubItemMapper extends BaseMapper<PayWorkingGroupSubItem> {
/**
* @Description 批量更新收费通知号
* @Author lqt
* @Date 2021/9/2
* @Param
* @Return
* @Exception
*/
void updateBatchSetCharge(SetChargeInput input);
/**
* @Description 分页查询
* @Author lqt
* @Date 2021/9/2
* @Param
* @Return
* @Exception
*/
IPage<PayWorkingGroupSubItem> queryPageList(Page<PayWorkingGroupSubItem> page, @Param("payWorkingGroupSubItem") PayWorkingGroupSubItem payWorkingGroupSubItem,
@Param("paymentDate") String paymentDate);
}
@@ -2,4 +2,64 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.project.mapper.PayWorkingGroupSubItemMapper">
<update id="updateBatchSetCharge">
UPDATE pay_working_group_subitem SET
receivable_amount = #{receivableAmount},
charge_notice_no = #{chargeNoticeNo},
charge_notice_id = #{chargeNoticeId}
WHERE id IN
<foreach collection="list" open="(" close=")" item="item" index="index" separator=",">
#{item}
</foreach>
</update>
<select id="queryPageList" resultType="com.jero.project.entity.PayWorkingGroupSubItem">
SELECT
pwgs.id,
pwgs.charge_project AS chargeProject,
pwgs.working_group_id AS workingGroupId,
pwgs.charge_company_id AS chargeCompanyId,
pwgs.charge_company_temporary_id AS chargeCompanyTemporaryId,
pwgs.charge_company_temporary_name AS chargeCompanyTemporaryName,
pwgs.contacts_id_one AS contactsIdOne,
pwgs.contacts_temporary_id_one AS contactsTemporaryIdOne,
pwgs.contacts_temporary_name_one AS contactsTemporaryNameOne,
pwgs.contacts_id_two AS contactsIdTwo,
pwgs.contacts_temporary_id_two AS contactsTemporaryIdTwo,
pwgs.contacts_temporary_name_two AS contactsTemporaryNameTwo,
pwgs.contacts_id_three AS contactsIdThree,
pwgs.contacts_temporary_id_three AS contactsTemporaryIdThree,
pwgs.contacts_temporary_name_three AS contactsTemporaryNameThree,
pwgs.receivable_amount AS receivableAmount,
pwgs.paid_amount AS paidAmount,
pwgs.mail_contacts_id AS mailContactsId,
pwgs.mail_contacts_temporary_id AS mailContactsTemporaryId,
pwgs.mail_contacts_temporary_name AS mailContactsTemporaryName,
pwgs.charge_way AS chargeWay,
pwgs.contract_num AS contractNum,
pwgs.charge_notice_no AS chargeNoticeNo,
pwgs.charge_notice_id AS chargeNoticeId,
pwgs.pack,
pwgs.need_invoice AS needInvoice,
pwgs.in_account AS inAccount,
pwgs.make_invoice AS makeInvoice,
pwgs.mail,
pwgs.press_money_times AS pressMoneyTimes,
pwgs.remarks,
pwgs.create_by AS createBy,
pwgs.create_time AS createTime,
pwgs.update_by AS updateBy
FROM pay_working_group_subitem pwgs
LEFT JOIN pay_payment_record ppr ON ppr.project_id = pwgs.id
<where>
<if test="payWorkingGroupSubItem.chargeCompanyTemporaryName != null and payWorkingGroupSubItem.chargeCompanyTemporaryName != ''">
AND pwgs.charge_company_temporary_name LIKE
concat('%',concat(#{payWorkingGroupSubItem.chargeCompanyTemporaryName},'%'))
</if>
<if test="paymentDate != null and paymentDate != ''">
AND DATE_FORMAT(ppr.payment_date,'%Y') = #{paymentDate}
</if>
</where>
order by pwgs.create_time desc
</select>
</mapper>
@@ -1,7 +1,12 @@
package com.jero.project.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.project.entity.PayWorkingGroupSubItem;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.project.vo.SetChargeInput;
import java.util.List;
/**
* @Description: pay_working_group_subitem
@@ -10,5 +15,22 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @Version: V1.0
*/
public interface IPayWorkingGroupSubItemService extends IService<PayWorkingGroupSubItem> {
/**
* @Description 批量更新收费通知号
* @Author lqt
* @Date 2021/9/2
* @Param
* @Return
* @Exception
*/
void updateBatchSetCharge(SetChargeInput input);
/**
* @Description 分页查询
* @Author lqt
* @Date 2021/9/2
* @Param
* @Return
* @Exception
*/
IPage<PayWorkingGroupSubItem> queryPageList(Page<PayWorkingGroupSubItem> page,PayWorkingGroupSubItem payWorkingGroupSubitem,String paymentDate);
}
@@ -1,12 +1,17 @@
package com.jero.project.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.project.service.IPayWorkingGroupSubItemService;
import com.jero.project.entity.PayWorkingGroupSubItem;
import com.jero.project.mapper.PayWorkingGroupSubItemMapper;
import com.jero.project.vo.SetChargeInput;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.annotation.Resource;
/**
* @Description: pay_working_group_subitem
* @Author: jeecg-boot
@@ -16,4 +21,17 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@Service
public class PayWorkingGroupSubItemServiceImpl extends ServiceImpl<PayWorkingGroupSubItemMapper, PayWorkingGroupSubItem> implements IPayWorkingGroupSubItemService {
@Resource
private PayWorkingGroupSubItemMapper payWorkingGroupSubItemMapper;
@Override
public void updateBatchSetCharge(SetChargeInput input) {
payWorkingGroupSubItemMapper.updateBatchSetCharge(input);
}
@Override
public IPage<PayWorkingGroupSubItem> queryPageList(Page<PayWorkingGroupSubItem> page, PayWorkingGroupSubItem payWorkingGroupSubitem,String paymentDate) {
return payWorkingGroupSubItemMapper.queryPageList(page,payWorkingGroupSubitem,paymentDate);
}
}
@@ -0,0 +1,39 @@
package com.jero.project.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
@Data
public class SetChargeInput implements Serializable {
/**
* 项目ids
*/
@ApiModelProperty(value = "项目ids")
@NotEmpty(message = "项目ids不能为空")
private String ids;
/**应收金额(元)*/
@ApiModelProperty(value = "应收金额(元)")
@Max(value = 999999999,message = "应收金额(元)格式错误")
@NotNull(message = "应收金额(元)不能为空!")
private Integer receivableAmount;
/**收费通知号*/
@ApiModelProperty(value = "收费通知号")
@NotEmpty(message = "收费通知号不能为空")
@Size(max = 50,message = "收费通知号长度不能大于50个字符")
private String chargeNoticeNo;
/**收费通知文件id*/
@ApiModelProperty(value = "收费通知文件id")
@NotEmpty(message = "收费通知文件id不能为空")
@Size(max = 32,message = "收费通知文件id长度不能大于32个字符")
private String chargeNoticeId;
/**
* 项目id集合
*/
private List<String> list;
}