diff --git a/src/main/java/cn/palmte/work/controller/backend/AccountController.java b/src/main/java/cn/palmte/work/controller/backend/AccountController.java index 78669a6..fa2a17c 100644 --- a/src/main/java/cn/palmte/work/controller/backend/AccountController.java +++ b/src/main/java/cn/palmte/work/controller/backend/AccountController.java @@ -220,20 +220,14 @@ public class AccountController extends BaseController { model.put("keywords", keywords); } - /** - * 导出 - * @param keywords - * @param model - * @param response - * @throws IOException - */ @RequestMapping("/export") - public void export(@RequestParam(value = "keywords",required = false) String keywords,Map<String, Object> model, - HttpServletResponse response) throws IOException { - // 初始化参数 - ConcurrentHashMap<String, String> searchInfo = getSearchInfo(keywords,model); - downloadHeader(response , Utils.generateExcelName("人员信息")); - accountService.exportExcel(response,searchInfo); + public void export(@RequestParam(value = "keywords",required = false) String keywords, HttpServletResponse httpServletResponse) throws IOException { + Map<String, String> searchInfo = getSearchInfo(keywords); + downloadHeader(httpServletResponse , Utils.generateExcelName("人员信息"), "application/octet-stream"); + String[] headers = {"工号", "手机号码", "姓名", "常驻地", "一级部门", "直接主管", "职位", "所属角色", "公司邮件地址"}; + String[] exportColumns = {"empCode", "telephone", "workLocation", "deptName", "directManager", "positionName", "roleName", "companyEmail"}; + ExportUtils.exportToExcel(headers, exportColumns, 1, 10000, + httpServletResponse.getOutputStream(), (pN, pS) -> accountService.getAdminList(searchInfo, pN, pS).getList()); } /** diff --git a/src/main/java/cn/palmte/work/controller/backend/ProfitMarginConfigController.java b/src/main/java/cn/palmte/work/controller/backend/ProfitMarginConfigController.java new file mode 100644 index 0000000..b12f2d7 --- /dev/null +++ b/src/main/java/cn/palmte/work/controller/backend/ProfitMarginConfigController.java @@ -0,0 +1,44 @@ +package cn.palmte.work.controller.backend; + +import cn.palmte.work.model.ProfitMarginConfig; +import cn.palmte.work.model.ProfitMarginConfigRepository; +import cn.palmte.work.service.ProfitMarginConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import java.util.Map; + +@Controller +@RequestMapping("/profitMarginConfig") +public class ProfitMarginConfigController extends BaseController{ + + @Autowired + private ProfitMarginConfigService profitMarginConfigService; + + @Autowired + private ProfitMarginConfigRepository profitMarginConfigRepository; + + /** + * 跳转到编辑页面 + */ + @RequestMapping("/edit") + public String edit(Map<String, Object> model) { + ProfitMarginConfig profitMarginConfig = profitMarginConfigRepository.findOne(1); + model.put("profitMarginConfig", profitMarginConfig); + return "/admin/profit_marfin_config_input"; + } + + @PostMapping(value = "/save") + public String save(ProfitMarginConfig profitMarginConfig,Map<String, Object> model){ + try { + profitMarginConfigService.saveOrUpdate(profitMarginConfig); + } catch (Exception e) { + model.put("errorMessage", e.getMessage()); + return "/common/error"; + } + return "redirect:/profitMarginConfig/edit"; + } +} diff --git a/src/main/java/cn/palmte/work/model/AdminRepositoryCustom.java b/src/main/java/cn/palmte/work/model/AdminRepositoryCustom.java index b52aec4..9ad45b5 100644 --- a/src/main/java/cn/palmte/work/model/AdminRepositoryCustom.java +++ b/src/main/java/cn/palmte/work/model/AdminRepositoryCustom.java @@ -4,6 +4,7 @@ import cn.palmte.work.model.SysRole; import top.jfunc.common.db.bean.Page; import java.util.List; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public interface AdminRepositoryCustom { @@ -30,7 +31,7 @@ public interface AdminRepositoryCustom { * @param pageNum * @return */ - Page getAdminList(ConcurrentHashMap<String, String> searchInfo, int pageSize, int pageNum); + Page getAdminList(Map<String, String> searchInfo, int pageSize, int pageNum); /** * 根据用户ID查询用户信息 diff --git a/src/main/java/cn/palmte/work/model/AdminRepositoryImpl.java b/src/main/java/cn/palmte/work/model/AdminRepositoryImpl.java index 3534054..bea066d 100644 --- a/src/main/java/cn/palmte/work/model/AdminRepositoryImpl.java +++ b/src/main/java/cn/palmte/work/model/AdminRepositoryImpl.java @@ -116,7 +116,7 @@ public class AdminRepositoryImpl implements AdminRepositoryCustom { } @Override - public Page<Admin> getAdminList(ConcurrentHashMap<String, String> searchInfo, int pageSize, int pageNum) { + public Page<Admin> getAdminList(Map<String, String> searchInfo, int pageSize, int pageNum) { Page<Admin> page = new Page(pageNum, pageSize); int thisPage = (pageNum - 1) * pageSize; String sql = getSelect() + getSqlExceptSelect(searchInfo) + " limit " + thisPage + "," + pageSize; @@ -158,7 +158,7 @@ public class AdminRepositoryImpl implements AdminRepositoryCustom { return select; } - public String getSqlExceptSelect(ConcurrentHashMap<String, String> searchInfo) { + public String getSqlExceptSelect(Map<String, String> searchInfo) { StringBuffer sqlExceptSelect = new StringBuffer(" from sys_user u LEFT JOIN sys_user_role ur on u.id = ur.user_id LEFT JOIN sys_role r on r.id = ur.role_id "); Admin admin = InterfaceUtil.getAdmin(); diff --git a/src/main/java/cn/palmte/work/model/ProfitMarginConfig.java b/src/main/java/cn/palmte/work/model/ProfitMarginConfig.java new file mode 100644 index 0000000..ec8f6e3 --- /dev/null +++ b/src/main/java/cn/palmte/work/model/ProfitMarginConfig.java @@ -0,0 +1,51 @@ +package cn.palmte.work.model; + +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; + +/** + * 利润率配置 + */ +@Entity +@Table(name = "profit_margin_config") +public class ProfitMarginConfig { + + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @GenericGenerator(name = "persistenceGenerator", strategy = "increment") + private Integer id; + + @Column(name = "year_profit_margin") + private String yearProfitMargin; + + @Column(name = "threshold_value") + private String thresholdValue; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getYearProfitMargin() { + return yearProfitMargin; + } + + public void setYearProfitMargin(String yearProfitMargin) { + this.yearProfitMargin = yearProfitMargin; + } + + public String getThresholdValue() { + return thresholdValue; + } + + public void setThresholdValue(String thresholdValue) { + this.thresholdValue = thresholdValue; + } +} \ No newline at end of file diff --git a/src/main/java/cn/palmte/work/model/ProfitMarginConfigRepository.java b/src/main/java/cn/palmte/work/model/ProfitMarginConfigRepository.java new file mode 100644 index 0000000..cb97941 --- /dev/null +++ b/src/main/java/cn/palmte/work/model/ProfitMarginConfigRepository.java @@ -0,0 +1,7 @@ +package cn.palmte.work.model; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProfitMarginConfigRepository extends JpaRepository<ProfitMarginConfig,Integer> { + +} diff --git a/src/main/java/cn/palmte/work/service/AccountService.java b/src/main/java/cn/palmte/work/service/AccountService.java index cfa3725..5dfa6dd 100644 --- a/src/main/java/cn/palmte/work/service/AccountService.java +++ b/src/main/java/cn/palmte/work/service/AccountService.java @@ -55,7 +55,7 @@ public class AccountService { @Autowired private UserPositionRepository userPositionRepository; - public Page<Admin> getAdminList(ConcurrentHashMap<String, String> searchInfo, int pageSize, int pageNum) { + public Page<Admin> getAdminList(Map<String, String> searchInfo, int pageSize, int pageNum) { Page<Admin> adminList = adminRepositoryImpl.getAdminList(searchInfo, pageSize, pageNum); return adminList; } @@ -255,13 +255,6 @@ public class AccountService { return false; } - public void exportExcel(HttpServletResponse response, ConcurrentHashMap<String, String> searchInfo) throws IOException { - String[] headers = {"工号", "手机号码", "姓名", "常驻地", "一级部门", "直接主管", "职位", "所属角色", "公司邮件地址"}; - String[] exportColumns = {"empCode", "telephone", "workLocation", "deptName", "directManager", "positionName", "roleName", "companyEmail"}; - ExportUtils.exportToExcel(headers, exportColumns, 1, 5000, - response.getOutputStream(), (pN, pS) -> getAdminList(searchInfo, pN, pS).getList()); - } - public ResponseMsg check(Collection<Map> maps) { diff --git a/src/main/java/cn/palmte/work/service/ProfitMarginConfigService.java b/src/main/java/cn/palmte/work/service/ProfitMarginConfigService.java new file mode 100644 index 0000000..20ebf42 --- /dev/null +++ b/src/main/java/cn/palmte/work/service/ProfitMarginConfigService.java @@ -0,0 +1,21 @@ +package cn.palmte.work.service; + +import cn.palmte.work.model.ProfitMarginConfig; +import cn.palmte.work.model.ProfitMarginConfigRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ProfitMarginConfigService { + + @Autowired + private ProfitMarginConfigRepository profitMarginConfigRepository; + + + public void saveOrUpdate(ProfitMarginConfig profitMarginConfig) { + ProfitMarginConfig obj = profitMarginConfigRepository.findOne(1); + obj.setThresholdValue(profitMarginConfig.getThresholdValue()); + obj.setYearProfitMargin(profitMarginConfig.getYearProfitMargin()); + profitMarginConfigRepository.saveAndFlush(obj); + } +} diff --git a/src/main/resources/static/img/logo.png b/src/main/resources/static/img/logo.png index 49b1e27..c794266 100644 Binary files a/src/main/resources/static/img/logo.png and b/src/main/resources/static/img/logo.png differ diff --git a/src/main/resources/templates/admin/profit_marfin_config_input.ftl b/src/main/resources/templates/admin/profit_marfin_config_input.ftl new file mode 100644 index 0000000..d36d5f6 --- /dev/null +++ b/src/main/resources/templates/admin/profit_marfin_config_input.ftl @@ -0,0 +1,155 @@ +<#assign base=request.contextPath /> +<#import "../common/defaultLayout.ftl" as defaultLayout> +<@defaultLayout.layout> + <link rel="stylesheet" href="../assets/css/amazeui.min.css"/> + <link rel="stylesheet" href="../assets/css/amazeui.switch.css"/> + + <div class="admin-content"> + <div class="admin-content-body"> + <div class="am-cf am-padding"> + <div class="am-fl am-cf"><strong class="am-text-primary am-text-lg">配置管理</strong> /项目利润率配置</div> + </div> + <form method="post" class="am-form" id="tmpForm" action="${base}/profitMarginConfig/save"> + <!--选项卡(tabs)begin--> + <div class="am-tabs am-margin" data-am-tabs> + <ul class="am-tabs-nav am-nav am-nav-tabs"> + <li class="am-active"> + + </li> + </ul> + <div class="am-tabs-bd"> + <div class="am-tab-panel am-fade am-in am-active" id="tab1"> + <input name="tId" id="tId" type="hidden" value="${tId!}"/> + <!--验证表单元素(validate) begin--> + <!--input begin--> + <div class="am-g am-form-group am-margin-top" id="threshold"> + <div class="am-u-sm-4 am-u-md-2 am-text-right"> + <span style="color: red;">*</span> + 项目贡献利润率阀值: + </div> + <div class="am-u-sm-6 am-u-md-6"> + <input name="thresholdValue" class="js-ajax-validate" + data-validate-async data-validation-message="请输入项目贡献利润率阀值" + type="number" step="0.01" id="thresholdValue" + value="${profitMarginConfig.thresholdValue!}" minlength="1" + maxlength="4" oninput="if(value.length>4)value=value.slice(0,4)" + placeholder="请输入项目贡献利润率阀值" required/> + <p>注:请注意保留小数点后两位</p> + </div> + <div class="am-u-sm-2 am-u-md-4 input-msg"></div> + </div> + + <div class="am-g am-form-group am-margin-top" id="threshold"> + <div class="am-u-sm-4 am-u-md-2 am-text-right"> + <span style="color: red;">*</span> + 项目年利润率: + </div> + <div class="am-u-sm-6 am-u-md-6"> + <input name="yearProfitMargin" class="js-ajax-validate" + data-validate-async data-validation-message="请输入项目年利润率" + type="number" step="0.01" id="yearProfitMargin" + value="${profitMarginConfig.yearProfitMargin!}" minlength="1" + maxlength="4" oninput="if(value.length>4)value=value.slice(0,4)" + placeholder="请输入项目年利润率" required/> + <p>注:请注意保留小数点后两位</p> + </div> + <div class="am-u-sm-2 am-u-md-4 input-msg"></div> + </div> + </div> + </div> + </div> + + <!--选项卡(tabs)end--> + <div class="am-margin"> + <button type="submit" class="am-btn am-btn-primary am-btn-xs">提交保存</button> + <#--<button type="button" class="am-btn am-btn-warning am-btn-xs" + onclick="javascript:history.go(-1);">返回上一级 + </button>--> + </div> + </form> + </div> + </div> + +</@defaultLayout.layout> +<script src="../assets/js/amazeui.switch.js"></script> +<script type="text/javascript"> + var urlBase = "${base}"; + var url; + + $(function () { + /*表单验证:begin*/ + //自定义规则,用法:验证元素上加class="js-pattern-sort" + if ($.AMUI && $.AMUI.validator) { + $.AMUI.validator.patterns.sort = /^([0-9]+)$/; + } + $("#tmpForm").validator({ + // 域通过验证时回调 + onValid: function (validity) { + $(validity.field).closest('.am-form-group').find('.am-alert').hide(); + }, + // 域验证通过时添加的操作,通过该接口可定义各种验证提示 + markValid: function (validity) { + // this is Validator instance + var $field = $(validity.field); + //add by zxl,只对有required属性的字段进行验证 + if (typeof ($field.attr("required")) != "undefined") { + var options = this.options; + var $parent = $field.closest('.am-form-group'); + $field.addClass(options.validClass).removeClass(options.inValidClass); + + $parent.addClass('am-form-success').removeClass('am-form-error'); + + options.onValid.call(this, validity); + } + }, + // 验证出错时的回调, validity 对象包含相关信息,格式通 H5 表单元素的 validity 属性 + onInValid: function (validity) { + var $field = $(validity.field); + var $group = $field.closest('.am-form-group'); + var $alert = $group.find('.am-alert'); + // 使用自定义的提示信息 或 插件内置的提示信息 + var msg = $field.data('validationMessage') || this.getValidationMessage(validity); + + if (!$alert.length) { + $alert = $("<div class='am-alert am-alert-danger'></div>").hide().appendTo($group.find(".input-msg")); + } + console.log("onInValid : " + $field.val()); + $alert.html(msg).show(); + } + }); + /*表单验证:end*/ + }); + + +</script> +<style type="text/css"> + /*验证:提示信息样式 begin*/ + .am-alert-danger { + background-color: transparent; + border-color: transparent; + color: red; + } + + .am-alert { + margin-bottom: 1em; + padding: .625em; + background: transparent; + border: none; + border-radius: 0; + } + + /*验证:提示信息样式 end*/ +</style> + + + + + + + + + + + + +