|
@@ -12,10 +12,12 @@ import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO;
|
|
|
import com.jeeplus.test.reimbursementsys.mapper.ReimbursementBusinessMapper;
|
|
|
import com.jeeplus.test.reimbursementsys.mapper.ReimbursementUserMapper;
|
|
|
import com.jeeplus.test.reimbursementsys.service.ReimbursementUserService;
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -74,16 +76,25 @@ public class ReimbursementUserServiceImpl implements ReimbursementUserService {
|
|
|
map.put("message", "报销年份不正确,请重新填写!");
|
|
|
return map;
|
|
|
}
|
|
|
- if(StringUtils.isBlank(reimbursementUser.getReimbursementQuota())){
|
|
|
+
|
|
|
+ if(StringUtils.isBlank(reimbursementUser.getReimbursementQuotaDay())){
|
|
|
map.put("success", false);
|
|
|
- map.put("message", "年报销额度填写不正确!");
|
|
|
+ map.put("message", "日报销额度填写不正确!");
|
|
|
return map;
|
|
|
}
|
|
|
- if(StringUtils.isBlank(reimbursementUser.getReimbursementQuotaDay())){
|
|
|
+ if(null == reimbursementUser.getReimbursementAllDay()){
|
|
|
map.put("success", false);
|
|
|
- map.put("message", "日报销额度填写不正确!");
|
|
|
+ map.put("message", "年可报销天数填写不正确!");
|
|
|
return map;
|
|
|
}
|
|
|
+ //日报销额度
|
|
|
+ BigDecimal reimbursementQuotaDay = new BigDecimal(reimbursementUser.getReimbursementQuotaDay());
|
|
|
+ //年可报销天数
|
|
|
+ BigDecimal reimbursementAllDay = new BigDecimal(reimbursementUser.getReimbursementAllDay());
|
|
|
+
|
|
|
+ //计算并赋值年报销额度
|
|
|
+ reimbursementUser.setReimbursementQuota(reimbursementQuotaDay.multiply(reimbursementAllDay).toString());
|
|
|
+
|
|
|
UserDTO user = UserUtils.get(reimbursementUser.getUserId());
|
|
|
if(StringUtils.isNotBlank(reimbursementUser.getId())){
|
|
|
reimbursementUser.preUpdate();
|
|
@@ -150,37 +161,151 @@ public class ReimbursementUserServiceImpl implements ReimbursementUserService {
|
|
|
ReimbursementBusinessReturnDTO reimbursementBusinessReturnDTO = new ReimbursementBusinessReturnDTO();
|
|
|
List<ReimbursementBusinessDTO> list = businessMapper.findListByUserIdAndYear(reimbursementBusiness);
|
|
|
|
|
|
- //获取人员年度报销详情
|
|
|
- ReimbursementUserDTO reimbursementUserInfo = mapper.queryByUserIdAndYear(reimbursementUserDTO);
|
|
|
- reimbursementBusinessReturnDTO.setList(list);
|
|
|
- reimbursementBusinessReturnDTO.setReimbursementQuota(reimbursementUserInfo.getReimbursementQuota());
|
|
|
+ //获取人员年度报销详情
|
|
|
+ ReimbursementUserDTO reimbursementUserInfo = mapper.queryByUserIdAndYear(reimbursementUserDTO);
|
|
|
+ reimbursementBusinessReturnDTO.setList(list);
|
|
|
+ reimbursementBusinessReturnDTO.setReimbursementQuota(reimbursementUserInfo.getReimbursementQuota());
|
|
|
+
|
|
|
+ //已报销额度
|
|
|
+ BigDecimal alreadyReimbursementAmount = new BigDecimal("0");
|
|
|
+ //已报销天数
|
|
|
+ BigDecimal alreadyReimbursementDay = new BigDecimal("0");
|
|
|
+
|
|
|
+ for (ReimbursementBusinessDTO info : list) {
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(info.getReimbursementAmount());
|
|
|
+ alreadyReimbursementAmount = alreadyReimbursementAmount.add(bigDecimal);
|
|
|
+ alreadyReimbursementDay = alreadyReimbursementDay.add(new BigDecimal(info.getReimbursementDay()));
|
|
|
+ }
|
|
|
+ //剩余报销额度
|
|
|
+ reimbursementBusinessReturnDTO.setSurplusReimbursementAmount(new BigDecimal(reimbursementBusinessReturnDTO.getReimbursementQuota()).subtract(alreadyReimbursementAmount).toString());
|
|
|
+ //计算出可报销总天数
|
|
|
+ BigDecimal reimbursementDay = new BigDecimal("0");
|
|
|
+ if(null == reimbursementUserInfo.getReimbursementAllDay()){
|
|
|
+ reimbursementDay = new BigDecimal(reimbursementBusinessReturnDTO.getReimbursementQuota()).divide(new BigDecimal(reimbursementUserInfo.getReimbursementQuotaDay()),2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }else{
|
|
|
+ reimbursementDay = new BigDecimal(reimbursementUserInfo.getReimbursementAllDay());
|
|
|
+ }
|
|
|
+
|
|
|
+ //剩余报销天数
|
|
|
+ reimbursementBusinessReturnDTO.setSurplusReimbursementDay(reimbursementDay.subtract(alreadyReimbursementDay).toString());
|
|
|
+ //报销天数
|
|
|
+ reimbursementBusinessReturnDTO.setReimbursementDay(reimbursementDay.toString());
|
|
|
+ //已报销天数
|
|
|
+ reimbursementBusinessReturnDTO.setAlreadyReimbursementDay(alreadyReimbursementDay.toString());
|
|
|
+ //已报销额度
|
|
|
+ reimbursementBusinessReturnDTO.setAlreadyReimbursementAmount(alreadyReimbursementAmount.toString());
|
|
|
+ //日报销额度
|
|
|
+ reimbursementBusinessReturnDTO.setReimbursementQuotaDay(reimbursementUserInfo.getReimbursementQuotaDay());
|
|
|
+
|
|
|
+ return reimbursementBusinessReturnDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<UserDTO> getUserByNameAndOfficeName(ReimbursementUserDTO reimbursementUserDTO) {
|
|
|
+ return mapper.getUserByNameAndOfficeName(reimbursementUserDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> saveList(List<ReimbursementUserDTO> reimbursementUserList) {
|
|
|
|
|
|
- //已报销额度
|
|
|
- BigDecimal alreadyReimbursementAmount = new BigDecimal("0");
|
|
|
- //已报销天数
|
|
|
- BigDecimal alreadyReimbursementDay = new BigDecimal("0");
|
|
|
+ List<ReimbursementUserDTO> saveList = Lists.newArrayList();
|
|
|
+ List<ReimbursementUserDTO> existList = Lists.newArrayList();
|
|
|
+ StringBuilder failureMsg = new StringBuilder ( );
|
|
|
|
|
|
- for (ReimbursementBusinessDTO info : list) {
|
|
|
- BigDecimal bigDecimal = new BigDecimal(info.getReimbursementAmount());
|
|
|
- alreadyReimbursementAmount = alreadyReimbursementAmount.add(bigDecimal);
|
|
|
- alreadyReimbursementDay = alreadyReimbursementDay.add(new BigDecimal(info.getReimbursementDay()));
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ Map<String, List<ReimbursementUserDTO>> stringListMap = dataDispose(reimbursementUserList);
|
|
|
+ if(reimbursementUserList.size() != stringListMap.size()){
|
|
|
+ map.put("success", false);
|
|
|
+ map.put("message", "报销人员中存在重复项,无法进行导入!");
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (ReimbursementUserDTO reimbursementUser: reimbursementUserList) {
|
|
|
+ if(StringUtils.isBlank(reimbursementUser.getYear())){
|
|
|
+ map.put("success", false);
|
|
|
+ map.put("message", reimbursementUser.getUserName() + " 的报销年份不正确,请重新填写!");
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ if(StringUtils.isBlank(reimbursementUser.getReimbursementQuotaDay())){
|
|
|
+ map.put("success", false);
|
|
|
+ map.put("message", reimbursementUser.getUserName() + " 的日报销额度填写不正确!");
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ if(null == reimbursementUser.getReimbursementAllDay()){
|
|
|
+ map.put("success", false);
|
|
|
+ map.put("message", reimbursementUser.getUserName() + " 的年可报销天数填写不正确!");
|
|
|
+ return map;
|
|
|
}
|
|
|
- //剩余报销额度
|
|
|
- reimbursementBusinessReturnDTO.setSurplusReimbursementAmount(new BigDecimal(reimbursementBusinessReturnDTO.getReimbursementQuota()).subtract(alreadyReimbursementAmount).toString());
|
|
|
- //计算出可报销总天数
|
|
|
- BigDecimal reimbursementDay = new BigDecimal(reimbursementBusinessReturnDTO.getReimbursementQuota()).divide(new BigDecimal(reimbursementUserInfo.getReimbursementQuotaDay()),2, BigDecimal.ROUND_HALF_UP);
|
|
|
- //剩余报销天数
|
|
|
- reimbursementBusinessReturnDTO.setSurplusReimbursementDay(reimbursementDay.subtract(alreadyReimbursementDay).toString());
|
|
|
- //报销天数
|
|
|
- reimbursementBusinessReturnDTO.setReimbursementDay(reimbursementDay.toString());
|
|
|
- //已报销天数
|
|
|
- reimbursementBusinessReturnDTO.setAlreadyReimbursementDay(alreadyReimbursementDay.toString());
|
|
|
- //已报销额度
|
|
|
- reimbursementBusinessReturnDTO.setAlreadyReimbursementAmount(alreadyReimbursementAmount.toString());
|
|
|
//日报销额度
|
|
|
- reimbursementBusinessReturnDTO.setReimbursementQuotaDay(reimbursementUserInfo.getReimbursementQuotaDay());
|
|
|
+ BigDecimal reimbursementQuotaDay = new BigDecimal(reimbursementUser.getReimbursementQuotaDay());
|
|
|
+ //年可报销天数
|
|
|
+ BigDecimal reimbursementAllDay = new BigDecimal(reimbursementUser.getReimbursementAllDay());
|
|
|
|
|
|
- return reimbursementBusinessReturnDTO;
|
|
|
+ //计算并赋值年报销额度
|
|
|
+ reimbursementUser.setReimbursementQuota(reimbursementQuotaDay.multiply(reimbursementAllDay).toString());
|
|
|
+
|
|
|
+ //根据用户id和年份查询报数员工库表中是否存在数据
|
|
|
+ //如果有,则将其从list列表中剔除
|
|
|
+ ReimbursementUserDTO reimbursementUserDTOS = mapper.queryByUserIdAndYear(reimbursementUser);
|
|
|
+ if(null != reimbursementUserDTOS){
|
|
|
+ existList.add(reimbursementUser);
|
|
|
+ }else{
|
|
|
+ reimbursementUser.preInsert();
|
|
|
+ saveList.add(reimbursementUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //新增
|
|
|
+ if(saveList.size()>0){
|
|
|
+ mapper.saveList(saveList);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(existList.size()>0){
|
|
|
+ for (ReimbursementUserDTO user : existList) {
|
|
|
+ failureMsg.append ( "。 " + user.getOfficeName() + " 部门下的员工 " + user.getUserName() + " 已添加,无法再次添加;" );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ map.put("success", true);
|
|
|
+ map.put("saveCount", saveList.size());
|
|
|
+ map.put("message", failureMsg);
|
|
|
+
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 文件数据分组
|
|
|
+ * @param dataList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map<String, List<ReimbursementUserDTO>> dataDispose(List<ReimbursementUserDTO> dataList) {
|
|
|
+ Map<String, List<ReimbursementUserDTO>> result = listMap(dataList);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, List<ReimbursementUserDTO>> listMap(List<ReimbursementUserDTO> list) {
|
|
|
+ Map<String, List<ReimbursementUserDTO>> userSignSerialMap = new HashMap<>();
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+ // 分组
|
|
|
+ for (ReimbursementUserDTO vo : list) {
|
|
|
+ List<ReimbursementUserDTO> tempList = userSignSerialMap.get(vo.getKeyFlag());
|
|
|
+ /*如果取不到数据,那么直接new一个空的ArrayList**/
|
|
|
+ if (tempList == null) {
|
|
|
+ tempList = new ArrayList<>();
|
|
|
+ tempList.add(vo);
|
|
|
+ userSignSerialMap.put(vo.getKeyFlag(), tempList);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ /*某个vo之前已经存放过了,则直接追加数据到原来的List里**/
|
|
|
+ tempList.add(vo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return userSignSerialMap;
|
|
|
}
|
|
|
|
|
|
}
|