package com.mvc.service.impl;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.base.enums.ContractState;
import com.base.enums.MethodType;
import com.mvc.dao.ContractDao;
import com.mvc.entity.Contract;
import com.mvc.entity.ContractRecord;
import com.mvc.entity.User;
import com.mvc.repository.ContractRecordRepository;
import com.mvc.repository.ContractRepository;
import com.mvc.repository.UserRepository;
import com.mvc.service.ContractService;
import com.utils.JSONUtil;
import com.utils.Pager;
import net.sf.json.JSONObject;
/**
* 合同业务实现
*
* @author wangrui
* @date 2016-09-10
*/
@Service("contractServiceImpl")
public class ContractServiceImpl implements ContractService {
@Autowired
ContractDao contractDao;
@Autowired
ContractRepository contractRepository;
@Autowired
UserRepository userRepository;
@Autowired
ContractRecordRepository contractRecordRepository;
// 查询所有欠款合同
@Override
public List<Contract> findAllDebtCont(String contName, Integer offset, Integer end) {
return contractDao.findAllDebtCont(contName, offset, end);
}
// 查询所有逾期合同
@Override
public List<Contract> findAllOverdueCont(String contName, Integer offset, Integer end) {
return contractDao.findAllOverdueCont(contName, offset, end);
}
// 查询合同总条数
@Override
public Long countTotal(String contName, Integer methodType) {
return contractDao.countTotal(contName, methodType);
}
// 根据合同名获取合同信息
@Override
public List<Contract> findConByName(String contName, Integer offset, Integer end) {
return contractDao.findConByName(contName, offset, end);
}
// 添加合同
@Override
public Contract addContract(User user, JSONObject jsonObject) {
long time = System.currentTimeMillis();
Date date = new Date(time);
Contract contract = new Contract();
contract = (Contract) JSONUtil.JSONToObj(jsonObject.toString(), Contract.class);// 将json对象转换成实体对象,注意必须和实体类型一致
contract.setCont_initiation(1);// 已立项
contract.setCont_ishistory(0);// 未删除
contract.setCont_state(0);// 合同状态
contract.setCont_rank(1);// 合同等级
contract.setCompany_type("0");// 公司类型
contract.setCont_ctime(date);// 合同创建时间
contract.setCreator(user);// 合同创建者
contract.setCur_prst("未录入工期阶段");// 当前工期阶段
contract.setCur_reno("未录入收款节点");// 当前收款节点
contract = contractRepository.saveAndFlush(contract);
// 合同日志
ContractRecord contractRecord = new ContractRecord();
contractRecord.setConre_content(user.getUser_name() + "---新建合同---" + contract.getCont_name());
contractRecord.setConre_time(date);
contractRecord.setContract(contract);
contractRecord.setUser(user);
contractRecordRepository.saveAndFlush(contractRecord);
return contract;
}
// 根据合同ID获取合同
@Override
public Contract selectContById(Integer cont_id) {
return contractRepository.selectContById(cont_id);
}
// 根据合同ID删除合同
@Override
public List<Contract> deleteContract(Integer cont_id, String contName, String methodType, Pager pager, User user) {
List<Contract> list = null;
Contract contract = contractRepository.selectContById(cont_id);
boolean isdelete = contractDao.delete(cont_id);
if (isdelete) {// 删除成功
int methodTypeInt = MethodType.valueOf(methodType).value;
switch (methodTypeInt) {
case 1:
list = contractDao.findConByName(contName, pager.getOffset(), pager.getPageSize());
break;
case 2:
list = contractDao.findAllDebtCont(contName, pager.getOffset(), pager.getPageSize());
break;
case 3:
list = contractDao.findAllOverdueCont(contName, pager.getOffset(), pager.getPageSize());
break;
case 4:
list = contractDao.findAllEndCont(contName, pager.getOffset(), pager.getPageSize());
break;
case 5:
list = contractDao.findAllStopCont(contName, pager.getOffset(), pager.getPageSize());
break;
default:
break;
}
// 合同日志
ContractRecord contractRecord = new ContractRecord();
long time = System.currentTimeMillis();
Date date = new Date(time);
contractRecord.setConre_content(user.getUser_name() + "---删除合同---" + contract.getCont_name());
contractRecord.setConre_time(date);
contractRecord.setContract(contract);
contractRecord.setUser(user);
contractRecordRepository.saveAndFlush(contractRecord);
}
return list;
}
// 查询所有终结合同列表
@Override
public List<Contract> findAllEndCont(String contName, Integer offset, Integer end) {
return contractDao.findAllEndCont(contName, offset, end);
}
// 修改合同基本信息
@Override
public Boolean updateContBase(Integer cont_id, JSONObject jsonObject, User user) {
Contract contract = contractRepository.selectContById(cont_id);
if (contract != null) {
if (jsonObject.containsKey("cont_name")) {
contract.setCont_name(jsonObject.getString("cont_name"));// 合同名称
}
if (jsonObject.containsKey("cont_project")) {
contract.setCont_project(jsonObject.getString("cont_project"));// 项目名称
}
if (jsonObject.containsKey("cont_type")) {
contract.setCont_type(Integer.parseInt(jsonObject.getString("cont_type")));// 合同类型
}
if (jsonObject.containsKey("cont_cheader")) {
contract.setCont_cheader(jsonObject.getString("cont_cheader"));// 业主联系人
}
if (jsonObject.containsKey("cont_ctel")) {
contract.setCont_ctel(jsonObject.getString("cont_ctel"));// 业主联系方式
}
if (jsonObject.containsKey("cont_cdept")) {
contract.setCont_cdept(jsonObject.getString("cont_cdept"));// 业主联系部门
}
if (jsonObject.containsKey("cont_rank")) {
contract.setCont_rank(jsonObject.getInt("cont_rank"));// 等级
}
if (jsonObject.containsKey("cont_client")) {
contract.setCont_client(jsonObject.getString("cont_client"));// 业主公司
}
if (jsonObject.containsKey("province")) {
contract.setProvince(jsonObject.getString("province"));// 省
}
if (jsonObject.containsKey("city")) {
contract.setCity(jsonObject.getString("city"));// 市
}
}
// return contractDao.updateConById(cont_id, contract);
contract = contractRepository.saveAndFlush(contract);
// 合同日志
ContractRecord contractRecord = new ContractRecord();
long time = System.currentTimeMillis();
Date date = new Date(time);
contractRecord.setConre_content(user.getUser_name() + "---修改合同基本信息---" + contract.getCont_name());
contractRecord.setConre_time(date);
contractRecord.setContract(contract);
contractRecord.setUser(user);
contractRecordRepository.saveAndFlush(contractRecord);
if (contract.getCont_id() != null)
return true;
else
return false;
}
// 张姣娜:根据合同id修改状态
@Override
public Boolean updateState(Integer contId, Integer contState, User user) {
Contract contract = contractRepository.selectContById(contId);
boolean flag = contractDao.updateState(contId, contState);
if (flag) {
// 合同日志
ContractRecord contractRecord = new ContractRecord();
long time = System.currentTimeMillis();
Date date = new Date(time);
String before = ContractState.intToStr(contract.getCont_state());
String after = ContractState.intToStr(contState);
contractRecord.setConre_content(
user.getUser_name() + "---项目状态:" + before + ">>" + after + "---" + contract.getCont_name());
contractRecord.setConre_time(date);
contractRecord.setContract(contract);
contractRecord.setUser(user);
contractRecordRepository.saveAndFlush(contractRecord);
}
return flag;
}
// 张姣娜:查询所有停建合同列表
@Override
public List<Contract> findAllStopCont(String contName, Integer offset, Integer end) {
return contractDao.findAllStopCont(contName, offset, end);
}
// 合同信息补录
@Override
public Contract updateContract(Integer cont_id, JSONObject jsonObject, User user) {
Contract contract = contractRepository.selectContById(cont_id);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
boolean flag_shezong = false;
String shezong = null;
if (jsonObject != null) {
try {
if (jsonObject.containsKey("cont_money")) {
contract.setCont_money(Float.parseFloat(jsonObject.getString("cont_money")));// 合同金额
}
if (jsonObject.containsKey("cont_pnum")) {
contract.setCont_pnum(jsonObject.getString("cont_pnum"));// 项目编码
}
if (jsonObject.containsKey("cont_onum")) {
contract.setCont_onum(jsonObject.getString("cont_onum"));// 本公司合同编号
}
if (jsonObject.containsKey("cont_cnum")) {
contract.setCont_cnum(jsonObject.getString("cont_cnum"));// (甲方)业主方编号
}
if (jsonObject.containsKey("proStage")) {
contract.setProStage(jsonObject.getString("proStage"));// 项目阶段
}
if (jsonObject.containsKey("cont_stime")) {
contract.setCont_stime(format.parse(jsonObject.getString("cont_stime")));// 合同签订时间
}
if (jsonObject.containsKey("manager")) {
JSONObject json = JSONObject.fromObject(jsonObject.getString("manager"));
User manager = userRepository.findById(Integer.valueOf(json.getString("user_id")));// 项目设总
if (contract.getManager() != null && contract.getManager() != manager) {// 修改设总
flag_shezong = true;
shezong = contract.getManager().getUser_name();
}
contract.setManager(manager);
}
if (jsonObject.containsKey("cont_hasproxy")) {
contract.setCont_hasproxy(Integer.parseInt(jsonObject.getString("cont_hasproxy")));// 是否有委托书
}
if (jsonObject.containsKey("assistant_manager")) {
JSONObject json = JSONObject.fromObject(jsonObject.getString("assistant_manager"));
if (!json.isNullObject() && json != null) {// JSONObject为空判断
User assistant_manager = userRepository.findById(Integer.valueOf(json.getString("user_id")));// 项目副设总
contract.setAssistant_manager(assistant_manager);
}
}
if (jsonObject.containsKey("cont_initiation")) {
contract.setCont_initiation(jsonObject.getInt("cont_initiation"));// 是否立项
}
if (jsonObject.containsKey("cont_orgcodenum")) {
contract.setCont_orgcodenum(jsonObject.getString("cont_orgcodenum"));// 组织机构代码证号
}
if (jsonObject.containsKey("company_type")) {
contract.setCompany_type(jsonObject.getString("company_type"));// 企业性质
}
if (jsonObject.containsKey("cont_caddress")) {
contract.setCont_caddress(jsonObject.getString("cont_caddress"));// 业主通讯地址
}
if (jsonObject.containsKey("cont_czipcode")) {
contract.setCont_czipcode(jsonObject.getString("cont_czipcode"));// 业主邮编
}
if (jsonObject.containsKey("cont_cfax")) {
contract.setCont_cfax(jsonObject.getString("cont_cfax"));// 业主传真
}
// 联系人1
if (jsonObject.containsKey("landline_tel")) {
contract.setLandline_tel(jsonObject.getString("landline_tel"));// 固定电话
}
if (jsonObject.containsKey("post")) {
contract.setPost(jsonObject.getString("post"));// 职务
}
if (jsonObject.containsKey("cont_cdept")) {
contract.setCont_cdept(jsonObject.getString("cont_cdept"));// 所在部门
}
if (jsonObject.containsKey("cont_cemail")) {
contract.setCont_cemail(jsonObject.getString("cont_cemail"));// 电子邮箱
}
// 联系人2
if (jsonObject.containsKey("cont_cheader2")) {
contract.setCont_cheader2(jsonObject.getString("cont_cheader2"));// 姓名2
}
if (jsonObject.containsKey("cont_ctel2")) {
contract.setCont_ctel2(jsonObject.getString("cont_ctel2"));// 联系方式
}
if (jsonObject.containsKey("landline_tel2")) {
contract.setLandline_tel2(jsonObject.getString("landline_tel2"));// 固定电话
}
if (jsonObject.containsKey("post2")) {
contract.setPost2(jsonObject.getString("post2"));// 职务
}
if (jsonObject.containsKey("cont_cdept2")) {
contract.setCont_cdept2(jsonObject.getString("cont_cdept2"));// 所在部门
}
if (jsonObject.containsKey("cont_cemail2")) {
contract.setCont_cemail2(jsonObject.getString("cont_cemail2"));// 电子邮箱
}
if (jsonObject.containsKey("cont_avetaxpayer")) {
contract.setCont_avetaxpayer(jsonObject.getInt("cont_avetaxpayer"));// 纳税人类型
}
if (jsonObject.containsKey("invoice_type")) {
contract.setInvoice_type(Integer.valueOf(jsonObject.getString("invoice_type")));// 发票类型
}
if (jsonObject.containsKey("cont_taxidennum")) {
contract.setCont_taxidennum(jsonObject.getString("cont_taxidennum"));// 纳税人识别号
}
if (jsonObject.containsKey("tel")) {
contract.setTel(jsonObject.getString("tel"));// 电话
}
if (jsonObject.containsKey("cont_bank")) {
contract.setCont_bank(jsonObject.getString("cont_bank"));// 开户行
}
if (jsonObject.containsKey("cont_account")) {
contract.setCont_account(jsonObject.getString("cont_account"));// 银行账户
}
if (jsonObject.containsKey("com_signaddress")) {
contract.setCom_signaddress(jsonObject.getString("com_signaddress"));// 公司注册地址
}
if (jsonObject.containsKey("cont_remark")) {
contract.setCont_remark(jsonObject.getString("cont_remark"));// 备注
}
contract.setCont_state(0);// 状态,初始默认为在建 0:在建,1:竣工,2:停建
// 存入数据库
contract = contractRepository.saveAndFlush(contract);
// 合同日志
ContractRecord contractRecord = new ContractRecord();
long time = System.currentTimeMillis();
Date date = new Date(time);
contractRecord.setConre_content(user.getUser_name() + "---补录合同---" + contract.getCont_name());
contractRecord.setConre_time(date);
contractRecord.setContract(contract);
contractRecord.setUser(user);
contractRecordRepository.saveAndFlush(contractRecord);
if (flag_shezong) {// 修改设总
// 合同日志
contractRecord = new ContractRecord();
contractRecord.setConre_content(
user.getUser_name() + "---修改设总---" + shezong + ">>" + contract.getManager().getUser_name());
contractRecord.setConre_time(date);
contractRecord.setContract(contract);
contractRecord.setUser(user);
contractRecordRepository.saveAndFlush(contractRecord);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
return contract;
}
// 根据合同名和方法类别获取合同列表
@Override
public List<Contract> findConByNameAndMType(String contName, Integer methodType, Pager pager) {
List<Contract> list = null;
switch (methodType) {
case 1:
list = contractDao.findConByName(contName, pager.getOffset(), pager.getPageSize());
break;
case 2:
list = contractDao.findAllDebtCont(contName, pager.getOffset(), pager.getPageSize());
break;
case 3:
list = contractDao.findAllOverdueCont(contName, pager.getOffset(), pager.getPageSize());
break;
case 4:
list = contractDao.findAllEndCont(contName, pager.getOffset(), pager.getPageSize());
break;
case 5:
list = contractDao.findAllStopCont(contName, pager.getOffset(), pager.getPageSize());
break;
default:
break;
}
return list;
}
}