package com.hzya.frame.sys.app.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.sys.app.dao.ISysAppMapper;
import com.hzya.frame.sys.app.entity.SysApp;
import com.hzya.frame.sys.app.service.ISysAppService;
import com.hzya.frame.sys.appParameter.dao.ISysAppParameterMapper;
import com.hzya.frame.sys.appParameter.entity.SysAppParameter;
import com.hzya.frame.serviceUtil.ServiceUtil;
import com.hzya.frame.web.entity.BaseResult;
import com.hzya.frame.web.entity.JsonResultEntity;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;

/**
 * @description: 应用表  service
 * @tableName:   sys_app
 * @entityName:  Sysapp
 * @author: 	 llg
 * @history:	 1.0
 */
@Service(value="sysAppService")
public class SysAppServiceImpl  extends ServiceUtil implements ISysAppService {

	@Resource
	private ISysAppMapper sysAppMapper;
	@Resource
	private ISysAppParameterMapper sysAppParameterMapper;
	/**
	 * @Author lvleigang
	 * @Description  根据应用id查询
	 * @Date 11:18 上午 2023/3/6
	 * @param object
	 * @return com.hzya.frame.web.entity.JsonResultEntity
	 **/
	@Override
	public JsonResultEntity queryApp(JSONObject object) {
		SysApp sysApp = getData("jsonStr",object,SysApp.class);
		if(sysApp == null || sysApp.getId() == null || "".equals(sysApp.getId())){
			return BaseResult.getFailureMessageEntity("查询应用id不存在");
		}
		//查询应用
		SysApp queryEntity = sysAppMapper.entity_get(sysApp.getId());
		if(queryEntity == null || queryEntity.getId() == null || "".equals(queryEntity.getId())){
			return BaseResult.getFailureMessageEntity("查询应用不存在");
		}
		//查询应用参数
		//SysAppParameter sysAppParameter = new SysAppParameter();
		//sysAppParameter.setAppId(queryEntity.getId());
		//sysAppParameter.setSts("Y");
		//List<SysAppParameter> sysAppParameterList = sysAppParameterMapper.entity_list_base(sysAppParameter);
		//queryEntity.setSysAppParameterList(sysAppParameterList);
		return BaseResult.getSuccessMessageEntity("获取应用成功", queryEntity);
	}
	/**
	 * @Author lvleigang
	 * @Description  新增应用
	 * @Date 11:16 上午 2023/3/6
	 * @param object
	 * @return com.hzya.frame.web.entity.JsonResultEntity
	 **/
	@Override
	public JsonResultEntity addApp(JSONObject object) {
		SysApp sysApp = getData("jsonStr",object,SysApp.class);
		if(sysApp == null){
			return BaseResult.getFailureMessageEntity("请求参数不存在");
		}
		//判断产品编号是否重复
		SysApp checkEntity = new SysApp();
		checkEntity.setCode(sysApp.getCode());
		checkEntity.setSts("Y");
		Integer count = sysAppMapper.entity_list_base_count(checkEntity);
		if(count != null && count> 0){
			return BaseResult.getFailureMessageEntity("应用编号重复请修改");
		}
		//新增应用
		//添加应用的id，代码生成
		sysApp.setCreateApp();
		//新增应用参数
		if(sysApp.getSysAppParameterList() != null && sysApp.getSysAppParameterList().size() > 0){
			for (int i = 0; i < sysApp.getSysAppParameterList().size(); i++) {
				SysAppParameter sysAppParameter = sysApp.getSysAppParameterList().get(i);
				sysAppParameter.setCreateAppParameter();
				sysAppParameter.setAppId(sysApp.getId());
				sysAppParameterMapper.entity_insert(sysAppParameter);
			}
		}
		sysAppMapper.entity_insert(sysApp);
		return BaseResult.getSuccessMessageEntity("新增应用成功");
	}
	/**
	 * @Author lvleigang
	 * @Description  修改应用
	 * @Date 11:16 上午 2023/3/6
	 * @param object
	 * @return com.hzya.frame.web.entity.JsonResultEntity
	 **/
	@Override
	public JsonResultEntity updateApp(JSONObject object) {
		SysApp sysApp = getData("jsonStr",object,SysApp.class);
		if(sysApp == null && sysApp.getId() != null && !"".equals(sysApp.getId()) ){
			return BaseResult.getFailureMessageEntity("请求参数不存在");
		}
		//修改应用，代码生成
		sysApp.setUpdateApp();
		//新增产品版本
		//添加产品版本的id，代码生成
		if(sysApp.getSysAppParameterList() != null && sysApp.getSysAppParameterList().size() > 0){
			//先删除原先的(逻辑删除)
			delectAppParameterByAppId(sysApp.getId());
			for (int i = 0; i < sysApp.getSysAppParameterList().size(); i++) {
				//新增或修改产品版本
				SysAppParameter sysAppParameter = sysApp.getSysAppParameterList().get(i);
				addOrUpdateAppParameterById(sysAppParameter,sysApp.getId());
			}
		}
		sysAppMapper.entity_update(sysApp);
		return BaseResult.getSuccessMessageEntity("修改产品成功");

	}
	/**
	 * @Author lvleigang
	 * @Description  新增或修改应用版本
	 * @Date 3:30 下午 2023/3/3
	 * @param sysAppParameter
	 * @param id
	 * @return void
	 **/
	private void addOrUpdateAppParameterById(SysAppParameter sysAppParameter , String id) {
		if(sysAppParameter != null && id != null && !"".equals(id)){
			sysAppParameter.setAppId(id);
			if(sysAppParameter.getId() == null || "".equals(sysAppParameter.getId())){
				sysAppParameter.setCreateAppParameter();
				sysAppParameterMapper.entity_insert(sysAppParameter);
			}else {
				sysAppParameter.setUpdateAppParameter();
				sysAppParameterMapper.entity_update(sysAppParameter);
			}
		}
	}
	/**
	 * @Author lvleigang
	 * @Description  根据id逻辑删除产品版本表数据
	 * @Date 3:21 下午 2023/3/3
	 * @param id
	 * @return void
	 **/
	private void delectAppParameterByAppId(String id) {
		if(id != null && !"".equals(id)){
			SysAppParameter sysAppParameter = new SysAppParameter();
			sysAppParameter.setAppId(id);
			sysAppParameter.setSts("Y");
			sysAppParameter.setUpdateAppParameter();
			sysAppParameterMapper.logicDelete_Multi_Condition(sysAppParameter);
		}
	}
	/**
	 * @Author lvleigang
	 * @Description  删除应用
	 * @Date 11:16 上午 2023/3/6
	 * @param object
	 * @return com.hzya.frame.web.entity.JsonResultEntity
	 **/
	@Override
	public JsonResultEntity delectApp(JSONObject object) {
		SysApp sysApp = getData("jsonStr",object,SysApp.class);
		if(sysApp == null && sysApp.getId() != null && !"".equals(sysApp.getId()) ){
			return BaseResult.getFailureMessageEntity("请求参数不存在");
		}
		//删除原先的(逻辑删除)
		delectAppByAppId(sysApp.getId());
		//删除原先的
		delectAppParameterByAppId(sysApp.getId());

		return BaseResult.getSuccessMessageEntity("删除产品成功");
	}

	/**
	 * @Author lvleigang
	 * @Description  分页查询数据成功
	 * @Date 11:00 上午 2023/3/14
	 * @param jsonObject
	 * @return com.hzya.frame.web.entity.JsonResultEntity
	 **/
	@Override
	public JsonResultEntity queryPageApp(JSONObject jsonObject) {
		SysApp sysApp = getData("jsonStr",jsonObject,SysApp.class);
		if(sysApp == null || sysApp.getPageNum() == null || sysApp.getPageSize() == null){
			return BaseResult.getFailureMessageEntity("分页查询参数不存在");
		}
		//查询产品
		PageHelper.startPage(sysApp.getPageNum(), sysApp.getPageSize());
		sysApp.setSts("Y");
		List<SysApp>  sysAppList = sysAppMapper.entity_list_like_page(sysApp);
		PageInfo pageInfo = new PageInfo(sysAppList);
		return BaseResult.getSuccessMessageEntity("获取应用成功", pageInfo);
	}

	/**
	 * @Author lvleigang
	 * @Description  分页查询数据成功
	 * @Date 11:00 上午 2023/3/14
	 * @param jsonObject
	 * @return com.hzya.frame.web.entity.JsonResultEntity
	 **/
	@Override
	public JsonResultEntity queryList(JSONObject jsonObject) {
		SysApp sysApp = getData("jsonStr",jsonObject,SysApp.class);
		sysApp.setSts("Y");
		List<SysApp>  sysAppList = sysAppMapper.entity_list_like_page(sysApp);
		return BaseResult.getSuccessMessageEntity("获取应用成功", sysAppList);
	}


	/**
	 * @Author lvleigang
	 * @Description  根据id逻辑删除产品版本表数据
	 * @Date 3:21 下午 2023/3/3
	 * @param id
	 * @return void
	 **/
	private void delectAppByAppId(String id) {
		if(id != null && !"".equals(id)){
			SysApp sysApp = new SysApp();
			sysApp.setId(id);
			sysApp.setSts("Y");
			sysApp.setUpdateApp();
			sysAppMapper.logicDelete_Multi_Condition(sysApp);
		}
	}
}
