目录
大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是 一款基于SpringBoot+Vue的装饰工程管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品 毕设 JavaWeb SSM SpringBoot等等项目框架,源码丰富,欢迎咨询。
一、项目介绍
如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个装饰工程管理系统——项目立项子系统,可以解决许多问题。
装饰工程管理系统——项目立项子系统可以实现合同信息管理,合同报价管理,客户管理,立项项目管理,公告信息管理,员工管理,预算报价管理,装饰材料总计划管理,装修进度管理等功能。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。
装饰工程管理系统——项目立项子系统可以提高装饰工程项目信息管理问题的解决效率,优化装饰工程项目信息处理流程,保证装饰工程项目信息数据的安全,它是一个非常可靠,非常安全的应用程序。
关键词:装饰工程管理系统——项目立项子系统;Mysql数据库;Java语言
二、开发环境
开发系统:Windows
JDK版本:Java JDK1.8(推荐)
开发工具:IDEA/MyEclipse(推荐IDEA)
数据库版本: mysql8.0(推荐)
数据库可视化工具: navicat
服务器:SpringBoot自带 apache tomcat
框架:springboot,vue
三、功能介绍
项目管理界面,立项项目信息包括项目名称,项目文件,项目类型等信息,管理员审核立项项目信息,下载立项项目文件,查询立项项目信息等。合同报价管理界面,合同报价信息包括合同详情,报价金额,合同标题等信息,管理员可以修改合同报价信息,删除需要删除的合同报价信息等。装饰材料总计划管理界面,装饰材料总计划信息包括材料名称,材料价格,材料采购数量,材料详情等信息,管理员可以修改装饰材料总计划信息,可以查询装饰材料总计划信息,可以删除装饰材料总计划信息等。客户管理界面,客户信息包括联系方式,姓名,性别等信息,管理员可以删除需要删除的客户信息,可以查询客户等。
新增立项项目界面,员工在新增立项项目界面中登记立项项目信息,主要包括客户姓名,联系方式,项目类型,项目文件等信息,登记完成立项项目信息之后,直接提交。预算报价管理界面,员工可以新增预算报价信息,可以查看预算报价详细信息。合同信息管理界面,员工新增项目合同信息,下载项目文件,下载合同文件,查看合同详细信息等。
装修进度查看界面,客户自己在装修进度查看界面查看装修进度图片,装修进度详情信息,可以通过装修进度标题查询装修进度信息,也能根据项目名称查询装修进度信息等。合同报价查看界面,客户查看合同报价金额,查看合同详情,下载合同文件。装饰材料总计划查看界面,客户查看材料价格,材料图片,采购数量,材料详情,材料名称等信息,可以查看装饰材料总计划详情信息,同时可以根据材料名称或项目名称来查询装饰材料总计划信息等。
四、核心代码
/**
* 合同报价
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/hetongbaojia")
public class HetongbaojiaController {
private static final Logger logger = LoggerFactory.getLogger(HetongbaojiaController.class);
@Autowired
private HetongbaojiaService hetongbaojiaService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private HetongService hetongService;
@Autowired
private YonghuService yonghuService;
@Autowired
private KehuService kehuService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("员工".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
else if("客户".equals(role))
params.put("kehuId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = hetongbaojiaService.queryPage(params);
//字典表数据转换
List<HetongbaojiaView> list =(List<HetongbaojiaView>)page.getList();
for(HetongbaojiaView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
HetongbaojiaEntity hetongbaojia = hetongbaojiaService.selectById(id);
if(hetongbaojia !=null){
//entity转view
HetongbaojiaView view = new HetongbaojiaView();
BeanUtils.copyProperties( hetongbaojia , view );//把实体数据重构到view中
//级联表
HetongEntity hetong = hetongService.selectById(hetongbaojia.getHetongId());
if(hetong != null){
BeanUtils.copyProperties( hetong , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setHetongId(hetong.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody HetongbaojiaEntity hetongbaojia, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,hetongbaojia:{}",this.getClass().getName(),hetongbaojia.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<HetongbaojiaEntity> queryWrapper = new EntityWrapper<HetongbaojiaEntity>()
.eq("hetong_id", hetongbaojia.getHetongId())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
HetongbaojiaEntity hetongbaojiaEntity = hetongbaojiaService.selectOne(queryWrapper);
if(hetongbaojiaEntity==null){
hetongbaojia.setInsertTime(new Date());
hetongbaojia.setCreateTime(new Date());
hetongbaojiaService.insert(hetongbaojia);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody HetongbaojiaEntity hetongbaojia, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,hetongbaojia:{}",this.getClass().getName(),hetongbaojia.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<HetongbaojiaEntity> queryWrapper = new EntityWrapper<HetongbaojiaEntity>()
.notIn("id",hetongbaojia.getId())
.andNew()
.eq("hetong_id", hetongbaojia.getHetongId())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
HetongbaojiaEntity hetongbaojiaEntity = hetongbaojiaService.selectOne(queryWrapper);
if(hetongbaojiaEntity==null){
hetongbaojiaService.updateById(hetongbaojia);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
hetongbaojiaService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
五、效果图
六、源码获取:
同系统在主页搜索资源可下载~