package com.jsh.erp.service.accountHead; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.jsh.erp.constants.BusinessConstants; import com.jsh.erp.constants.ExceptionConstants; import com.jsh.erp.datasource.entities.*; import com.jsh.erp.datasource.mappers.AccountHeadMapper; import com.jsh.erp.datasource.mappers.AccountHeadMapperEx; import com.jsh.erp.datasource.mappers.AccountItemMapperEx; import com.jsh.erp.exception.BusinessRunTimeException; import com.jsh.erp.exception.JshException; import com.jsh.erp.service.log.LogService; import com.jsh.erp.service.user.UserService; import com.jsh.erp.utils.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service public class AccountHeadService { private Logger logger = LoggerFactory.getLogger(AccountHeadService.class); @Resource private AccountHeadMapper accountHeadMapper; @Resource private AccountHeadMapperEx accountHeadMapperEx; @Resource private UserService userService; @Resource private LogService logService; @Resource private AccountItemMapperEx accountItemMapperEx; public AccountHead getAccountHead(long id) throws Exception { AccountHead result=null; try{ result=accountHeadMapper.selectByPrimaryKey(id); }catch(Exception e){ JshException.readFail(logger, e); } return result; } public List getAccountHead() throws Exception{ AccountHeadExample example = new AccountHeadExample(); List list=null; try{ list=accountHeadMapper.selectByExample(example); }catch(Exception e){ JshException.readFail(logger, e); } return list; } public List select(String type, String billNo, String beginTime, String endTime, int offset, int rows) throws Exception{ List resList = new ArrayList(); List list=null; try{ list = accountHeadMapperEx.selectByConditionAccountHead(type, billNo, beginTime, endTime, offset, rows); }catch(Exception e){ JshException.readFail(logger, e); } if (null != list) { for (AccountHeadVo4ListEx ah : list) { if(ah.getChangeamount() != null) { ah.setChangeamount(ah.getChangeamount().abs()); } if(ah.getTotalprice() != null) { ah.setTotalprice(ah.getTotalprice().abs()); } resList.add(ah); } } return resList; } public Long countAccountHead(String type, String billNo, String beginTime, String endTime) throws Exception{ Long result=null; try{ result = accountHeadMapperEx.countsByAccountHead(type, billNo, beginTime, endTime); }catch(Exception e){ JshException.readFail(logger, e); } return result; } @Transactional(value = "transactionManager", rollbackFor = Exception.class) public int insertAccountHead(String beanJson, HttpServletRequest request) throws Exception{ AccountHead accountHead = JSONObject.parseObject(beanJson, AccountHead.class); int result=0; try{ result = accountHeadMapper.insertSelective(accountHead); logService.insertLog("财务", BusinessConstants.LOG_OPERATION_TYPE_ADD, request); }catch(Exception e){ JshException.writeFail(logger, e); } return result; } @Transactional(value = "transactionManager", rollbackFor = Exception.class) public int updateAccountHead(String beanJson, Long id, HttpServletRequest request)throws Exception { AccountHead accountHead = JSONObject.parseObject(beanJson, AccountHead.class); accountHead.setId(id); int result=0; try{ result = accountHeadMapper.updateByPrimaryKeySelective(accountHead); logService.insertLog("财务", new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(id).toString(), request); }catch(Exception e){ JshException.writeFail(logger, e); } return result; } @Transactional(value = "transactionManager", rollbackFor = Exception.class) public int deleteAccountHead(Long id, HttpServletRequest request)throws Exception { int result=0; try{ result = accountHeadMapper.deleteByPrimaryKey(id); logService.insertLog("财务", new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(id).toString(), request); }catch(Exception e){ JshException.writeFail(logger, e); } return result; } @Transactional(value = "transactionManager", rollbackFor = Exception.class) public int batchDeleteAccountHead(String ids, HttpServletRequest request)throws Exception { List idList = StringUtil.strToLongList(ids); AccountHeadExample example = new AccountHeadExample(); example.createCriteria().andIdIn(idList); int result=0; try{ result = accountHeadMapper.deleteByExample(example); logService.insertLog("财务", "批量删除,id集:" + ids, request); }catch(Exception e){ JshException.writeFail(logger, e); } return result; } public int checkIsNameExist(Long id, String name)throws Exception { AccountHeadExample example = new AccountHeadExample(); example.createCriteria().andIdNotEqualTo(id).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); List list = null; try{ list = accountHeadMapper.selectByExample(example); }catch(Exception e){ JshException.readFail(logger, e); } return list==null?0:list.size(); } public Long getMaxId()throws Exception { Long result = null; try{ result = accountHeadMapperEx.getMaxId(); }catch(Exception e){ JshException.readFail(logger, e); } return result; } public BigDecimal findAllMoney(Integer supplierId, String type, String mode, String endTime) { String modeName = ""; if (mode.equals("实际")) { modeName = "ChangeAmount"; } else if (mode.equals("合计")) { modeName = "TotalPrice"; } BigDecimal result = null; try{ result = accountHeadMapperEx.findAllMoney(supplierId, type, modeName, endTime); }catch(Exception e){ JshException.readFail(logger, e); } return result; } /** * 统计总金额 * @param getS * @param type * @param mode 合计或者金额 * @param endTime * @return */ public BigDecimal allMoney(String getS, String type, String mode, String endTime) { BigDecimal allMoney = BigDecimal.ZERO; try { Integer supplierId = Integer.valueOf(getS); BigDecimal sum = findAllMoney(supplierId, type, mode, endTime); if(sum != null) { allMoney = sum; } } catch (Exception e) { e.printStackTrace(); } //返回正数,如果负数也转为正数 if ((allMoney.compareTo(BigDecimal.ZERO))==-1) { allMoney = allMoney.abs(); } return allMoney; } /** * 查询单位的累计应收和累计应付,收预付款不计入此处 * @param supplierId * @param endTime * @param supType * @return */ public BigDecimal findTotalPay(Integer supplierId, String endTime, String supType) { BigDecimal sum = BigDecimal.ZERO; String getS = supplierId.toString(); int i = 1; if (("customer").equals(supType)) { //客户 i = 1; } else if (("vendor").equals(supType)) { //供应商 i = -1; } //收付款部分 sum = sum.add((allMoney(getS, "付款", "合计",endTime).add(allMoney(getS, "付款", "实际",endTime))).multiply(new BigDecimal(i))); sum = sum.subtract((allMoney(getS, "收款", "合计",endTime).add(allMoney(getS, "收款", "实际",endTime))).multiply(new BigDecimal(i))); sum = sum.add((allMoney(getS, "收入", "合计",endTime).subtract(allMoney(getS, "收入", "实际",endTime))).multiply(new BigDecimal(i))); sum = sum.subtract((allMoney(getS, "支出", "合计",endTime).subtract(allMoney(getS, "支出", "实际",endTime))).multiply(new BigDecimal(i))); return sum; } public List getDetailByNumber(String billNo)throws Exception { List resList = new ArrayList(); List list = null; try{ list = accountHeadMapperEx.getDetailByNumber(billNo); }catch(Exception e){ JshException.readFail(logger, e); } if (null != list) { for (AccountHeadVo4ListEx ah : list) { if(ah.getChangeamount() != null) { ah.setChangeamount(ah.getChangeamount().abs()); } if(ah.getTotalprice() != null) { ah.setTotalprice(ah.getTotalprice().abs()); } resList.add(ah); } } return resList; } @Transactional(value = "transactionManager", rollbackFor = Exception.class) public int batchDeleteAccountHeadByIds(String ids)throws Exception { logService.insertLog("财务", new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(ids).toString(), ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); User userInfo=userService.getCurrentUser(); String [] idArray=ids.split(","); int result = 0; try{ result = accountHeadMapperEx.batchDeleteAccountHeadByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); }catch(Exception e){ JshException.writeFail(logger, e); } return result; } /** * create by: qiankunpingtai * website:https://qiankunpingtai.cn * description: * 正常删除,要考虑数据完整性,进行完整性校验 * create time: 2019/4/10 15:49 * @Param: ids * @return int */ @Transactional(value = "transactionManager", rollbackFor = Exception.class) public int batchDeleteAccountHeadByIdsNormal(String ids) throws Exception { /** * 校验 * 1、财务子表 jsh_accountitem * 是否有相关数据 * */ int deleteTotal=0; if(StringUtils.isEmpty(ids)){ return deleteTotal; } String [] idArray=ids.split(","); /** * 校验财务子表 jsh_accountitem * */ List accountItemList = null; try{ accountItemList = accountItemMapperEx.getAccountItemListByHeaderIds(idArray); }catch(Exception e){ JshException.readFail(logger, e); } if(accountItemList!=null&&accountItemList.size()>0){ logger.error("异常码[{}],异常提示[{}],参数,HeaderIds[{}]", ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); } /** * 校验通过执行删除操作 * */ deleteTotal= batchDeleteAccountHeadByIds(ids); return deleteTotal; } }