Commit 3568bff2 authored by lcl's avatar lcl

add

parent 6ca2e394
package com.dsk.cscec.controller;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo;
import com.dsk.cscec.service.ICbGainLossAnalysisService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 成本-盈亏分析对比
*
* @Author lcl
* @Data 2024/2/18 14:01
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/cb/gain/loss/analysis")
public class CbGainLossAnalysisController extends BaseController {
private final ICbGainLossAnalysisService baseService;
/**
* 数据列表
*/
@GetMapping("/list")
public R<List<CbGainLossAnalysisListVo>> getList(CbSummaryActualListBo bo) {
return R.ok(baseService.getList(bo));
}
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Author lcl
* @Data 2024/2/19 9:42
*/
@Data
public class CbGainLossAnalysisListVo implements Serializable {
private Long id;
/**
* 名称
*/
private String cbName;
/**
* 招标控制价(招标控制价合价)
*/
private String tenderSumPrice;
/**
* 招标控制价(不含税招标合价)
*/
private String taxExcludeTenderSumPrice;
/**
* 招标控制价(含税招标合价)
*/
private String taxIncludeTenderSumPrice;
/**
* 投标报价(投标报价合价)
*/
private String bidSumPrice;
/**
* 投标报价(不含税投标合价)
*/
private String taxExcludeBidSumPrice;
/**
* 投标报价(含税投标合价)
*/
private String taxIncludebBidSumPrice;
/**
* 成本汇总(不含税成本合价)
*/
private String taxExclusiveTotal;
/**
* 成本汇总(成本税金合价)
*/
private String cbTaxesTotal;
/**
* 成本汇总(含税成本合价)
*/
private String taxInclusiveTotal;
/**
* 造价指标(招标控制价)
*/
private String costTender;
/**
* 造价指标(投标报价)
*/
private String costBid;
/**
* 造价指标(成本)
*/
private String costExpense;
/**
* 含税成本占比
*/
private String taxInclusiveExpenseProportion;
/**
* 招标控制价(含税合价偏差)
*/
private String tenderSumPriceDeviation;
/**
* 招标控制价(含税盈亏率)
*/
private String tenderProfitLossRatio;
/**
* 投标报价(含税合价偏差)
*/
private String bidSumPriceDeviation;
/**
* 投标报价(含税盈亏率)
*/
private String bidProfitLossRatio;
/**
* 实际成本费用(本月费用(含税))
*/
private String taxInclusiveExpense;
/**
* 实际成本费用(本月费用(不含税))
*/
private String taxExclusiveExpense;
/**
* 实际成本费用(截至本月费用(含税))
*/
private String sumTaxInclusiveExpense;
/**
* 实际成本费用(截至本月费用(不含税))
*/
private String sumTaxExclusiveExpense;
private List<CbGainLossAnalysisListVo> children;
}
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbSummary; import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo; import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryBo; import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo; import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -53,4 +54,11 @@ public interface CbSummaryMapper extends BaseMapper<CbSummary> { ...@@ -53,4 +54,11 @@ public interface CbSummaryMapper extends BaseMapper<CbSummary> {
* @return * @return
*/ */
List<Map<String, Object>> selectByLevel(@Param("bo") CbSummaryBo bo); List<Map<String, Object>> selectByLevel(@Param("bo") CbSummaryBo bo);
CbGainLossAnalysisListVo getGainLossAnalysisById(@Param("id") Long id, @Param("expenseDate") String expenseDate);
List<CbGainLossAnalysisListVo> getGainLossAnalysisByParentId(@Param("id") Long parentId, @Param("expenseDate") String expenseDate);
} }
package com.dsk.cscec.service;
import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo;
import java.util.List;
import java.util.Map;
public interface ICbGainLossAnalysisService {
List<CbGainLossAnalysisListVo> getList(CbSummaryActualListBo bo);
}
package com.dsk.cscec.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo;
import com.dsk.cscec.mapper.CbSummaryMapper;
import com.dsk.cscec.service.ICbGainLossAnalysisService;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Author lcl
* @Data 2024/2/18 14:03
*/
@Slf4j
@Service
public class CbGainLossAnalysisServiceImpl implements ICbGainLossAnalysisService {
@Resource
private CbSummaryMapper cbSummaryMapper;
@Override
public List<CbGainLossAnalysisListVo> getList(CbSummaryActualListBo bo) {
Assert.notNull(bo.getId(),"id不能为空");
Assert.notNull(bo.getCbType(),"成本类型不能为空");
List<CbGainLossAnalysisListVo> resultList = new ArrayList<>();
if (StringUtil.isBlank(bo.getExpenseDate())) {
//默认当前月
bo.setExpenseDate(DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()));
}
CbSummary cbSummary = cbSummaryMapper.selectById(bo.getId());
if (ObjectUtil.isEmpty(cbSummary)) {
return resultList;
}
List<CbGainLossAnalysisListVo> childrenList = cbSummaryMapper.getGainLossAnalysisByParentId(bo.getId(), bo.getExpenseDate());
if (0 == cbSummary.getLevel()) {
resultList = childrenList;
}else {
childrenList = getProjectSumList(bo);
CbGainLossAnalysisListVo cbGainLossAnalysisListVo = cbSummaryMapper.getGainLossAnalysisById(bo.getId(),bo.getExpenseDate());
cbGainLossAnalysisListVo.setChildren(childrenList);
resultList.add(cbGainLossAnalysisListVo);
}
return resultList;
}
/**
* 盈亏对比分析列表
*
*/
private List<CbGainLossAnalysisListVo> getProjectSumList(CbSummaryActualListBo bo) {
List<CbGainLossAnalysisListVo> childrenList = cbSummaryMapper.getGainLossAnalysisByParentId(bo.getId(), bo.getExpenseDate());
childrenList.forEach(children -> {
CbSummaryActualListBo childBo = new CbSummaryActualListBo();
childBo.setId(children.getId());
childBo.setExpenseDate(bo.getExpenseDate());
children.setChildren(getProjectSumList(childBo));
});
return childrenList;
}
}
...@@ -107,5 +107,31 @@ ...@@ -107,5 +107,31 @@
order by csu.sort order by csu.sort
</select> </select>
<select id="getGainLossAnalysisById" resultType="com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo">
select csu.id, csu.cb_name, csu.tax_exclusive_total, csu.cb_taxes_total, csu.tax_inclusive_total, csa.tax_inclusive_expense, csa.tax_exclusive_expense,
sum(cde.tender_control_sum_price) tenderSumPrice, sum(cde.exclude_tax_cb_sum_price) taxExcludeTenderSumPrice, sum(cde.include_tax_cb_sum_price) taxIncludeTenderSumPrice,
sum(csa1.tax_inclusive_expense) sumTaxInclusiveExpense, sum(csa1.tax_exclusive_expense) sumTaxExclusiveExpense
from cb_summary csu
left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0)
left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0)
left join cb_direct_expense cde on (csu.project_id = cde.project_id and csu.cb_stage = cde.cb_stage and cde.del_flag = 0)
where csu.id = #{id} and csu.del_flag = 0
group by csu.id
order by csu.sort
</select>
<select id="getGainLossAnalysisByParentId" resultType="com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo">
select csu.id, csu.cb_name, csu.tax_exclusive_total, csu.cb_taxes_total, csu.tax_inclusive_total, csa.tax_inclusive_expense, csa.tax_exclusive_expense,
sum(cde.tender_control_sum_price) tenderSumPrice, sum(cde.exclude_tax_cb_sum_price) taxExcludeTenderSumPrice, sum(cde.include_tax_cb_sum_price) taxIncludeTenderSumPrice,
sum(csa1.tax_inclusive_expense) sumTaxInclusiveExpense, sum(csa1.tax_exclusive_expense) sumTaxExclusiveExpense
from cb_summary csu
left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0)
left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0)
left join cb_direct_expense cde on (csu.project_id = cde.project_id and csu.cb_stage = cde.cb_stage and cde.del_flag = 0)
where csu.parent_id = #{parentId} and csu.del_flag = 0
group by csu.id
order by csu.sort
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment