|
@@ -24,15 +24,19 @@ import com.fjhx.jxst.entity.sales.po.SalesContract;
|
|
|
import com.fjhx.jxst.entity.sales.po.SalesContractDetails;
|
|
|
import com.fjhx.jxst.entity.sales.vo.SalesContractDetailsVo;
|
|
|
import com.fjhx.jxst.entity.sales.vo.SalesContractVo;
|
|
|
+import com.fjhx.jxst.entity.statement.bo.SettlementBo;
|
|
|
import com.fjhx.jxst.mapper.sales.SalesContractMapper;
|
|
|
import com.fjhx.jxst.service.sales.SalesContractDetailsService;
|
|
|
import com.fjhx.jxst.service.sales.SalesContractService;
|
|
|
import com.ruoyi.common.core.domain.BasePo;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
+import com.ruoyi.common.utils.wrapper.SqlField;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
@@ -74,10 +78,10 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
if (ObjectUtil.isNotEmpty(list)) {
|
|
|
List<Long> ids = list.stream().map(Customer::getId).collect(Collectors.toList());
|
|
|
wrapper.and(q -> q.in(SalesContract::getCustomerId, ids).or().like(SalesContractVo::getContractAmount, dto.getKeyword()));
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
wrapper.and(q -> q
|
|
|
.like(SalesContractVo::getContractAmount, dto.getKeyword())
|
|
|
- .or().like(SalesContract::getCode,dto.getKeyword())
|
|
|
+ .or().like(SalesContract::getCode, dto.getKeyword())
|
|
|
);
|
|
|
}
|
|
|
}
|
|
@@ -94,7 +98,7 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
});
|
|
|
|
|
|
//计算未到账金额(未结清金额)
|
|
|
- records.forEach(item->item.setNotClaimAmount(item.getContractAmount().subtract(item.getClaimAmount())));
|
|
|
+ records.forEach(item -> item.setNotClaimAmount(item.getContractAmount().subtract(item.getClaimAmount())));
|
|
|
|
|
|
return page;
|
|
|
}
|
|
@@ -102,7 +106,7 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
@Override
|
|
|
public SalesContractVo detail(Long id) {
|
|
|
SalesContract salesContract = this.getById(id);
|
|
|
- Assert.notEmpty(salesContract,"查询不到合同信息");
|
|
|
+ Assert.notEmpty(salesContract, "查询不到合同信息");
|
|
|
SalesContractVo result = BeanUtil.toBean(salesContract, SalesContractVo.class);
|
|
|
List<SalesContractDetails> salesContractDetailsList = salesContractDetailsService.list(q -> q.eq(SalesContractDetails::getSalesContractId, result.getId()));
|
|
|
List<SalesContractDetailsVo> salesContractDetailsVos = BeanUtil.copyToList(salesContractDetailsList, SalesContractDetailsVo.class);
|
|
@@ -115,7 +119,7 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
result.setContractDetailsList(salesContractDetailsVos);
|
|
|
//赋值客户信息
|
|
|
Customer customer = customerService.getById(result.getCustomerId());
|
|
|
- if(ObjectUtil.isNotEmpty(customer)){
|
|
|
+ if (ObjectUtil.isNotEmpty(customer)) {
|
|
|
result.setCustomerName(customer.getName());
|
|
|
result.setCustomerBank(customer.getBeneficiaryBank());
|
|
|
result.setCustomerSwiftCode(customer.getSwiftCode());
|
|
@@ -162,7 +166,7 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
// }
|
|
|
// salesContractDto.setContractAmount(count);
|
|
|
// salesContractDto.setCode(CodeEnum.SALES_CONTRACT.getCode());
|
|
|
- salesContractDto.setCode(codingRuleService.createCode(CodingRuleEnum.JXST_SALES_CONTRACT.getKey(),null));
|
|
|
+ salesContractDto.setCode(codingRuleService.createCode(CodingRuleEnum.JXST_SALES_CONTRACT.getKey(), null));
|
|
|
|
|
|
this.save(salesContractDto);
|
|
|
for (SalesContractDetails salesContractDetails : salesContractDetailsList) {
|
|
@@ -184,4 +188,108 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 利润结算表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Page<SettlementBo> getProfitClearingPage(SalesContractSelectDto dto) {
|
|
|
+ IWrapper<SalesContract> wrapper = getProfitClearingWrapper(dto);
|
|
|
+ wrapper.orderByDesc("sc", SalesContract::getCreateTime);
|
|
|
+ Page<SettlementBo> profitClearingPage = baseMapper.getProfitClearingPage(dto.getPage(), wrapper);
|
|
|
+ List<SettlementBo> records = profitClearingPage.getRecords();
|
|
|
+ if (ObjectUtil.isEmpty(records)) {
|
|
|
+ return profitClearingPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ //计算 总支出 毛利 毛利率
|
|
|
+ for (SettlementBo record : records) {
|
|
|
+ //总支出
|
|
|
+ BigDecimal totalExpenditure = BigDecimal.ZERO;
|
|
|
+ totalExpenditure.add(record.getMaterialFee());//物料费
|
|
|
+ totalExpenditure.add(record.getAfterSalesFee());//售后费用
|
|
|
+ totalExpenditure.add(record.getTrailerFee());//拖车费
|
|
|
+ totalExpenditure.add(record.getInspectionRedPackFee());//验货红包
|
|
|
+ totalExpenditure.add(record.getCommissionFee());//佣金
|
|
|
+ totalExpenditure.add(record.getOtherFee());//其他费用
|
|
|
+ record.setTotalExpenditure(totalExpenditure);
|
|
|
+
|
|
|
+ //毛利(总收入-总支出)
|
|
|
+ record.setGrossProfit(record.getTotalIncome().subtract(record.getTotalExpenditure()));
|
|
|
+
|
|
|
+ //毛利率(毛利/总收入*100%)
|
|
|
+ BigDecimal grossProfitMargin = BigDecimal.ZERO;
|
|
|
+ if (record.getGrossProfit().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ grossProfitMargin = record.getGrossProfit()
|
|
|
+ .divide(record.getTotalIncome(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
|
|
|
+ }
|
|
|
+ record.setGrossProfitMargin(grossProfitMargin);
|
|
|
+
|
|
|
+ //变成科学计数法问题处理
|
|
|
+ record.setMaterialFee(record.getMaterialFee().setScale(4, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+
|
|
|
+ return profitClearingPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 利润结算表头部统计
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public SettlementBo getProfitClearingHead(SalesContractSelectDto dto) {
|
|
|
+ IWrapper<SalesContract> wrapper = getProfitClearingWrapper(dto);
|
|
|
+ SettlementBo record = baseMapper.getProfitSettlementHead(wrapper);
|
|
|
+
|
|
|
+ //总支出
|
|
|
+ BigDecimal totalExpenditure = BigDecimal.ZERO;
|
|
|
+ totalExpenditure.add(record.getMaterialFee());//物料费
|
|
|
+ totalExpenditure.add(record.getAfterSalesFee());//售后费用
|
|
|
+ totalExpenditure.add(record.getTrailerFee());//拖车费
|
|
|
+ totalExpenditure.add(record.getInspectionRedPackFee());//验货红包
|
|
|
+ totalExpenditure.add(record.getCommissionFee());//佣金
|
|
|
+ totalExpenditure.add(record.getOtherFee());//其他费用
|
|
|
+ record.setTotalExpenditure(totalExpenditure);
|
|
|
+
|
|
|
+ //毛利(总收入-总支出)
|
|
|
+ record.setGrossProfit(record.getTotalIncome().subtract(record.getTotalExpenditure()));
|
|
|
+
|
|
|
+ //毛利率(毛利/总收入*100%)
|
|
|
+ BigDecimal grossProfitMargin = BigDecimal.ZERO;
|
|
|
+ if (record.getGrossProfit().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ grossProfitMargin = record.getGrossProfit()
|
|
|
+ .divide(record.getTotalIncome(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
|
|
|
+ }
|
|
|
+ record.setGrossProfitMargin(grossProfitMargin);
|
|
|
+
|
|
|
+ //变成科学计数法问题处理
|
|
|
+ record.setMaterialFee(record.getMaterialFee().setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ return record;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 利润结算表公用参数列表
|
|
|
+ */
|
|
|
+ private IWrapper<SalesContract> getProfitClearingWrapper(SalesContractSelectDto dto) {
|
|
|
+ IWrapper<SalesContract> wrapper = IWrapper.getWrapper();
|
|
|
+ wrapper.keyword(dto.getKeyword(),
|
|
|
+ new SqlField("cu.name"),
|
|
|
+ new SqlField("sc.code")
|
|
|
+ );
|
|
|
+
|
|
|
+ wrapper.eq("sc.is_settled", dto.getIsSettled());
|
|
|
+
|
|
|
+ return wrapper;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 预算
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void budget(SalesContractDto dto) {
|
|
|
+ Assert.notEmpty(dto.getId(), "");
|
|
|
+ SalesContract salesContract = this.getById(dto.getId());
|
|
|
+ Assert.notEmpty(salesContract,"查询不到合同信息!");
|
|
|
+ this.updateById(dto);
|
|
|
+ }
|
|
|
}
|