zm
2024-10-09 80a520d0a62dacf8237a5ab01b5346a002b14e8e
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
package com.product.contract.service;
 
import com.product.common.lang.StringUtils;
import com.product.contract.config.CmnConst;
import com.product.contract.service.ide.IContractInvoiceService;
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: ContractInvoiceService
 * @Project: product-server
 * @date: 2021-06-29 11:24
 * @author: ZhouJie
 * @Description: 合同开票
 */
@Component
public class ContractInvoiceService extends AbstractBaseService implements IContractInvoiceService {
 
    @Autowired
    public BaseDao baseDao;
    @Autowired
    PermissionService permissionService;
    @Autowired
    QueryFilterService queryFilterService;
 
    /**
     * 保存合同开票
     * @param fs
     * @return
     */
    @Override
    @Transactional
    public String saveContractInvoice(FieldSetEntity fs) {
        if(StringUtils.isEmpty(fs.getString(CmnConst.UUID))){
            fs.setValue("created_by", SpringMVCContextHolder.getCurrentUser().getUser_id());
            fs.setValue("org_level_uuid", SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid());
            fs.setValue("created_utc_datetime",new Date());
            String add = baseDao.add(fs, true);
            writeBackInvoice(fs);
            return add;
        } else {
            fs.setValue("updated_by", SpringMVCContextHolder.getCurrentUser().getUser_id());
            fs.setValue("updated_utc_datetime",new Date());
            baseDao.update(fs);
            writeBackInvoice(fs);
            return fs.getString(CmnConst.UUID);
        }
    }
 
    /**
     * 回写回款金额到合同
     * @param fs
     */
   private void  writeBackInvoice(FieldSetEntity fs){
       //按照条款回写到合同子表
       DataTableEntity subDataTable = fs.getSubDataTable(CmnConst.LX_PROJECT_CONTRACT_INVOICE_INFO);
       for (int i = 0; i <subDataTable.getRows() ; i++) {
           FieldSetEntity fsData = subDataTable.getFieldSetEntity(i);
           FieldSetEntity fsinvo = baseDao.getFieldSetEntityByFilter(CmnConst.LX_PROJECT_CONTRACT_INVOICE_INFO,"contract_terms=?",new Object[]{fsData.getString("contract_terms")},false);
 
           FieldSetEntity contractTerms = baseDao.getFieldSetEntityBySQL("SELECT sum(invoice_amount) invoice_amount FROM product_project_contract_invoice_info where contract_terms=?   GROUP BY contract_terms", new Object[]{fsData.getString("contract_terms")}, false);
 
           Double invoiced_amount = contractTerms.getDouble("invoice_amount");//已开票金额
           //回写已开票金额到合同子表
           FieldSetEntity fcosub = new FieldSetEntity();
           if(fsinvo!=null){
               fcosub.setTableName(CmnConst.LX_PROJECT_CONTRACT_INFO_SUB);
               fcosub.setValue("uuid",fsData.getString("contract_terms"));
               fcosub.setValue("invoice_amount",invoiced_amount);//已开票金额
               baseDao.update(fcosub);
           }
       }
       //按照合同回写到合同主表
       FieldSetEntity invoice_amount_fs = baseDao.getFieldSetEntityBySQL("SELECT sum(invoice_amount) invoice_amount FROM product_project_contract_invoice_info \n" +
               "where contract_invoice_uuid in (SELECT uuid FROM product_project_contract_invoice where contract_name=?)", new Object[]{fs.getString("contract_name")}, false);
       if(invoice_amount_fs!=null) {
           FieldSetEntity invoiceFs = new FieldSetEntity();
           invoiceFs.setTableName(CmnConst.LX_PROJECT_CONTRACT_INFO);
           invoiceFs.setValue("uuid",fs.getString("contract_name"));
           invoiceFs.setValue("invoice_amount",invoice_amount_fs.getString("invoice_amount"));//已开票金额
           baseDao.update(invoiceFs);
       }
   }
    /**
     * 删除合同开票
     * @param fs
     * @return
     */
    @Override
    @Transactional
    public boolean deleteContractInvoice(FieldSetEntity fs) {
        String uuid = fs.getUUID();
        String[] uuids = uuid.split(",");
        return baseDao.delete(CmnConst.LX_PROJECT_CONTRACT_INVOICE, BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuids.length, true), uuids);
    }
 
    /**
     * 合同开票列表
     * @param fs
     * @return
     */
    public DataTableEntity listContractInvoice(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_INVOICE,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 findContractInvoice(FieldSetEntity fs) throws BaseException {
        return baseDao.getFieldSetEntity(CmnConst.LX_PROJECT_CONTRACT_INVOICE,fs.getUUID(),true);
    }
    /**
     * 根据开票号获取发票金额
     * @param fs
     * @return
     * @throws BaseException
     */
    public FieldSetEntity getInvoiceAmountByTerms(FieldSetEntity fs) throws BaseException {
        String terms = fs.getString("contract_terms");
        return baseDao.getFieldSetEntityByFilter(CmnConst.LX_PROJECT_CONTRACT_INVOICE_INFO,"contract_terms=?",new Object[]{terms},false);
    }
 
 
}