package com.ydtech.modules.fnc.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.gson.Gson; import com.ydtech.core.page.HttpResult; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper; import com.ydtech.modules.fnc.dao.SettlementDocumentaryFeesMapper; import com.ydtech.modules.fnc.entity.InsPlyIncome; import com.ydtech.modules.fnc.entity.SettlementDocumentaryFeesEntity; import com.ydtech.modules.fnc.entity.SettlementDocumentaryLogEntity; import com.ydtech.modules.fnc.service.SettlementDocumentaryFeesService; import com.ydtech.modules.fnc.service.SettlementDocumentaryLogService; import com.ydtech.modules.fnc.vo.InsPlyIncomeVo; import com.ydtech.modules.fnc.vo.SettlementDocumentaryFeesVo; import com.ydtech.modules.order.entity.BasePageResult; import com.ydtech.modules.order.entity.InsOrders; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.List; @Service public class SettlementDocumentaryFeesServiceImpl extends ServiceImpl implements SettlementDocumentaryFeesService { @Autowired private SettlementDocumentaryLogService settlementDocumentaryLogService; @Autowired private InsPlyIncomeMapper insPlyIncomeMapper; @Override public HttpResult> querySettle(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo) { try { HashMap params = new HashMap<>(); params.put("pageNum", settlementDocumentaryFeesVo.getPageNum()); params.put("pageSize", settlementDocumentaryFeesVo.getPageSize()); if(StringUtils.isNotEmpty(settlementDocumentaryFeesVo.getHandlingFeesStatus())){ params.put("handlingFeesStatus",settlementDocumentaryFeesVo.getHandlingFeesStatus()); } if(StringUtils.isNotEmpty(settlementDocumentaryFeesVo.getAgreementType())){ params.put("agreementType",settlementDocumentaryFeesVo.getAgreementType()); } if(StringUtils.isNotEmpty(settlementDocumentaryFeesVo.getIsNotCar())){ params.put("isNotCar",settlementDocumentaryFeesVo.getIsNotCar()); } if(StringUtils.isNotEmpty(settlementDocumentaryFeesVo.getPartnerCompaniesId())){ params.put("partnerCompaniesId",settlementDocumentaryFeesVo.getPartnerCompaniesId()); } if(StringUtils.isNotEmpty(settlementDocumentaryFeesVo.getParentId())){ params.put("parentId",settlementDocumentaryFeesVo.getParentId()); } PageInfo> pageHelper = null; List list = this.baseMapper.querySettle(params); pageHelper = new PageInfo(list); BasePageResult pageResult = new BasePageResult(settlementDocumentaryFeesVo.getPageNum(), settlementDocumentaryFeesVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list); return HttpResult.ok(pageResult); } catch (Exception e) { e.printStackTrace(); return HttpResult.error("查询异常"); } } @Override @Transactional public HttpResult inertSettle(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo) { int i = this.compareAmount(settlementDocumentaryFeesVo.getTotalAmount(), settlementDocumentaryFeesVo.getSettlementAmount()); if (i < 0) { return HttpResult.error("结算金额大于总金额,请重新结算"); } SettlementDocumentaryFeesEntity settlementDocumentaryFeesEntity = new SettlementDocumentaryFeesEntity(); BeanUtils.copyProperties(settlementDocumentaryFeesVo, settlementDocumentaryFeesEntity); baseMapper.insert(settlementDocumentaryFeesEntity); // 生成跟单费结算记录 SettlementDocumentaryLogEntity settlementDocumentaryLogEntity = new SettlementDocumentaryLogEntity(); settlementDocumentaryLogEntity.setAmount(settlementDocumentaryFeesVo.getSettlementAmount()); // 结算金额 settlementDocumentaryLogEntity.setSettlementDocumentaryId(settlementDocumentaryFeesEntity.getId()); // 关联id settlementDocumentaryLogEntity.setAmountType("2"); //跟单费结算 settlementDocumentaryLogEntity.setCreateTime(new Date()); settlementDocumentaryLogService.save(settlementDocumentaryLogEntity); return HttpResult.ok("结算成功"); } @Override @Transactional public HttpResult documentarySettle(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo) { SettlementDocumentaryFeesEntity settlementDocumentaryFeesEntity = baseMapper.selectById(settlementDocumentaryFeesVo.getId()); if (settlementDocumentaryFeesVo.getSettlementAmount() != null && ObjectUtils.isNotEmpty(settlementDocumentaryFeesEntity)) { int i = this.compareAmount(settlementDocumentaryFeesEntity.getUnsettledAmount(), settlementDocumentaryFeesVo.getSettlementAmount()); if (i < 0) { return HttpResult.error("结算金额大于未结算金额,请重新结算"); } settlementDocumentaryFeesEntity.setSettlementAmount(settlementDocumentaryFeesEntity.getSettlementAmount().add(settlementDocumentaryFeesVo.getSettlementAmount())); settlementDocumentaryFeesEntity.setUnsettledAmount(settlementDocumentaryFeesEntity.getTotalAmount().subtract(settlementDocumentaryFeesEntity.getSettlementAmount())); //未结算金额 baseMapper.updateById(settlementDocumentaryFeesEntity); // 记录 // 生成跟单费结算记录 SettlementDocumentaryLogEntity settlementDocumentaryLogEntity = new SettlementDocumentaryLogEntity(); settlementDocumentaryLogEntity.setAmount(settlementDocumentaryFeesVo.getSettlementAmount()); // 结算金额 settlementDocumentaryLogEntity.setSettlementDocumentaryId(settlementDocumentaryFeesEntity.getId()); // 关联id settlementDocumentaryLogEntity.setAmountType("2"); //跟单费结算 settlementDocumentaryLogEntity.setCreateTime(new Date()); settlementDocumentaryLogService.save(settlementDocumentaryLogEntity); return HttpResult.ok("修改成功"); } return null; } /** * * @param invoiceIds 结算表的id * @return 返回开票号 开票金额 开票时间 */ @Override public List> getOtherSettldetail(HashMap params) { return baseMapper.getOtherSettldetail(params); } /** * * @param ids 开票ids * @param invoicingMethod 开票方式 0 保司开票 1 掌柜开票 * @param taxPoints 税点 */ @Override public void batchByInvoice(String ids , String invoicingMethod, BigDecimal taxPoints ,BigDecimal invoicCommissionFeevalue) { /** * 跟单开票处新增开票方式:保司开票/掌柜开票 * * 如果是保司开票,需要填写税点,后续在结算时,税收成本算做支出项,进账金额=开票金额*(1-税点),但统计应收金额 * ,开票金额,已收金额,开票未进账金额均按照不扣税点的金额核算。 * * 如果是掌柜开票,需要填写税点,但后续结算时,进账金额=开票金额。 * * */ // 结算金额 收款金额=开票金额*(1-税点) HashMap params = new HashMap<>(); params.put("ids",ids.split(",")); baseMapper.batchByInvoice(params); } @Override public List> getInvoicIds(HashMap params) { return baseMapper.getInvoicIds(params); } @Override public SettlementDocumentaryFeesEntity getByParentSettlementAmount(String id) { return baseMapper.getByParentSettlementAmount(id); } /** * 作废开票 settlementStatus 为3表示为作废开票 * @param settlementDocumentaryFeesVo */ @Override public void voidInvoicing(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo) { SettlementDocumentaryFeesEntity oldSettlementDocumentaryFeesEntity = baseMapper.selectById(settlementDocumentaryFeesVo.getId()); String taskId = oldSettlementDocumentaryFeesEntity.getTaskId(); HashMap params = new HashMap<>(); params.put("taskId",taskId); List insPlyIncomes = insPlyIncomeMapper.queryNew(params); for (InsPlyIncome item :insPlyIncomes){ item.setHandlingFeesStatus("0"); //0 为未开票 item.setTaskId(null); insPlyIncomeMapper.updateById(item); } SettlementDocumentaryFeesEntity settlementDocumentaryFeesEntity = new SettlementDocumentaryFeesEntity(); BeanUtils.copyProperties(settlementDocumentaryFeesVo,settlementDocumentaryFeesEntity); settlementDocumentaryFeesEntity.setSettlementStatus("3"); // 3 为作废 baseMapper.updateById(settlementDocumentaryFeesEntity); } private int compareAmount(BigDecimal settlementAmount, BigDecimal settlementAmount1) { return settlementAmount.compareTo(settlementAmount1); } }