四算预算修改,税金显示

master
OathK1per 2022-08-16 09:42:18 +08:00
parent 7cb1861926
commit 1a34826245
11 changed files with 461 additions and 71 deletions

View File

@ -75,6 +75,10 @@ public class BudgetBean extends IncomeCostBean{
this.costPurchaseTotalTaxInclude = costPurchaseTotalTaxInclude;
}
public BigDecimal getCostPurchaseTotalTax() {
return getCostPurchaseTotalTaxInclude().subtract(getCostPurchaseTotalTaxExclude());
}
public BigDecimal getIncomeDeviceTax() {
return incomeDeviceTax;
}

View File

@ -4,6 +4,7 @@ import cn.palmte.work.bean.ResponseMsg;
import cn.palmte.work.model.MonthlySettle;
import cn.palmte.work.model.MonthlySettleRepository;
import cn.palmte.work.service.MonthlySettleService;
import cn.palmte.work.utils.FreeMarkerUtil;
import cn.palmte.work.utils.Utils;
import cn.palmte.work.utils.excel.AppendMore;
import cn.palmte.work.utils.excel.ExcelLogs;
@ -53,16 +54,24 @@ public class MonthlySettleController extends BaseController {
setModel(keywords, model);
ConcurrentHashMap<String, String> searchInfo = getSearchInfo(keywords, model);
model.put("pager", monthlySettleService.list(searchInfo, pageNumber, pageSize));
model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils"));
return "/admin/monthlySettle_list";
}
@RequestMapping("/info")
public String list(@RequestParam("id") int id, Map<String, Object> model) {
public String info(@RequestParam("id") int id, Map<String, Object> model) {
MonthlySettle monthlySettle = monthlySettleRepository.findOne(id);
model.put("monthlySettle", monthlySettle);
return "/admin/monthlySettle_info";
}
@RequestMapping("/infoByTime")
public String infoByTime(@RequestParam("time") String time, @RequestParam("projectName") String projectName, Map<String, Object> model) {
MonthlySettle monthlySettle = monthlySettleRepository.findByMonthAndProjectName(time, projectName);
model.put("monthlySettle", monthlySettle);
return "/admin/monthlySettle_info";
}
private void setModel(@RequestParam(value = "keywords", required = false) String keywords, Map<String, Object> model) {
model.put("keywords", keywords);
}
@ -109,13 +118,13 @@ public class MonthlySettleController extends BaseController {
*/
@RequestMapping("/batchImport")
@ResponseBody
public String batchImport(MultipartFile file) {
public String batchImport(MultipartFile file, @RequestParam(value = "date",required = false) String date) {
try {
ExcelLogs logs = new ExcelLogs();
Collection<Map> maps = ExcelUtil.importExcel(Map.class, file.getInputStream(),
"yyyy/MM/dd HH:mm:ss", logs, 0);
synchronized (this) {
return JSON.toJSONString(monthlySettleService.check(maps));
return JSON.toJSONString(monthlySettleService.check(maps, date));
}
} catch (OfficeXmlFileException | EncryptedDocumentException | InvalidFormatException e) {
return JSON.toJSONString(ResponseMsg.buildFailedMsg("格式错误请上传excel 2003/2007格式文件"));

View File

@ -159,16 +159,16 @@ public class ProjectController extends BaseController {
//收入明细
List<ProjectBudgetIncomeDetail> budgetIncomeDetail = projectBudgetService.getBudgetIncomeDetail(project);
Integer incomeTotalAmount = projectBudgetService.getBudgetIncomeAmount(project);
String[] headers2 = {"序号", "类别", "名称", "单位", "数量", "单价", "税率(%)", "含税总金额(元)", "不含税金额(元)"};
String[] columns2 = {"tempId", "type", "name", "unit", "amount", "price", "taxRate", "totalTaxInclude", "totalTaxExclude"};
String[] headers2 = {"序号", "类别", "名称", "单位", "数量", "单价", "税率(%)", "含税总金额(元)", "不含税金额(元)", "税金(元)"};
String[] columns2 = {"tempId", "type", "name", "unit", "amount", "price", "taxRate", "totalTaxInclude", "totalTaxExclude", "totalTax"};
exportExcelUtils.exportIncomeDetailExcel(headers2, columns2, project, budgetBean, budgetIncomeDetail, incomeTotalAmount, "yyyy-MM-dd", 0, "收入明细表", outputStream);
//成本明细
List<ProjectBudgetCostDetail> budgetCostDetail = projectBudgetService.getBudgetCostDetail(project);
Integer costTotalAmount = projectBudgetService.getBudgetCostAmount(project);
List<ProcurementType> procurementTypes = procurementTypeService.allProcurementTypeList();
Map<Integer, String> procurementMap = procurementTypes.stream().collect(Collectors.toMap(ProcurementType::getId, ProcurementType::getName));
String[] headers3 = {"序号", "大类", "类别", "名称", "单位", "数量", "单价", "税率(%)", "含税总金额(元)", "不含税金额(元)"};
String[] columns3 = {"tempId", "type", "category", "name", "unit", "amount", "price", "taxRate", "totalTaxInclude", "totalTaxExclude"};
String[] headers3 = {"序号", "大类", "类别", "名称", "单位", "数量", "单价", "税率(%)", "含税总金额(元)", "不含税金额(元)", "税金(元)"};
String[] columns3 = {"tempId", "type", "category", "name", "unit", "amount", "price", "taxRate", "totalTaxInclude", "totalTaxExclude", "totalTax"};
exportExcelUtils.exportCostDetailExcel(headers3, columns3, project, budgetBean, budgetCostDetail, costTotalAmount, procurementMap, "yyyy-MM-dd", 0, "采购成本明细表", outputStream);
//项目管理成本明细
List<ProjectBudgetCostProjectManageDetail> budgetCostProjectManageDetail = projectBudgetService.getBudgetCostProjectManageDetail(project);
@ -296,7 +296,7 @@ public class ProjectController extends BaseController {
rates.add(projectBudgetIncomeDetail.getTaxRate().toPlainString());
}
}
if (incomeTaxSb.lastIndexOf(",") == incomeTaxSb.length() - 1) {
if (incomeTaxSb.lastIndexOf(",") > 0 && incomeTaxSb.lastIndexOf(",") == incomeTaxSb.length() - 1) {
model.put("incomeTaxRates", incomeTaxSb.substring(0, incomeTaxSb.length() - 2));
} else {
model.put("incomeTaxRates", incomeTaxSb.toString());
@ -313,7 +313,7 @@ public class ProjectController extends BaseController {
rates2.add(projectBudgetCostDetail.getTaxRate().toPlainString());
}
}
if (costTaxSb.lastIndexOf(",") == costTaxSb.length() - 1) {
if (costTaxSb.lastIndexOf(",") > 0 && costTaxSb.lastIndexOf(",") == costTaxSb.length() - 1) {
model.put("costTaxRates", costTaxSb.substring(0, costTaxSb.length() - 2));
} else {
model.put("costTaxRates", costTaxSb.toString());

View File

@ -3,6 +3,7 @@ package cn.palmte.work.model;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
/**
@ -17,6 +18,11 @@ public class MonthlySettle {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GenericGenerator(name = "persistenceGenerator", strategy = "increment")
private int id;
/**
*
*/
@Column(name = "month")
private String month;
/**
*
*/
@ -40,32 +46,32 @@ public class MonthlySettle {
*
*/
@Column(name = "contract_amount")
private String contractAmount;
private BigDecimal contractAmount;
/**
*
*/
@Column(name = "total_collect")
private String totalCollect;
private BigDecimal totalCollect;
/**
*
*/
@Column(name = "total_purchased_paid")
private String totalPurchasedPaid;
private BigDecimal totalPurchasedPaid;
/**
*
*/
@Column(name = "total_purchased_unpaid")
private String totalPurchasedUnpaid;
private BigDecimal totalPurchasedUnpaid;
/**
*
*/
@Column(name = "time_out_amount")
private String timeOutAmount;
private BigDecimal timeOutAmount;
/**
*
*/
@Column(name = "total_bill_amount")
private String totalBillAmount;
private BigDecimal totalBillAmount;
/**
*
*/
@ -107,7 +113,7 @@ public class MonthlySettle {
*
*/
@Column(name = "collect_amount")
private String collectAmount;
private BigDecimal collectAmount;
/**
*
*/
@ -118,12 +124,12 @@ public class MonthlySettle {
*
*/
@Column(name = "collect_actual_amount")
private String collectActualAmount;
private BigDecimal collectActualAmount;
/**
*
*/
@Column(name = "uncollect_actual_amount")
private String uncollectActualAmount;
private BigDecimal uncollectActualAmount;
/**
*
*/
@ -149,12 +155,12 @@ public class MonthlySettle {
*
*/
@Column(name = "cal_col_amount")
private String calColAmount;
private BigDecimal calColAmount;
/**
*
*/
@Column(name = "uncal_col_amount")
private String uncalColAmount;
private BigDecimal uncalColAmount;
public int getId() {
return id;
@ -164,6 +170,14 @@ public class MonthlySettle {
this.id = id;
}
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public String getProjectNo() {
return projectNo;
}
@ -196,51 +210,51 @@ public class MonthlySettle {
this.projectName = projectName;
}
public String getContractAmount() {
public BigDecimal getContractAmount() {
return contractAmount;
}
public void setContractAmount(String contractAmount) {
public void setContractAmount(BigDecimal contractAmount) {
this.contractAmount = contractAmount;
}
public String getTotalCollect() {
public BigDecimal getTotalCollect() {
return totalCollect;
}
public void setTotalCollect(String totalCollect) {
public void setTotalCollect(BigDecimal totalCollect) {
this.totalCollect = totalCollect;
}
public String getTotalPurchasedPaid() {
public BigDecimal getTotalPurchasedPaid() {
return totalPurchasedPaid;
}
public void setTotalPurchasedPaid(String totalPurchasedPaid) {
public void setTotalPurchasedPaid(BigDecimal totalPurchasedPaid) {
this.totalPurchasedPaid = totalPurchasedPaid;
}
public String getTotalPurchasedUnpaid() {
public BigDecimal getTotalPurchasedUnpaid() {
return totalPurchasedUnpaid;
}
public void setTotalPurchasedUnpaid(String totalPurchasedUnpaid) {
public void setTotalPurchasedUnpaid(BigDecimal totalPurchasedUnpaid) {
this.totalPurchasedUnpaid = totalPurchasedUnpaid;
}
public String getTimeOutAmount() {
public BigDecimal getTimeOutAmount() {
return timeOutAmount;
}
public void setTimeOutAmount(String timeOutAmount) {
public void setTimeOutAmount(BigDecimal timeOutAmount) {
this.timeOutAmount = timeOutAmount;
}
public String getTotalBillAmount() {
public BigDecimal getTotalBillAmount() {
return totalBillAmount;
}
public void setTotalBillAmount(String totalBillAmount) {
public void setTotalBillAmount(BigDecimal totalBillAmount) {
this.totalBillAmount = totalBillAmount;
}
@ -300,11 +314,11 @@ public class MonthlySettle {
this.collectRequiredTime = collectRequiredTime;
}
public String getCollectAmount() {
public BigDecimal getCollectAmount() {
return collectAmount;
}
public void setCollectAmount(String collectAmount) {
public void setCollectAmount(BigDecimal collectAmount) {
this.collectAmount = collectAmount;
}
@ -316,19 +330,19 @@ public class MonthlySettle {
this.collectActualTime = collectActualTime;
}
public String getCollectActualAmount() {
public BigDecimal getCollectActualAmount() {
return collectActualAmount;
}
public void setCollectActualAmount(String collectActualAmount) {
public void setCollectActualAmount(BigDecimal collectActualAmount) {
this.collectActualAmount = collectActualAmount;
}
public String getUncollectActualAmount() {
public BigDecimal getUncollectActualAmount() {
return uncollectActualAmount;
}
public void setUncollectActualAmount(String uncollectActualAmount) {
public void setUncollectActualAmount(BigDecimal uncollectActualAmount) {
this.uncollectActualAmount = uncollectActualAmount;
}
@ -364,19 +378,19 @@ public class MonthlySettle {
this.riskWarning = riskWarning;
}
public String getCalColAmount() {
public BigDecimal getCalColAmount() {
return calColAmount;
}
public void setCalColAmount(String calColAmount) {
public void setCalColAmount(BigDecimal calColAmount) {
this.calColAmount = calColAmount;
}
public String getUncalColAmount() {
public BigDecimal getUncalColAmount() {
return uncalColAmount;
}
public void setUncalColAmount(String uncalColAmount) {
public void setUncalColAmount(BigDecimal uncalColAmount) {
this.uncalColAmount = uncalColAmount;
}
}

View File

@ -9,6 +9,9 @@ import org.springframework.data.jpa.repository.Query;
*/
public interface MonthlySettleRepository extends JpaRepository<MonthlySettle, Integer> {
@Query(value = "select * from monthly_settle where month = ?1 and project_name = ?2 limit 1", nativeQuery = true)
MonthlySettle findByMonthAndProjectName(String time, String projectName);
// @Query(value = "select * from monthly_settle where id = ?1 order by month desc limit 1", nativeQuery = true)
// MonthlySettle findLatest(int id);
}

View File

@ -1,15 +1,24 @@
package cn.palmte.work.service;
import cn.palmte.work.bean.ResponseMsg;
import cn.palmte.work.bean.StatusEnum;
import cn.palmte.work.controller.backend.MonthlySettleController;
import cn.palmte.work.model.MonthlySettle;
import cn.palmte.work.model.*;
import cn.palmte.work.utils.DateKit;
import cn.palmte.work.utils.InterfaceUtil;
import cn.palmte.work.utils.StrKit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import top.jfunc.common.db.QueryHelper;
import top.jfunc.common.db.bean.Page;
import top.jfunc.common.db.utils.Pagination;
import top.jfunc.common.utils.StrUtil;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
@ -20,15 +29,331 @@ import java.util.concurrent.ConcurrentHashMap;
public class MonthlySettleService {
private static final Logger logger = LoggerFactory.getLogger(MonthlySettleController.class);
@Autowired
private MonthlySettleRepository monthlySettleRepository;
@Autowired
private MonthlySettleRepositoryCustom monthlySettleRepositoryCustom;
@Autowired
private Pagination pagination;
public Page<MonthlySettle> list(Map<String, String> searchInfo, int pageNumber, int pageSize) {
return null;
QueryHelper queryHelper = getQueryHelper(searchInfo);
return pagination.paginate(queryHelper.getSql(), MonthlySettle.class,pageNumber,pageSize);
}
public String check(Collection<Map> maps) {
return null;
@Transactional(rollbackFor = Exception.class)
public ResponseMsg check(Collection<Map> excelMap, String date) {
int successCount = 0;
int errorCount = 0;
List<String> errorList = new ArrayList<>();
List<MonthlySettle> monthlySettleList = new ArrayList<>();
Set<String> projectNameSet = new HashSet<>();
for (Map m : excelMap) {
try {
final Object o1 = m.get("项目编号");
if (o1 == null || StrKit.isBlank(o1.toString())) {
throw new Exception("项目编号不能为空");
}
final Object o2 = m.get("最终业主");
if (o2 == null || StrKit.isBlank(o2.toString())) {
throw new Exception("最终业主不能为空");
}
final Object o3 = m.get("合同方");
if (o3 == null || StrKit.isBlank(o3.toString())) {
throw new Exception("合同方不能为空");
}
final Object o4 = m.get("项目名称");
if (o4 == null || StrKit.isBlank(o4.toString())) {
throw new Exception("项目名称不能为空");
}
String projectName = o4.toString();
MonthlySettle old = monthlySettleRepository.findByMonthAndProjectName(date, projectName);
if (old != null) {
throw new Exception(o4 + " " + date + "已存在");
}
if (projectNameSet.contains(projectName)) {
throw new Exception(o4 + " " + date + "重复");
}
final Object o5 = m.get("合同金额");
if (o5 == null || StrKit.isBlank(o5.toString())) {
throw new Exception("合同金额不能为空");
}
final Object o6 = m.get("累计已收款");
if (o6 == null || StrKit.isBlank(o6.toString())) {
throw new Exception("累计已收款不能为空");
}
final Object o7 = m.get("已采购累计付款");
if (o7 == null || StrKit.isBlank(o7.toString())) {
throw new Exception("已采购累计付款不能为空");
}
final Object o8 = m.get("已采购累计未付款");
if (o8 == null || StrKit.isBlank(o8.toString())) {
throw new Exception("已采购累计未付款不能为空");
}
final Object o9 = m.get("超期垫资金额");
if (o9 == null || StrKit.isBlank(o9.toString())) {
throw new Exception("超期垫资金额不能为空");
}
final Object o10 = m.get("销售累计开票金额");
if (o10 == null || StrKit.isBlank(o10.toString())) {
throw new Exception("销售累计开票金额不能为空");
}
final Object o11 = m.get("合同编号");
if (o11 == null || StrKit.isBlank(o11.toString())) {
throw new Exception("合同编号不能为空");
}
final Object o12 = m.get("项目类型");
if (o12 == null || StrKit.isBlank(o12.toString())) {
throw new Exception("项目类型不能为空");
}
final Object o13 = m.get("合同签订时间");
if (o13 == null || StrKit.isBlank(o13.toString())) {
throw new Exception("合同签订时间不能为空");
}
if (!o13.toString().matches("\\d{4}-\\d{2}-\\d{2}")) {
throw new Exception(o4 + " " + date + "的合同签订时间不符合规范(yyyy-MM-dd)");
}
final Object o14 = m.get("销售经理");
if (o14 == null || StrKit.isBlank(o14.toString())) {
throw new Exception("销售经理不能为空");
}
final Object o15 = m.get("项目经理");
if (o15 == null || StrKit.isBlank(o15.toString())) {
throw new Exception("项目经理不能为空");
}
final Object o16 = m.get("收款节点");
if (o16 == null || StrKit.isBlank(o16.toString())) {
throw new Exception("收款节点不能为空");
}
final Object o17 = m.get("收款要求时间");
if (o17 == null || StrKit.isBlank(o17.toString())) {
throw new Exception("收款要求时间不能为空");
}
if (!o17.toString().matches("\\d{4}-\\d{2}-\\d{2}")) {
throw new Exception(o4 + " " + date + "的收款要求时间不符合规范(yyyy-MM-dd)");
}
final Object o18 = m.get("收款金额");
if (o18 == null || StrKit.isBlank(o18.toString())) {
throw new Exception("收款金额不能为空");
}
final Object o19 = m.get("实际收款时间");
if (o19 == null || StrKit.isBlank(o19.toString())) {
throw new Exception("实际收款时间不能为空");
}
if (!o19.toString().matches("\\d{4}-\\d{2}-\\d{2}")) {
throw new Exception(o4 + " " + date + "的实际收款时间不符合规范(yyyy-MM-dd)");
}
final Object o20 = m.get("实际收款金额");
if (o20 == null || StrKit.isBlank(o20.toString())) {
throw new Exception("实际收款金额不能为空");
}
final Object o21 = m.get("实际欠收金额");
if (o21 == null || StrKit.isBlank(o21.toString())) {
throw new Exception("实际欠收金额不能为空");
}
final Object o22 = m.get("超期天数");
if (o22 == null || StrKit.isBlank(o22.toString())) {
throw new Exception("超期天数不能为空");
}
final Object o23 = m.get("到货证明");
if (o23 == null || StrKit.isBlank(o23.toString())) {
throw new Exception("到货证明不能为空");
}
final Object o24 = m.get("验收报告时间");
if (o24 == null || StrKit.isBlank(o24.toString())) {
throw new Exception("验收报告时间不能为空");
}
if (!o24.toString().matches("\\d{4}-\\d{2}-\\d{2}")) {
throw new Exception(o4 + " " + date + "的验收报告时间不符合规范(yyyy-MM-dd)");
}
final Object o25 = m.get("项目风险预警");
if (o25 == null || StrKit.isBlank(o25.toString())) {
throw new Exception("项目风险预警不能为空");
}
final Object o26 = m.get("已计收金额");
if (o26 == null || StrKit.isBlank(o26.toString())) {
throw new Exception("已计收金额不能为空");
}
final Object o27 = m.get("未计收金额");
if (o27 == null || StrKit.isBlank(o27.toString())) {
throw new Exception("未计收金额不能为空");
}
successCount++;
projectNameSet.add(projectName);
saveMonthlySettle(m, date, projectName, monthlySettleList);
} catch (Exception e) {
logger.error("", e);
errorCount++;
if (!e.getMessage().isEmpty()) {
errorList.add(e.getMessage());
}
}
}
monthlySettleRepository.save(monthlySettleList);
final ResponseMsg msg = ResponseMsg.buildSuccessMsg(String.format("成功:%d, 失败:%d", successCount, errorCount));
msg.setData(errorList);
return msg;
}
private void saveMonthlySettle(Map m, String date, String projectName, List<MonthlySettle> monthlySettleList) {
MonthlySettle settle = new MonthlySettle();
String key;
Object o1;
settle.setMonth(date);
key = "项目编号";
o1 = m.get(key);
settle.setProjectNo((String) o1);
key = "最终业主";
o1 = m.get(key);
settle.setOwner((String) o1);
key = "合同方";
o1 = m.get(key);
settle.setContractParty((String) o1);
key = "项目名称";
o1 = m.get(key);
settle.setProjectName((String) o1);
key = "合同金额";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setContractAmount(new BigDecimal((String) o1));
key = "累计已收款";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setTotalCollect(new BigDecimal((String) o1));
key = "已采购累计付款";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setTotalPurchasedPaid(new BigDecimal((String) o1));
key = "已采购累计未付款";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setTotalPurchasedUnpaid(new BigDecimal((String) o1));
key = "超期垫资金额";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setTimeOutAmount(new BigDecimal((String) o1));
key = "销售累计开票金额";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setTotalBillAmount(new BigDecimal((String) o1));
key = "合同编号";
o1 = m.get(key);
settle.setContractNo((String) o1);
key = "项目类型";
o1 = m.get(key);
settle.setProjectType((String) o1);
key = "合同签订时间";
o1 = m.get(key);
settle.setContractSignTime(DateKit.getDate((String) o1, DateKit.DATE_FORMAT));
key = "销售经理";
o1 = m.get(key);
settle.setSaleManager((String) o1);
key = "项目经理";
o1 = m.get(key);
settle.setProjectManager((String) o1);
key = "收款节点";
o1 = m.get(key);
settle.setCollectPoint((String) o1);
key = "收款要求时间";
o1 = m.get(key);
settle.setCollectRequiredTime(DateKit.getDate((String) o1, DateKit.DATE_FORMAT));
key = "收款金额";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setCollectAmount(new BigDecimal((String) o1));
key = "实际收款时间";
o1 = m.get(key);
settle.setCollectActualTime(DateKit.getDate((String) o1, DateKit.DATE_FORMAT));
key = "实际收款金额";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setCollectActualAmount(new BigDecimal((String) o1));
key = "实际欠收金额";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setUncollectActualAmount(new BigDecimal((String) o1));
key = "超期天数";
o1 = m.get(key);
settle.setTimeOutDay((String) o1);
key = "到货证明";
o1 = m.get(key);
settle.setProductCertificate((String) o1);
key = "验收报告时间";
o1 = m.get(key);
settle.setInspectionReportTime(DateKit.getDate((String) o1, DateKit.DATE_FORMAT));
key = "项目风险预警";
o1 = m.get(key);
settle.setRiskWarning((String) o1);
key = "已计收金额";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setCalColAmount(new BigDecimal((String) o1));
key = "未计收金额";
o1 = (m.get(key) == null || "".equals(m.get(key))) ? "0.00" : m.get(key);
settle.setUncalColAmount(new BigDecimal((String) o1));
monthlySettleList.add(settle);
}
public List<MonthlySettle> findOne(String id, String time, String projectName) {
return null;
List<MonthlySettle> list = new ArrayList<>();
MonthlySettle monthlySettle = monthlySettleRepository.findByMonthAndProjectName(time, projectName);
list.add(monthlySettle);
return list;
}
private QueryHelper getQueryHelper(Map<String, String> searchInfo) {
QueryHelper queryHelper = new QueryHelper("SELECT *","(select project_name as name, max(ms.month) as time from monthly_settle ms group by ms.project_name)","ms");
queryHelper.leftJoin("monthly_settle s", "ms.time = s.month and ms.name = s.project_name");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("projectNo")),"s.project_no LIKE ?", "%"+searchInfo.get("projectNo")+"%");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("name")),"s.name LIKE ?", "%"+searchInfo.get("name")+"%");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("owner")),"s.owner LIKE ?", "%"+searchInfo.get("owner")+"%");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("contractParty")),"s.contract_party LIKE ?", "%"+searchInfo.get("contractParty")+"%");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("contractNo")),"s.contract_no LIKE ?", "%"+searchInfo.get("contractNo")+"%");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("projectType")),"s.project_type LIKE ?", "%"+searchInfo.get("projectType")+"%");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("saleManager")),"s.sale_manager LIKE ?", "%"+searchInfo.get("saleManager")+"%");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("projectManager")),"s.project_manager LIKE ?", "%"+searchInfo.get("projectManager")+"%");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("timeOutDay")),"s.time_out_day LIKE ?", "%"+searchInfo.get("timeOutDay")+"%");
if(StrUtil.isNotEmpty(searchInfo.get("startTime"))){
String time = searchInfo.get("startTime") + " 00:00:00";
queryHelper.addCondition("s.start_time>=?", time);
}
if(StrUtil.isNotEmpty(searchInfo.get("endTime"))){
String time = searchInfo.get("endTime") + " 00:00:00";
queryHelper.addCondition("s.end_time<=?", time);
}
if(StrUtil.isNotEmpty(searchInfo.get("contractStartTime"))){
String time = searchInfo.get("contractStartTime") + " 00:00:00";
queryHelper.addCondition("s.contract_time>=?", time);
}
if(StrUtil.isNotEmpty(searchInfo.get("contractEndTime"))){
String time = searchInfo.get("contractEndTime") + " 00:00:00";
queryHelper.addCondition("s.contract_time<=?", time);
}
queryHelper.addDescOrderProperty("s.id");
return queryHelper;
}
}

View File

@ -195,6 +195,7 @@ function appendTrCost() {
'<td><input type="text" min="0.00" max="99.99" step="0.01" maxlength="5" class="number am-modal-prompt-input am-modal-prompt-input-cost input-changeable-tax-rate input-changeable-tax-rate-cost"></td>'+
'<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-cost input-changeable-total-tax-include input-changeable-total-tax-include-cost" readonly></td>'+
'<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-cost input-changeable-total-tax-exclude input-changeable-total-tax-exclude-cost" readonly></td>'+
'<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-cost input-changeable-total-tax input-changeable-total-tax-cost" readonly></td>'+
'<td><button type="button" style="margin-top: 10px" class="am-btn am-btn-danger am-btn-xs am-round am-modal-line-delete"><span class="am-icon-minus"></span></button></td>'+
'</tr>';
@ -261,6 +262,7 @@ function updateCostData(data, returnData) {
var serviceTaxExclude = 0;
var otherTaxInclude = 0;
var otherTaxExclude = 0;
var costTaxRates = "";
details.forEach(function (t, number, ts) {
if(t["type"] == "1"){
//设备类
@ -279,6 +281,7 @@ function updateCostData(data, returnData) {
otherTaxInclude += f2(t["totalTaxInclude"]);
otherTaxExclude += f2(t["totalTaxExclude"]);
}
costTaxRates += t["taxRate"] + "%,";
});
$("input[name='costPurchaseDeviceTaxInclude']").val(f2Fixed(deviceTaxInclude));
$("input[name='costPurchaseDeviceTaxExclude']").val(f2Fixed(deviceTaxExclude));
@ -310,6 +313,9 @@ function updateCostData(data, returnData) {
calCostInclude();
calCostTotalTax();
updateProjectContributionProfitRate();
if (costTaxRates.length > 0) {
$(".costTaxRates").text(costTaxRates.substr(0, costTaxRates.length - 1));
}
layuiAlert("保存成功");
$('#my-prompt-cost-detail').modal('close');

View File

@ -83,6 +83,7 @@ function updateIncomeData(data,returnData) {
var engineerTaxExclude = 0;
var serviceTaxInclude = 0;
var serviceTaxExclude = 0;
var incomeTaxRates = "";
incomeDetails.forEach(function (t, number, ts) {
if(t["type"] == "1"){
//设备类
@ -97,7 +98,9 @@ function updateIncomeData(data,returnData) {
serviceTaxInclude += f2(t["totalTaxInclude"]);
serviceTaxExclude += f2(t["totalTaxExclude"]);
}
incomeTaxRates += t["taxRate"] + "%,";
});
console.log("incomeTaxRates: " + incomeTaxRates);
$("input[name='incomeDeviceTaxInclude']").val(f2Fixed(deviceTaxInclude));
$("input[name='incomeDeviceTaxExclude']").val(f2Fixed(deviceTaxExclude));
$("input[name='incomeEngineerTaxInclude']").val(f2Fixed(engineerTaxInclude));
@ -115,6 +118,9 @@ function updateIncomeData(data,returnData) {
updateProjectContributionProfitRate();
if (incomeTaxRates.length > 0) {
$(".incomeTaxRates").text(incomeTaxRates.substr(0, incomeTaxRates.length - 1));
}
layuiAlert("保存成功");
$('#my-prompt-income-detail').modal('close');
@ -143,7 +149,7 @@ function appendTrIncome() {
' <td><input type="text" min="0.00" max="99.99" step="0.01" maxlength="5" class="number am-modal-prompt-input am-modal-prompt-input-income input-changeable-tax-rate input-changeable-tax-rate-income"></td>\n' +
' <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-include input-changeable-total-tax-include-income" readonly></td>\n' +
' <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-exclude input-changeable-total-tax-exclude-income" readonly></td>\n' +
' <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-exclude input-changeable-total-tax-income" readonly></td>\n' +
' <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax input-changeable-total-tax-income" readonly></td>\n' +
' <td><button type="button" style="margin-top: 10px" class="am-btn am-btn-danger am-btn-xs am-round am-modal-line-delete"><span class="am-icon-minus"></span></button></td>\n' +
' </tr>';
$("#incomeTotal").before(template);
@ -179,14 +185,17 @@ function bindIncomeTotal() {
updateAmount("input-changeable-amount-income", "input-changeable-total-amount-income");
updateTotal("input-changeable-total-tax-include-income", "input-changeable-total-total-tax-include-income");
updateTotal("input-changeable-total-tax-exclude-income", "input-changeable-total-total-tax-exclude-income");
updateTotal("input-changeable-total-tax-income", "input-changeable-total-total-tax-income");
});
//单价改变
$(".input-changeable-price-income").change(function () {
updateTotal("input-changeable-total-tax-include-income", "input-changeable-total-total-tax-include-income");
updateTotal("input-changeable-total-tax-exclude-income", "input-changeable-total-total-tax-exclude-income");
updateTotal("input-changeable-total-tax-income", "input-changeable-total-total-tax-income");
});
//税率改变
$(".input-changeable-tax-rate-income").change(function () {
updateTotal("input-changeable-total-tax-exclude-income", "input-changeable-total-total-tax-exclude-income");
updateTotal("input-changeable-total-tax-income", "input-changeable-total-total-tax-income");
});
}

View File

@ -265,6 +265,26 @@
</@defaultLayout.layout>
<script>
layui.use('laydate', function(){
var laydate = layui.laydate;
laydate.render({
elem: '#time',
type: 'month',
btns: ['confirm'],
trigger: 'click',
ready: function(){
console.log($(this.elem).val());
},
done: function() {
var time = $(this.elem).val();
console.log("time:" + time)
$("#pmsForm").attr("action","${base}/monthlySettle/infoByTime?listFrom=list&projectName=${monthlySettle.projectName}$time=" + time);
$("#pmsForm").submit();
}
});
});
/**
*导出数据
*/

View File

@ -196,28 +196,28 @@
<td>${list.projectType!}</td>
<td>${list.contractNo!}</td>
<td>${list.contractParty!}</td>
<td>${list.contractAmount!}</td>
<td>${list.contractSignTime!}</td>
<td>${Utils.format(list.contractAmount, "0.00")}</td>
<td>${(list.contractSignTime?string("yyyy-MM-dd"))!}</td>
<td>${list.owner!}</td>
<td>${list.totalCollect!}</td>
<td>${list.totalPurchasedPaid!}</td>
<td>${list.totalPurchasedUnpaid!}</td>
<td>${list.timeOutAmount!}</td>
<td>${list.totalBillAmount!}</td>
<td>${Utils.format(list.totalCollect, "0.00")}</td>
<td>${Utils.format(list.totalPurchasedPaid, "0.00")}</td>
<td>${Utils.format(list.totalPurchasedUnpaid, "0.00")}</td>
<td>${Utils.format(list.timeOutAmount, "0.00")}</td>
<td>${Utils.format(list.totalBillAmount, "0.00")}</td>
<td>${list.saleManager!}</td>
<td>${list.projectManager!}</td>
<td>${list.collectPoint!}</td>
<td>${list.collectRequiredTime!}</td>
<td>${list.collectAmount!}</td>
<td>${list.collectActualTime!}</td>
<td>${list.collectActualAmount!}</td>
<td>${list.uncollectActualAmount!}</td>
<td>${(list.collectRequiredTime?string("yyyy-MM-dd"))!}</td>
<td>${Utils.format(list.collectAmount, "0.00")}</td>
<td>${(list.collectActualTime?string("yyyy-MM-dd"))!}</td>
<td>${Utils.format(list.collectActualAmount, "0.00")}</td>
<td>${Utils.format(list.uncollectActualAmount, "0.00")}</td>
<td>${list.productCertificate!}</td>
<td>${list.riskWarning!}</td>
<td>${list.uncalColAmount!}</td>
<td>${list.calColAmount!}</td>
<td>${Utils.format(list.uncalColAmount, "0.00")}</td>
<td>${Utils.format(list.calColAmount, "0.00")}</td>
<td>${list.timeOutDay!}</td>
<td>${list.inspectionReportTime!}</td>
<td>${(list.inspectionReportTime?string("yyyy-MM-dd"))!}</td>
</tr>
</#list>
</tbody>

View File

@ -147,7 +147,7 @@
<#-- <div class="am-form-file am-text-xs">-->
<#-- <button type="button" class="am-btn am-btn-primary am-btn-sm">-->
<#-- <i class="am-icon-cloud-upload"></i> 上传附件-->
<#-- <i class="am-icon-cloud-upload"></i> 下载附件-->
<#-- </button>-->
<#-- <input id="fileupload_button_icon" type="file" name="files[]" multiple>-->
<#-- </div>-->
@ -632,7 +632,7 @@
<td></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-total-tax-include-income" value="${Utils.format(budgetBean.incomeTotalTaxInclude,'0')}" readonly></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-total-tax-exclude-income" value="${Utils.format(budgetBean.incomeTotalTaxExclude,'0')}" readonly></td>
<td></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-total-tax-income" value="${Utils.format(budgetBean.incomeTotalTax,'0')}" readonly></td>
<td></td>
</tr>
@ -717,7 +717,7 @@
<td></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-cost input-changeable-total-total-tax-include-cost" value="${Utils.format(budgetBean.costPurchaseTotalTaxInclude,'0')}" readonly></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-cost input-changeable-total-total-tax-exclude-cost" value="${Utils.format(budgetBean.costPurchaseTotalTaxExclude,'0')}" readonly></td>
<td></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-cost input-changeable-total-total-tax-cost" value="${Utils.format(budgetBean.costPurchaseTotalTax,'0')}" readonly></td>
<td></td>
</tr>
@ -986,7 +986,7 @@
<td><input type="text" class="number" name="incomeTotalTax" value="${Utils.format(budgetBean.incomeTotalTax,'0')}" required readonly title="此列累计"></td>
</tr>
</tbody>
(备注:本表所用税率分别为:${incomeTaxRates!})
(备注:本表所用税率为:<span class="incomeTaxRates">${incomeTaxRates!}</span>)
</table>
<span>成本</span>
<#-- <span class="am-text-primary"><a style="cursor: pointer" id="cost-detail">采购成本明细表</a></span>
@ -1059,7 +1059,7 @@
<td><input type="text" class="number" name="costTotalTax" value="${Utils.format(budgetBean.costTotalTax,'0')}" readonly required title="此列累计"></td>
</tr>
</tbody>
(备注:本表所用税率分别为:${costTaxRates!})
(备注:本表所用税率为:<span class="costTaxRates">${costTaxRates!}</span>)
</table>
<span>管理</span>
<#--<span class="am-text-primary budget-plan-detail"><a style="cursor: pointer">资金计划表</a></span>-->