diff --git a/src/main/java/cn/palmte/work/bean/CertaintyEnum.java b/src/main/java/cn/palmte/work/bean/CertaintyEnum.java new file mode 100644 index 0000000..c6eb3ef --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/CertaintyEnum.java @@ -0,0 +1,47 @@ +package cn.palmte.work.bean; + +/** + * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public enum CertaintyEnum { + PLAN_A(1,"A:基本确定中标,待签合同,合同签订中"), + PLAN_B(2,"B:客户产品参数、商务评分、商务资质引导成功"), + PLAN_C(3,"C:项目初期引导阶段"); + + private int certainty; + private String certaintyStr; + + private CertaintyEnum(int certainty, String certaintyStr) { + this.certainty = certainty; + this.certaintyStr = certaintyStr; + } + + public int getCertainty() { + return certainty; + } + + public void setCertainty(int certainty) { + this.certainty = certainty; + } + + public String getCertaintyStr() { + return certaintyStr; + } + + public void setCertaintyStr(String certaintyStr) { + this.certaintyStr = certaintyStr; + } + + public static CertaintyEnum parseCertainty(int certainty){ + if(certainty == 1){ + return PLAN_A; + } + if(certainty == 2){ + return PLAN_B; + } + if(certainty == 3){ + return PLAN_C; + } + throw new IllegalArgumentException("Unkown certainty:"+certainty); + } +} diff --git a/src/main/java/cn/palmte/work/bean/IsSecondEnum.java b/src/main/java/cn/palmte/work/bean/IsSecondEnum.java new file mode 100644 index 0000000..1e8b4b1 --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/IsSecondEnum.java @@ -0,0 +1,43 @@ +package cn.palmte.work.bean; + +/** + * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public enum IsSecondEnum { + PLAN_A(1,"是"), + PLAN_B(2,"否"); + + private int isSecond; + private String isSecondStr; + + private IsSecondEnum(int isSecond, String isSecondStr) { + this.isSecond = isSecond; + this.isSecondStr = isSecondStr; + } + + public int getIsSecond() { + return isSecond; + } + + public void setIsSecond(int isSecond) { + this.isSecond = isSecond; + } + + public String getIsSecondStr() { + return isSecondStr; + } + + public void setIsSecondStr(String isSecondStr) { + this.isSecondStr = isSecondStr; + } + + public static IsSecondEnum parseIsSecond(int isSecond){ + if(isSecond == 1){ + return PLAN_A; + } + if(isSecond == 2){ + return PLAN_B; + } + throw new IllegalArgumentException("Unkown isSecond:"+isSecond); + } +} diff --git a/src/main/java/cn/palmte/work/bean/ResolvePlanEnum.java b/src/main/java/cn/palmte/work/bean/ResolvePlanEnum.java new file mode 100644 index 0000000..025996b --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/ResolvePlanEnum.java @@ -0,0 +1,47 @@ +package cn.palmte.work.bean; + +/** + * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public enum ResolvePlanEnum { + PLAN_A(1,"公共服务(智慧交通、雪亮工程、治安防控体系等)"), + PLAN_B(2,"泛行业(智慧园区、智慧医疗、智慧工地等)"), + PLAN_C(3,"其他生态"); + + private int resolvePlan; + private String resolvePlanStr; + + private ResolvePlanEnum(int resolvePlan, String resolvePlanStr) { + this.resolvePlan = resolvePlan; + this.resolvePlanStr = resolvePlanStr; + } + + public int getResolvePlan() { + return resolvePlan; + } + + public void setResolvePlan(int resolvePlan) { + this.resolvePlan = resolvePlan; + } + + public String getResolvePlanStr() { + return resolvePlanStr; + } + + public void setResolvePlanStr(String resolvePlanStr) { + this.resolvePlanStr = resolvePlanStr; + } + + public static ResolvePlanEnum parseResolvePlan(int resolvePlan){ + if(resolvePlan == 1){ + return PLAN_A; + } + if(resolvePlan == 2){ + return PLAN_B; + } + if(resolvePlan == 3){ + return PLAN_C; + } + throw new IllegalArgumentException("Unkown resolvePlan:"+resolvePlan); + } +} diff --git a/src/main/java/cn/palmte/work/bean/SignTypeEnum.java b/src/main/java/cn/palmte/work/bean/SignTypeEnum.java new file mode 100644 index 0000000..782b677 --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/SignTypeEnum.java @@ -0,0 +1,39 @@ +package cn.palmte.work.bean; + +/** + * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public enum SignTypeEnum { + PLAN_A(1,"紫光汇智直接投标"); + + private int signType; + private String signTypeStr; + + private SignTypeEnum(int signType, String signTypeStr) { + this.signType = signType; + this.signTypeStr = signTypeStr; + } + + public int getSignType() { + return signType; + } + + public void setSignType(int signType) { + this.signType = signType; + } + + public String getSignTypeStr() { + return signTypeStr; + } + + public void setSignTypeStr(String signTypeStr) { + this.signTypeStr = signTypeStr; + } + + public static SignTypeEnum parseSignType(int signType){ + if(signType == 1){ + return PLAN_A; + } + throw new IllegalArgumentException("Unkown signType:"+signType); + } +} diff --git a/src/main/java/cn/palmte/work/bean/TypeEnum.java b/src/main/java/cn/palmte/work/bean/TypeEnum.java index 2f1bfcb..dd50ce7 100644 --- a/src/main/java/cn/palmte/work/bean/TypeEnum.java +++ b/src/main/java/cn/palmte/work/bean/TypeEnum.java @@ -6,7 +6,7 @@ package cn.palmte.work.bean; public enum TypeEnum { PROJECT_INTEGRATION(1,"工程集成类"), DEVICE_INTEGRATION(2,"设备集成类"), - STRATEGIC_PARTNER(3,"战略合作类"); + STRATEGIC_PARTNER(3,"工程集成类"); private int type; private String typeDesc; diff --git a/src/main/java/cn/palmte/work/bean/UnderwrittenModeEnum.java b/src/main/java/cn/palmte/work/bean/UnderwrittenModeEnum.java new file mode 100644 index 0000000..a2c8eac --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/UnderwrittenModeEnum.java @@ -0,0 +1,51 @@ +package cn.palmte.work.bean; + +/** + * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public enum UnderwrittenModeEnum { + PLAN_A(1,"A类-不垫资(战略合作)"), + PLAN_B(2,"B类-不垫资(背靠背)"), + PLAN_C(3,"C类-垫资(账期覆盖)"), + PLAN_D(4,"D类-垫资(账期不覆盖"); + + private int underwrittenMode; + private String underwrittenModeStr; + + private UnderwrittenModeEnum(int underwrittenMode, String underwrittenModeStr) { + this.underwrittenMode = underwrittenMode; + this.underwrittenModeStr = underwrittenModeStr; + } + + public int getUnderwrittenMode() { + return underwrittenMode; + } + + public void setUnderwrittenMode(int underwrittenMode) { + this.underwrittenMode = underwrittenMode; + } + + public String getUnderwrittenModeStr() { + return underwrittenModeStr; + } + + public void setUnderwrittenModeStr(String underwrittenModeStr) { + this.underwrittenModeStr = underwrittenModeStr; + } + + public static UnderwrittenModeEnum parseUnderwrittenMode(int underwrittenMode){ + if(underwrittenMode == 1){ + return PLAN_A; + } + if(underwrittenMode == 2){ + return PLAN_B; + } + if(underwrittenMode == 3){ + return PLAN_C; + } + if(underwrittenMode == 4){ + return PLAN_D; + } + throw new IllegalArgumentException("Unkown underwrittenMode:"+underwrittenMode); + } +} diff --git a/src/main/java/cn/palmte/work/controller/backend/MonthlySettleController.java b/src/main/java/cn/palmte/work/controller/backend/MonthlySettleController.java index 7e73273..b78ea75 100644 --- a/src/main/java/cn/palmte/work/controller/backend/MonthlySettleController.java +++ b/src/main/java/cn/palmte/work/controller/backend/MonthlySettleController.java @@ -1,8 +1,11 @@ package cn.palmte.work.controller.backend; 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.Utils; +import cn.palmte.work.utils.excel.AppendMore; import cn.palmte.work.utils.excel.ExcelLogs; import cn.palmte.work.utils.excel.ExcelUtil; import cn.palmte.work.utils.excel.ExportUtils; @@ -22,6 +25,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collection; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -37,6 +41,9 @@ public class MonthlySettleController extends BaseController { @Autowired private MonthlySettleService monthlySettleService; + @Autowired + private MonthlySettleRepository monthlySettleRepository; + @RequestMapping("/list") public String list(@RequestParam(value = KEYWORDS, required = false) String keywords, @RequestParam(value = PAGE_NUMBER, defaultValue = DEFAULT_PAGE_NUMBER) int pageNumber, @@ -46,7 +53,14 @@ public class MonthlySettleController extends BaseController { setModel(keywords, model); ConcurrentHashMap searchInfo = getSearchInfo(keywords, model); model.put("pager", monthlySettleService.list(searchInfo, pageNumber, pageSize)); - return "/admin/account_list"; + return "/admin/monthlySettle_list"; + } + + @RequestMapping("/info") + public String list(@RequestParam("id") int id, Map model) { + MonthlySettle monthlySettle = monthlySettleRepository.findOne(id); + model.put("monthlySettle", monthlySettle); + return "/admin/monthlySettle_info"; } private void setModel(@RequestParam(value = "keywords", required = false) String keywords, Map model) { @@ -57,18 +71,32 @@ public class MonthlySettleController extends BaseController { public void export(@RequestParam(value = "keywords", required = false) String keywords, HttpServletResponse httpServletResponse) throws IOException { Map searchInfo = getSearchInfo(keywords); downloadHeader(httpServletResponse, Utils.generateExcelName("人员信息"), "application/octet-stream"); - String[] headers = {"工号", "手机号码", "姓名", "常驻地", "一级部门", "直接主管", "职位", "角色名称", "公司邮件地址"}; - String[] exportColumns = {"userName", "telephone", "realName", "workLocation", "deptName", "directManager", "positionName", "roleName", "companyEmail"}; + String[] headers = {"项目编号", "项目名称", "项目类型", "合同编号", "合同方", "合同金额", "合同签订时间", "最终业主", "累计已收款", "已采购累计付款", "已采购累计未付款", "超期垫资金额", "销售累计开票金额", + "销售经理", "项目经理", "收款节点", "收款要求时间", "收款金额", "实际收款时间", "实际收款金额", "实际欠收金额", "到货证明", "项目风险预警", "已计收金额", "未计收金额", "超期天数", "验收报告时间"}; + String[] exportColumns = {"projectNo", "projectName", "projectType", "contractNo", "contractParty", "contractAmount", "contractSignTime", "owner", "totalCollect", + "totalPurchasedPaid", "totalPurchasedUnpaid", "timeOutAmount", "totalBillAmount", "saleManager", "projectManager", "collectPoint", "collectRequiredTime", "collectAmount", + "collectActualTime", "collectActualAmount", "uncollectActualAmount", "productCertificate", "riskWarning", "uncalColAmount", "calColAmount", "timeOutDay", "inspectionReportTime"}; ExportUtils.exportToExcel(headers, exportColumns, 1, 10000, httpServletResponse.getOutputStream(), (pN, pS) -> monthlySettleService.list(searchInfo, pN, pS).getList()); } + @RequestMapping("/exportSingle") + public void exportSingle(@RequestParam String id, @RequestParam String time, @RequestParam String projectName, HttpServletResponse httpServletResponse) throws IOException { + downloadHeader(httpServletResponse, Utils.generateExcelName("月度结算表明细"), "application/octet-stream"); + String[] headers = {"月份", "项目编号", "项目名称", "项目类型", "合同编号", "合同方", "合同金额", "合同签订时间", "最终业主", "累计已收款", "已采购累计付款", "已采购累计未付款", "超期垫资金额", "销售累计开票金额", + "销售经理", "项目经理", "收款节点", "收款要求时间", "收款金额", "实际收款时间", "实际收款金额", "实际欠收金额", "超期天数", "到货证明", "验收报告时间", "项目风险预警", "已计收金额", "未计收金额"}; + String[] exportColumns = {"month", "projectNo", "projectName", "projectType", "contractNo", "contractParty", "contractAmount", "contractSignTime", "owner", "totalCollect", + "totalPurchasedPaid", "totalPurchasedUnpaid", "timeOutAmount", "totalBillAmount", "saleManager", "projectManager", "collectPoint", "collectRequiredTime", "collectAmount", + "collectActualTime", "collectActualAmount", "uncollectActualAmount", "timeOutDay", "productCertificate", "inspectionReportTime", "riskWarning", "uncalColAmount", "calColAmount"}; + ExportUtils.exportToExcel(headers, exportColumns, 1, 10000, + httpServletResponse.getOutputStream(), (pageNumber, pageSize) -> monthlySettleService.findOne(id, time, projectName)); + } + /** * 模板下载 */ @RequestMapping("/template") public void template(HttpServletResponse response) throws Exception { - String[] headers = new String[]{"项目编号", "最终业主", "合同方", "项目名称", "合同金额", "累计已收款", "已采购累计付款", "已采购累计未付款", "超期垫资金额", "销售累计开票金额", "合同编号", "项目类型", "合同签订时间", "销售经理", "项目经理", "收款节点", "收款要求时间", "收款金额", "实际收款时间", "实际收款金额", "实际欠收金额", "超期天数", "到货证明", "验收报告时间", "项目风险预警", "已计收金额", "未计收金额"}; downloadHeader(response, Utils.generateExcelName("月度结算表导入模板")); diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java index 1c3c773..0361039 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -119,8 +119,11 @@ public class ProjectController extends BaseController { public void export(@RequestParam(value = "keywords", required = false) String keywords, HttpServletResponse httpServletResponse) throws IOException { Map searchInfo = getSearchInfo(keywords); downloadHeader(httpServletResponse, Utils.generateExcelName("项目报表"), "application/octet-stream"); - String[] headers = {"项目编号", "项目名称", "项目类型", "项目合同金额", "华智产品金额", "其他产品金额", "项目状态", "审核状态", "当前审核人", "项目创建者", "部门名称", "项目开始时间", "项目结束时间", "最后更新时间"}; - String[] exportColumns = {"projectNo", "name", "typeDesc", "contractRound", "huazhiRound", "ziguangRound", "statusDesc", "approveStatusDesc", "approveName", "creatorName", "deptName", "startDateYM", "endDateYM", "lastUpdateTime"}; + String[] headers = {"项目编号", "项目名称", "项目类型", "项目合同金额", "华智产品金额", "汇智产品金额", "华三产品金额", "其他产品金额", "项目状态", "垫资模式", "合作对象", "项目把握度", "行业场景应用", "客户名称", "终端客户名称", + "项目毛利", "项目毛利率", "项目负责人", "预计合同签订时间", "项目计划招标时间", "是否二次合作", "签单方式", "垫资利息", "垫资峰值", "审核状态", "当前审核人", "项目创建者", "部门名称", "项目开始时间", "项目结束时间", "最后更新时间"}; + String[] exportColumns = {"projectNo", "name", "typeDesc", "contractRound", "huazhiRound", "huizhiRound", "huasanRound", "ziguangRound", "statusDesc", "underwrittenModeDesc", "collaborator", + "certaintyStr", "industryScenario", "customer", "terminalCustomer", "grossProfit", "grossProfitMargin", "principal", "contractTime", "bidsTime", "isSecondStr", "signTypeStr", + "advanceInterestAmount", "advancePeakAmount", "approveStatusDesc", "approveName", "creatorName", "deptName", "startDateYM", "endDateYM", "lastUpdateTime"}; ExportUtils.exportToExcel(headers, exportColumns, 1, 10000, httpServletResponse.getOutputStream(), (pN, pS) -> projectService.list(searchInfo, pN, pS).getList()); } @@ -205,8 +208,6 @@ public class ProjectController extends BaseController { @RequestMapping("/add") public String add(Map model) { Dept one = deptService.findUserDept(InterfaceUtil.getAdmin()); - String projectNo = numSeqService.generate(); - model.put("projectNo", projectNo); model.put("dept", one); model.put("projectId",-1); return "admin/project_estimate_add"; diff --git a/src/main/java/cn/palmte/work/model/MonthlySettle.java b/src/main/java/cn/palmte/work/model/MonthlySettle.java index 90568a0..73aa1db 100644 --- a/src/main/java/cn/palmte/work/model/MonthlySettle.java +++ b/src/main/java/cn/palmte/work/model/MonthlySettle.java @@ -3,6 +3,7 @@ package cn.palmte.work.model; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; +import java.util.Date; /** * @author Yuanping Zhang @@ -79,7 +80,8 @@ public class MonthlySettle { * 合同签订时间 */ @Column(name = "contract_sign_time") - private String contractSignTime; + @Temporal(TemporalType.DATE) + private Date contractSignTime; /** * 销售经理 */ @@ -99,7 +101,8 @@ public class MonthlySettle { * 收款要求时间 */ @Column(name = "collect_required_time") - private String collectRequiredTime; + @Temporal(TemporalType.DATE) + private Date collectRequiredTime; /** * 收款金额 */ @@ -109,7 +112,8 @@ public class MonthlySettle { * 实际收款时间 */ @Column(name = "collect_actual_time") - private String collectActualTime; + @Temporal(TemporalType.DATE) + private Date collectActualTime; /** * 实际收款金额 */ @@ -134,7 +138,8 @@ public class MonthlySettle { * 验收报告时间 */ @Column(name = "inspection_report_time") - private String inspectionReportTime; + @Temporal(TemporalType.DATE) + private Date inspectionReportTime; /** * 项目风险预警 */ @@ -255,11 +260,11 @@ public class MonthlySettle { this.projectType = projectType; } - public String getContractSignTime() { + public Date getContractSignTime() { return contractSignTime; } - public void setContractSignTime(String contractSignTime) { + public void setContractSignTime(Date contractSignTime) { this.contractSignTime = contractSignTime; } @@ -287,11 +292,11 @@ public class MonthlySettle { this.collectPoint = collectPoint; } - public String getCollectRequiredTime() { + public Date getCollectRequiredTime() { return collectRequiredTime; } - public void setCollectRequiredTime(String collectRequiredTime) { + public void setCollectRequiredTime(Date collectRequiredTime) { this.collectRequiredTime = collectRequiredTime; } @@ -303,11 +308,11 @@ public class MonthlySettle { this.collectAmount = collectAmount; } - public String getCollectActualTime() { + public Date getCollectActualTime() { return collectActualTime; } - public void setCollectActualTime(String collectActualTime) { + public void setCollectActualTime(Date collectActualTime) { this.collectActualTime = collectActualTime; } @@ -343,11 +348,11 @@ public class MonthlySettle { this.productCertificate = productCertificate; } - public String getInspectionReportTime() { + public Date getInspectionReportTime() { return inspectionReportTime; } - public void setInspectionReportTime(String inspectionReportTime) { + public void setInspectionReportTime(Date inspectionReportTime) { this.inspectionReportTime = inspectionReportTime; } diff --git a/src/main/java/cn/palmte/work/model/MonthlySettleRepository.java b/src/main/java/cn/palmte/work/model/MonthlySettleRepository.java index 9da6d2f..875f9d9 100644 --- a/src/main/java/cn/palmte/work/model/MonthlySettleRepository.java +++ b/src/main/java/cn/palmte/work/model/MonthlySettleRepository.java @@ -1,6 +1,7 @@ package cn.palmte.work.model; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; /** * @author Yuanping Zhang @@ -8,4 +9,6 @@ import org.springframework.data.jpa.repository.JpaRepository; */ public interface MonthlySettleRepository extends JpaRepository { +// @Query(value = "select * from monthly_settle where id = ?1 order by month desc limit 1", nativeQuery = true) +// MonthlySettle findLatest(int id); } diff --git a/src/main/java/cn/palmte/work/model/Project.java b/src/main/java/cn/palmte/work/model/Project.java index c6d20c7..5c3e3d1 100644 --- a/src/main/java/cn/palmte/work/model/Project.java +++ b/src/main/java/cn/palmte/work/model/Project.java @@ -118,16 +118,16 @@ public class Project { */ @Column(name = "terminal_customer") private String terminalCustomer; -// /** -// * 垫资利息(元为单位) -// */ -// @Column(name = "advance_interest_amount") -// private BigDecimal advanceInterestAmount; -// /** -// * 垫资峰值 -// */ -// @Column(name = "advance_peak_amount") -// private BigDecimal advancePeakAmount; + /** + * 垫资利息(元为单位) + */ + @Column(name = "advance_interest_amount") + private BigDecimal advanceInterestAmount; + /** + * 垫资峰值 + */ + @Column(name = "advance_peak_amount") + private BigDecimal advancePeakAmount; /** * 合同金额 */ @@ -192,13 +192,13 @@ public class Project { @Column(name = "plan_end_str") private String planEndStr; - @Transient - private String underwrittenModeDesc; + @Column(name = "underwritten_mode_str") + private String underwrittenModeStr; @Column(name = "certainty") - private String certainty; + private Integer certainty; - @Transient + @Column(name = "certainty_str") private String certaintyStr; @Column(name = "gross_profit") @@ -223,21 +223,21 @@ public class Project { private Date bidsTime; @Column(name = "is_second") - private int isSecond; + private Integer isSecond; - @Transient + @Column(name = "is_second_str") private String isSecondStr; @Column(name = "sign_type") - private int signType; + private Integer signType; - @Transient + @Column(name = "sign_type_str") private String signTypeStr; @Column(name = "resolve_plan") - private int resolvePlan; + private Integer resolvePlan; - @Transient + @Column(name = "resolve_plan_str") private String resolvePlanStr; @Column(name = "main_contract_resolve_plan") @@ -255,6 +255,24 @@ public class Project { @Transient private String ziguangRound; + @Transient + private String huizhiRound; + + @Transient + private String huasanRound; + + @Transient + private String grossProfitRound; + + @Transient + private String grossProfitMarginRound; + + @Transient + private String advanceInterestAmountRound; + + @Transient + private String advancePeakAmountRound; + public int getId() { return id; } @@ -344,6 +362,46 @@ public class Project { return ApproveStatusEnum.parseApproveStatus(approveStatus).getApproveStatusDesc(); } + public int getApproveStatusEstimate() { + return approveStatusEstimate; + } + + public void setApproveStatusEstimate(int approveStatusEstimate) { + this.approveStatusEstimate = approveStatusEstimate; + } + + public int getApproveStatusBudget() { + return approveStatusBudget; + } + + public void setApproveStatusBudget(int approveStatusBudget) { + this.approveStatusBudget = approveStatusBudget; + } + + public int getApproveStatusSettle() { + return approveStatusSettle; + } + + public void setApproveStatusSettle(int approveStatusSettle) { + this.approveStatusSettle = approveStatusSettle; + } + + public int getApproveStatusFinal() { + return approveStatusFinal; + } + + public void setApproveStatusFinal(int approveStatusFinal) { + this.approveStatusFinal = approveStatusFinal; + } + + public int getApproveId() { + return approveId; + } + + public void setApproveId(int approveId) { + this.approveId = approveId; + } + public String getApproveName() { return approveName; } @@ -440,6 +498,22 @@ public class Project { this.terminalCustomer = terminalCustomer; } + public BigDecimal getAdvanceInterestAmount() { + return advanceInterestAmount; + } + + public void setAdvanceInterestAmount(BigDecimal advanceInterestAmount) { + this.advanceInterestAmount = advanceInterestAmount; + } + + public BigDecimal getAdvancePeakAmount() { + return advancePeakAmount; + } + + public void setAdvancePeakAmount(BigDecimal advancePeakAmount) { + this.advancePeakAmount = advancePeakAmount; + } + public BigDecimal getContractAmount() { return contractAmount; } @@ -528,53 +602,6 @@ public class Project { this.lastUpdateTime = lastUpdateTime; } - public int getApproveStatusEstimate() { - return approveStatusEstimate; - } - - public void setApproveStatusEstimate(int approveStatusEstimate) { - this.approveStatusEstimate = approveStatusEstimate; - } - - public int getApproveStatusBudget() { - return approveStatusBudget; - } - - public void setApproveStatusBudget(int approveStatusBudget) { - this.approveStatusBudget = approveStatusBudget; - } - - public int getApproveStatusSettle() { - return approveStatusSettle; - } - - public void setApproveStatusSettle(int approveStatusSettle) { - this.approveStatusSettle = approveStatusSettle; - } - - public int getApproveStatusFinal() { - return approveStatusFinal; - } - - public void setApproveStatusFinal(int approveStatusFinal) { - this.approveStatusFinal = approveStatusFinal; - } - - public int getApproveId() { - return approveId; - } - - public void setApproveId(int approveId) { - this.approveId = approveId; - } - - public String getStartDateYM(){ - return DatetimeUtils.toStr(this.startDate,"yyyy-MM"); - } - public String getEndDateYM(){ - return DatetimeUtils.toStr(this.endDate,"yyyy-MM"); - } - public String getPlanStartStr() { return planStartStr; } @@ -591,19 +618,19 @@ public class Project { this.planEndStr = planEndStr; } - public String getUnderwrittenModeDesc() { - return underwrittenModeDesc; + public String getUnderwrittenModeStr() { + return underwrittenModeStr; } - public void setUnderwrittenModeDesc(String underwrittenModeDesc) { - this.underwrittenModeDesc = underwrittenModeDesc; + public void setUnderwrittenModeStr(String underwrittenModeStr) { + this.underwrittenModeStr = underwrittenModeStr; } - public String getCertainty() { + public Integer getCertainty() { return certainty; } - public void setCertainty(String certainty) { + public void setCertainty(Integer certainty) { this.certainty = certainty; } @@ -671,6 +698,14 @@ public class Project { this.bidsTime = bidsTime; } + public Integer getIsSecond() { + return isSecond; + } + + public void setIsSecond(Integer isSecond) { + this.isSecond = isSecond; + } + public String getIsSecondStr() { return isSecondStr; } @@ -679,6 +714,14 @@ public class Project { this.isSecondStr = isSecondStr; } + public Integer getSignType() { + return signType; + } + + public void setSignType(Integer signType) { + this.signType = signType; + } + public String getSignTypeStr() { return signTypeStr; } @@ -687,6 +730,14 @@ public class Project { this.signTypeStr = signTypeStr; } + public Integer getResolvePlan() { + return resolvePlan; + } + + public void setResolvePlan(Integer resolvePlan) { + this.resolvePlan = resolvePlan; + } + public String getResolvePlanStr() { return resolvePlanStr; } @@ -735,27 +786,51 @@ public class Project { this.ziguangRound = ziguangRound; } - public int getIsSecond() { - return isSecond; + public String getHuizhiRound() { + return huizhiRound; } - public void setIsSecond(int isSecond) { - this.isSecond = isSecond; + public void setHuizhiRound(String huizhiRound) { + this.huizhiRound = huizhiRound; } - public int getSignType() { - return signType; + public String getHuasanRound() { + return huasanRound; } - public void setSignType(int signType) { - this.signType = signType; + public void setHuasanRound(String huasanRound) { + this.huasanRound = huasanRound; } - public int getResolvePlan() { - return resolvePlan; + public String getGrossProfitRound() { + return grossProfitRound; } - public void setResolvePlan(int resolvePlan) { - this.resolvePlan = resolvePlan; + public void setGrossProfitRound(String grossProfitRound) { + this.grossProfitRound = grossProfitRound; + } + + public String getGrossProfitMarginRound() { + return grossProfitMarginRound; + } + + public void setGrossProfitMarginRound(String grossProfitMarginRound) { + this.grossProfitMarginRound = grossProfitMarginRound; + } + + public String getAdvanceInterestAmountRound() { + return advanceInterestAmountRound; + } + + public void setAdvanceInterestAmountRound(String advanceInterestAmountRound) { + this.advanceInterestAmountRound = advanceInterestAmountRound; + } + + public String getAdvancePeakAmountRound() { + return advancePeakAmountRound; + } + + public void setAdvancePeakAmountRound(String advancePeakAmountRound) { + this.advancePeakAmountRound = advancePeakAmountRound; } } diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailBase.java b/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailBase.java index 6b4469e..d537f81 100644 --- a/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailBase.java +++ b/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailBase.java @@ -122,4 +122,14 @@ public class ProjectBudgetCostDetailBase { //不含税总金额=含税总金额/(1+税率) return totalTaxInclude.divide(taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(1)), 2, BigDecimal.ROUND_HALF_UP); } + + public BigDecimal getTotalTax(){ + BigDecimal totalTaxInclude = getTotalTaxInclude(); + if(null == totalTaxInclude || taxRate == null){ + return null; + } + + //不含税总金额=含税总金额/(1+税率) + return totalTaxInclude.multiply(taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP)).divide(taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(1)), 2, BigDecimal.ROUND_HALF_UP); + } } \ No newline at end of file diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailBase.java b/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailBase.java index 65dbae8..9f2d73b 100644 --- a/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailBase.java +++ b/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailBase.java @@ -113,4 +113,15 @@ public class ProjectBudgetIncomeDetailBase { BigDecimal bigDecimal = taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(1)); return totalTaxInclude.divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP); } + + public BigDecimal getTotalTax(){ + BigDecimal totalTaxInclude = getTotalTaxInclude(); + if(null == totalTaxInclude || taxRate == null){ + return null; + } + + //不含税总金额=含税总金额/(1+税率) + BigDecimal bigDecimal = taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(1)); + return totalTaxInclude.multiply(taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP)).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP); + } } \ No newline at end of file diff --git a/src/main/java/cn/palmte/work/service/MonthlySettleService.java b/src/main/java/cn/palmte/work/service/MonthlySettleService.java index 48a45b4..e82f50a 100644 --- a/src/main/java/cn/palmte/work/service/MonthlySettleService.java +++ b/src/main/java/cn/palmte/work/service/MonthlySettleService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import top.jfunc.common.db.bean.Page; import java.util.Collection; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -26,4 +27,8 @@ public class MonthlySettleService { public String check(Collection maps) { return null; } + + public List findOne(String id, String time, String projectName) { + return null; + } } diff --git a/src/main/java/cn/palmte/work/service/ProjectService.java b/src/main/java/cn/palmte/work/service/ProjectService.java index fb48a2c..ce2ec90 100644 --- a/src/main/java/cn/palmte/work/service/ProjectService.java +++ b/src/main/java/cn/palmte/work/service/ProjectService.java @@ -46,13 +46,16 @@ public class ProjectService { private ProjectInstanceService projectInstanceService; @Autowired private ProjectBudgetService projectBudgetService; + @Autowired + private NumSeqService numSeqService; private QueryHelper getQueryHelper(Map searchInfo) { /*"CASE p.type WHEN 1 THEN '工程集成类' WHEN 2 THEN '设备集成类' WHEN 3 THEN '战略合作类' ELSE '未知' AS typeDesc," + "CASE p.status WHEN 0 THEN '草稿' WHEN 1 THEN '项目创建' WHEN 5 THEN '概算完成' WHEN 10 THEN '预算完成' WHEN 15 THEN '结算中' WHEN 20 THEN '决算完成' ELSE '未知' AS statusDesc," + "CASE p.approve_status WHEN 0 THEN '待审核' WHEN 1 THEN '审核通过' WHEN 2 THEN '审核不通过' ELSE '未知' AS approveStatusDesc," + */ - QueryHelper queryHelper = new QueryHelper("SELECT p.*, FORMAT(p.contract_amount,2) as contractRound, FORMAT(p.huazhi_product_amount,2) as huazhiRound, FORMAT(p.ziguang_other_amount,2) as ziguangRound","project","p"); + QueryHelper queryHelper = new QueryHelper("SELECT p.*, FORMAT(p.contract_amount,2) as contractRound, FORMAT(p.huazhi_product_amount,2) as huazhiRound, FORMAT(p.huizhi_product_amount,2) as huizhiRound, FORMAT(p.huasan_product_amount,2) as huasanRound, FORMAT(p.ziguang_other_amount,2) as ziguangRound" + + ", FORMAT(p.gross_profit,2) as grossProfitRound, FORMAT(p.gross_profit_margin,2) as grossProfitMarginRound, FORMAT(p.advance_interest_amount,2) as advanceInterestAmountRound, FORMAT(p.advance_peak_amount,2) as advancePeakAmountRound","project","p"); if(StrUtil.isNotEmpty(searchInfo.get("status")) && !"-1".equals(searchInfo.get("status"))){ queryHelper.addCondition("p.status=?", Integer.parseInt(searchInfo.get("status"))); } @@ -151,7 +154,14 @@ public class ProjectService { public Project addProject(Project project, Admin admin, ApproveStatusEnum approveStatusEnum) { + String projectNo = numSeqService.generate(); + project.setProjectNo(projectNo); project.setTypeDesc(TypeEnum.parseType(project.getType()).getTypeDesc()); + project.setUnderwrittenModeStr(UnderwrittenModeEnum.parseUnderwrittenMode(project.getUnderwrittenMode()).getUnderwrittenModeStr()); + project.setCertaintyStr(CertaintyEnum.parseCertainty(project.getCertainty()).getCertaintyStr()); + project.setIsSecondStr(IsSecondEnum.parseIsSecond(project.getIsSecond()).getIsSecondStr()); + project.setSignTypeStr(SignTypeEnum.parseSignType(project.getSignType()).getSignTypeStr()); + project.setResolvePlanStr(ResolvePlanEnum.parseResolvePlan(project.getResolvePlan()).getResolvePlanStr()); project.setStatus(StatusEnum.ESTIMATE_ACCOUNTS.getStatus()); project.setStatusDesc(StatusEnum.ESTIMATE_ACCOUNTS.getStatusDesc()); project.setApproveStatusEstimate(approveStatusEnum.getApproveStatus()); @@ -188,6 +198,7 @@ public class ProjectService { projectInDb.setType(project.getType()); projectInDb.setTypeDesc(TypeEnum.parseType(project.getType()).getTypeDesc()); projectInDb.setUnderwrittenMode(project.getUnderwrittenMode()); + projectInDb.setUnderwrittenModeStr(UnderwrittenModeEnum.parseUnderwrittenMode(project.getUnderwrittenMode()).getUnderwrittenModeStr()); projectInDb.setStartDate(project.getStartDate()); projectInDb.setEndDate(project.getEndDate()); diff --git a/src/main/resources/static/assets/js/project_budget.js b/src/main/resources/static/assets/js/project_budget.js index ea23336..3c1affa 100644 --- a/src/main/resources/static/assets/js/project_budget.js +++ b/src/main/resources/static/assets/js/project_budget.js @@ -515,6 +515,7 @@ function bindChangeableInput() { $(this).parent().parent().find(".input-changeable-total-tax-include").val(f2Fixed(amount * price)); $(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100))); + $(this).parent().parent().find(".input-changeable-total-tax").val(f2Fixed(amount * price * taxRate /(100 + taxRate))); }); //单价改变 $(".input-changeable-price").change(function () { @@ -526,6 +527,7 @@ function bindChangeableInput() { $(this).parent().parent().find(".input-changeable-total-tax-include").val(f2Fixed(amount * price)); $(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100))); + $(this).parent().parent().find(".input-changeable-total-tax").val(f2Fixed(amount * price * taxRate /(100 + taxRate))); $(this).val(f5Price(price)); console.log("单价:" + $(this).val()); }); @@ -538,6 +540,7 @@ function bindChangeableInput() { console.log(amount, price, taxRate); $(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100))); + $(this).parent().parent().find(".input-changeable-total-tax").val(f2Fixed(amount * price * taxRate /(100 + taxRate))); }); } @@ -673,6 +676,9 @@ function updateCostDataIfUnsubmit(details) { calCostExclude(); calCostInclude(); + var costTotalTaxInclude = inputVal("costTotalTaxInclude"); + var costTotalTaxExclude = inputVal("costTotalTaxExclude"); + $("input[name='costTotalTax']").val(f2Fixed(f2(costTotalTaxInclude) - f2(costTotalTaxExclude))); updateProjectContributionProfitRate(); } @@ -712,6 +718,8 @@ function updateIncomeDataUnsubmit(incomeDetails) { $("input[name='incomeTotalTaxInclude']").val(f2Fixed(deviceTaxInclude+engineerTaxInclude+serviceTaxInclude)); $("input[name='incomeTotalTaxExclude']").val(f2Fixed(deviceTaxExclude+engineerTaxExclude+serviceTaxExclude)); + $("input[name='incomeTotalTax']").val(f2Fixed(deviceTaxInclude+engineerTaxInclude+serviceTaxInclude-(deviceTaxExclude+engineerTaxExclude+serviceTaxExclude))); + $("input[name='costCompanyManageTaxExclude']").val(f2Fixed(0.028*(deviceTaxInclude+engineerTaxInclude+serviceTaxInclude))); $(".input-total-title-sale-income-budget-plan").val($("input[name='incomeTotalTaxInclude']").val()); diff --git a/src/main/resources/static/assets/js/project_budget_income.js b/src/main/resources/static/assets/js/project_budget_income.js index 229da4e..f714a9b 100644 --- a/src/main/resources/static/assets/js/project_budget_income.js +++ b/src/main/resources/static/assets/js/project_budget_income.js @@ -143,6 +143,7 @@ function appendTrIncome() { ' \n' + ' \n' + ' \n' + + ' \n' + ' \n' + ' '; $("#incomeTotal").before(template); diff --git a/src/main/resources/templates/admin/monthly_settle_info.ftl b/src/main/resources/templates/admin/monthly_settle_info.ftl index bb9809e..0440af4 100644 --- a/src/main/resources/templates/admin/monthly_settle_info.ftl +++ b/src/main/resources/templates/admin/monthly_settle_info.ftl @@ -27,17 +27,17 @@
-
+
- +
-
+
- +
@@ -45,7 +45,7 @@
- +
@@ -53,180 +53,199 @@
- +
-
+
- +
-
+
- +
-
+
- - <#if (project.underwrittenMode) =1> - - <#elseif (project.underwrittenMode) =2> - - <#elseif (project.underwrittenMode) =3> - - <#elseif (project.underwrittenMode) =4> - - - +
-
+
- -
- -
- - -
- -
-
-
-
-
-
-
- -
-
-
- - <#if (project.certainty) =1> - - <#elseif (project.certainty) =2> - - <#elseif (project.certainty) =3> - - - +
-
+
- +
-
+
- <#-- --> - +
-
+
- <#----> - +
-
+
- +
-
+
- +
-
*
+
- +
-
+
- +
-
+
- +
-
+
- +
-
+
- +
-
*
+
- +
-
*
+
- + +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+
@@ -234,9 +253,29 @@ + + +
+ + +
+ + diff --git a/src/main/resources/templates/admin/monthly_settle_list.ftl b/src/main/resources/templates/admin/monthly_settle_list.ftl index 345b21d..c9b0b35 100644 --- a/src/main/resources/templates/admin/monthly_settle_list.ftl +++ b/src/main/resources/templates/admin/monthly_settle_list.ftl @@ -140,13 +140,9 @@
- -