zm
2025-03-15 4fb0d902e9eba6986edf2f2d0f37b13744418aba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package com.product.contract.service;
 
import com.product.common.lang.StringUtils;
import com.product.contract.config.CmnConst;
import com.product.contract.config.SystemCode;
import com.product.contract.service.ide.IContractChangeService;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.exception.BaseException;
import com.product.core.permission.PermissionService;
import com.product.core.service.support.AbstractBaseService;
import com.product.core.service.support.QueryFilterService;
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.core.transfer.Transactional;
import com.product.util.BaseUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import java.util.Date;
 
/**
 * Copyright LX
 * @Title: ContractChangeService
 * @Project: product-server
 * @date: 2021-06-28 17:51
 * @author: ZhouJie
 * @Description: 合同变更
 */
@Component
public class ContractChangeService extends AbstractBaseService implements IContractChangeService {
 
    @Autowired
    public BaseDao baseDao;
    @Autowired
    PermissionService permissionService;
    @Autowired
    QueryFilterService queryFilterService;
 
    @Override
    @Transactional
    public String saveContractChange(FieldSetEntity fs) {
        if(StringUtils.isEmpty(fs.getString(CmnConst.UUID))){
            fs.setValue("org_level_uuid", SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid());
            fs.setValue("created_by", SpringMVCContextHolder.getCurrentUser().getUser_id());
            fs.setValue("created_utc_datetime",new Date());
            DataTableEntity lxOaContractInfoSub = fs.getSubDataTable("product_project_contract_info_sub");
            fs.removeSubData("product_project_contract_info_sub");
            String uuid = baseDao.add(fs);
            if(!BaseUtil.dataTableIsEmpty(lxOaContractInfoSub)) {
                for (int i = 0; i < lxOaContractInfoSub.getRows(); i++) {
                    FieldSetEntity fieldSetEntity = lxOaContractInfoSub.getFieldSetEntity(i);
                    fieldSetEntity.setValue("contract_info_uuid", uuid);
                }
                baseDao.add(lxOaContractInfoSub);
            }
            return uuid;
        } else {
            fs.setValue("updated_by", SpringMVCContextHolder.getCurrentUser().getUser_id());
            fs.setValue("updated_utc_datetime",new Date());
            DataTableEntity lxOaContractInfoSub = fs.getSubDataTable("product_project_contract_info_sub");
            fs.removeSubData("product_project_contract_info_sub");
            baseDao.update(fs);
            String uuid = fs.getString(CmnConst.UUID);
            baseDao.delete("product_project_contract_info_sub", "contract_info_uuid = ?", new String[]{uuid});
            if(!BaseUtil.dataTableIsEmpty(lxOaContractInfoSub)) {
                for (int i = 0; i < lxOaContractInfoSub.getRows(); i++) {
                    FieldSetEntity fieldSetEntity = lxOaContractInfoSub.getFieldSetEntity(i);
                    fieldSetEntity.setValue("contract_info_uuid", uuid);
                    fieldSetEntity.remove("uuid");
                }
                baseDao.add(lxOaContractInfoSub);
            }
            return uuid;
        }
    }
 
    @Override
    @Transactional
    public boolean deleteContractChange(FieldSetEntity fs) {
        String uuid = fs.getUUID();
        String[] uuids = uuid.split(",");
         baseDao.delete(CmnConst.LX_PROJECT_CONTRACT_CHANGE, BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuids.length, true), uuids);
        return baseDao.delete("product_project_contract_info_sub", BaseUtil.buildQuestionMarkFilter("contract_info_uuid", uuids.length, true), uuids);
    }
 
    /**
     * 合同变更列表
     * @param fs
     * @return
     */
    public DataTableEntity listContractChange(FieldSetEntity fs) {
        String queryFilter=permissionService.getDataFilter(CmnConst.ORG_LEVEL_UUID);
        if(StringUtils.isEmpty(queryFilter)) {
            queryFilter = CmnConst.CREATED_BY + " = " + SpringMVCContextHolder.getCurrentUser().getUser_id();
        }
        if(!BaseUtil.dataTableIsEmpty(fs.getSubDataTable("systemSeniorQueryString"))){
            queryFilter    = queryFilter +" AND "+ queryFilterService.getQueryFilter(fs);
        }
        String filter = fs.getString("filter") + " AND " + queryFilter;
        DataTableEntity dt = baseDao.listTable(CmnConst.LX_PROJECT_CONTRACT_CHANGE,filter,new Object[]{},null,null,fs.getInteger(CmnConst.PAGESIZE), fs.getInteger(CmnConst.CPAGE));
        baseDao.loadPromptData(dt);
        return dt;
    }
 
    /**
     * 查询合同变更详情
     * @param fs
     * @return
     * @throws BaseException
     */
    public FieldSetEntity findContractChange(FieldSetEntity fs) throws BaseException {
        String uuid = fs.getUUID();
        FieldSetEntity fieldSetEntity = baseDao.getFieldSetEntity(CmnConst.LX_PROJECT_CONTRACT_CHANGE,uuid,true);
        DataTableEntity dataTableEntity = baseDao.listTable("product_project_contract_info_sub", "contract_info_uuid = ?", new String[]{uuid});
        if(!BaseUtil.dataTableIsEmpty(dataTableEntity)){
            fieldSetEntity.addSubDataTable(dataTableEntity);
        }
        return fieldSetEntity;
    }
 
    /**
     * 合同变更获取详情数据
     * @param field
     * @return
     * @throws BaseException
     */
    public FieldSetEntity changeObtainingReference(FieldSetEntity field)throws BaseException{
        //合同uuid
        String uuid = field.getUUID();
        //如果该合同已经开票 这不能变更
        DataTableEntity invoiceData = baseDao.listTable(CmnConst.LX_PROJECT_CONTRACT_INVOICE, " contract_name = ? ", new String[]{uuid});
        if(!BaseUtil.dataTableIsEmpty(invoiceData)){
            throw new BaseException(SystemCode.SYSTEM_INVOICE_CONTRACT_UNABLE_CHANGE.getValue(), SystemCode.SYSTEM_INVOICE_CONTRACT_UNABLE_CHANGE.getText(),this.getClass(), "public FieldSetEntity changeObtainingReference(FieldSetEntity field)throws BaseException");
        }
        //如果该合同的变更在流程中未结束,暂时无法变更
        StringBuffer sql1 = new StringBuffer();
        sql1.append(" SELECT * FROM product_project_contract_change a LEFT JOIN ")
            .append(" product_sys_flow_task b ON a.uuid = b.record_uuid WHERE a.contract_name = ? AND b.finish_type = 1 ");
        DataTableEntity changeData = baseDao.listTable(sql1.toString(), new String[]{uuid});
        if(!BaseUtil.dataTableIsEmpty(changeData)){
            throw new BaseException(SystemCode.SYSTEM_AGAIN_CONTRACT_UNABLE_CHANGE.getValue(), SystemCode.SYSTEM_AGAIN_CONTRACT_UNABLE_CHANGE.getText(),this.getClass(), "public FieldSetEntity changeObtainingReference(FieldSetEntity field)throws BaseException");
        }
        //如果该合同变更流程已经结束, 取最新变更数据
        StringBuffer sql2 = new StringBuffer();
        sql2.append(" SELECT a.*,b.finish_time FROM product_project_contract_change a LEFT JOIN ")
                .append(" product_sys_flow_task b ON a.uuid = b.record_uuid WHERE a.contract_name = ? AND b.finish_type = 2 ORDER BY b.finish_time DESC ");
 
        DataTableEntity contractData = baseDao.listTable(sql2.toString(), new String[]{uuid});
 
        //如果该合同没有变更 获取合同数据
        if(BaseUtil.dataTableIsEmpty(contractData)){
           return baseDao.getFieldSetEntity("product_project_contract_info", uuid, false);
            //如果该合同变更流程已经结束, 取最新变更数据
        }else {
            FieldSetEntity fieldSetEntity = contractData.getFieldSetEntity(0);
            fieldSetEntity.setValue("contract_amount",fieldSetEntity.getString("change_the_amount"));
           return fieldSetEntity;
        }
 
    }
}