费用推送

This commit is contained in:
hongchao 2025-09-26 16:32:33 +08:00
parent 5cec3ddecf
commit 5f6087d0a9
14 changed files with 1219 additions and 41 deletions

View File

@ -1,5 +1,8 @@
package com.bonus.common.biz.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bonus.common.security.utils.SecurityUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
@ -13,6 +16,8 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
/**
* @author bonus
@ -35,6 +40,29 @@ public class HttpHelper {
return responseContent;
}
public static String sendHttpPostPushCost(String url, String JSONBody) throws Exception {
// 获取token
String token = getToken();
if (StringHelper.isEmpty(token)) {
System.err.println("token获取失败-=========:");
return null;
}
System.err.println("JSONBody-=========:" + JSONBody);
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("Content-Type", "application/json");
httpPost.addHeader("Authorization", token);
httpPost.setEntity(new StringEntity(JSONBody));
CloseableHttpResponse response = httpClient.execute(httpPost);
// System.out.println(response.getStatusLine().getStatusCode() + "\n");
HttpEntity entity = response.getEntity();
String responseContent = EntityUtils.toString(entity, "UTF-8");
// System.out.println(responseContent);
response.close();
httpClient.close();
return responseContent;
}
public static String sendHttpPost(String url,String token,String content,String intelligentAppKey) throws Exception {
System.out.println("JSONBody-=========:" + content);
try (CloseableHttpClient client = HttpClients.createDefault()) {
@ -156,6 +184,42 @@ public class HttpHelper {
// return redisCode;
// }
/**
* 获取token
*
* @return
*/
private static String getToken() {
// String tokenUrl = "http://10.138.55.113:8036/micro-server/zygqj/generatcorToekn";
String tokenUrl = "http://10.138.55.64:8036/micro-server/zygqj/generatcorToekn";
try {
String loginName= SecurityUtils.getLoginUser().getSysUser().getUserName();
// String loginName="liucj7431";
Map<String, String> map = new HashMap<String, String>();
JSONObject data = new JSONObject();
data.put("account", loginName);
map.put("body", AesEncryptUtils.encrypt(JSONObject.toJSONString(data), KEY));
String body = JSONObject.toJSONString(map);
String result = HttpHelper.sendHttpPostForToken(tokenUrl, body);
System.err.println("dataString-=========:" + result);
if (!StringHelper.isEmpty(result)) {
JSONObject object = JSONObject.parseObject(result);
String code = object.getString("code");
if ("200".equals(code)) {
String token = object.getString("data");
return token;
}
} else {
return null;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
return null;
}
/**
* 不带鉴权的请求

View File

@ -0,0 +1,261 @@
package com.bonus.common.biz.utils;
import java.io.ByteArrayOutputStream;
import java.text.DecimalFormat;
public class StringHelper {
private static String hexString = "0123456789ABCDEF";
public static String replaceAll(String str, String oldStr, String newStr) {
return str.replaceAll(oldStr, newStr);
}
public static boolean contains(String s1, String s2) {
if (isEmpty(s1)) {
return false;
}
return s1.contains(s2);
}
public static int getInt(String valStr){
return getInt(valStr,0);
}
public static int getInt(String valStr,int defaulVal){
int val = 0;
try{
val = Integer.parseInt(valStr);
}catch (Exception e) {
val = defaulVal;
}
return val;
}
public static float getFloat(String valStr){
return getFloat(valStr,0);
}
public static float getFloat(String valStr,int defaulVal){
float val = 0;
try{
val = Float.parseFloat(valStr);
}catch (Exception e) {
val = defaulVal;
}
return val;
}
/*
* 将字符串编码成16进制数字,适用于所有字符包括中文
*/
public static String encode(String str) {
// 根据默认编码获取字节数组
byte[] bytes = str.getBytes();
StringBuilder sb = new StringBuilder(bytes.length * 2);
// 将字节数组中每个字节拆解成2位16进制整数
for (int i = 0; i < bytes.length; i++) {
sb.append(hexString.charAt((bytes[i] & 0xf0) >> 4));
sb.append(hexString.charAt((bytes[i] & 0x0f) >> 0));
}
return sb.toString();
}
public static String decode(String bytes) {
ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length() / 2);
// 将每2位16进制整数组装成一个字节
for (int i = 0; i < bytes.length(); i += 2)
baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString.indexOf(bytes.charAt(i + 1))));
return new String(baos.toByteArray());
}
public static String fillPrefixZero(int v, int len) {
String vStr = v + "";
while (vStr.length() < len) {
vStr = "0" + vStr;
}
return vStr;
}
public static boolean isEmpty(String str) {
if (str == null || "".equals(str.trim()) || "null".equals(str) || "undefined".equals(str)) {
return true;
}
return false;
}
/**
* 判断字符串 不为空
*/
public static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
/**
* 处理时间获取编号
*/
public static String time2Code(String time) {
if (isNotEmpty(time)) {
time = time.replace("-", "").replace(" ", "").replace(":", "");
}
return time;
}
public static String formatMoneyData(double temp){
DecimalFormat df = new DecimalFormat("#0.00");// 构造方法的字符格式这里如果小数不足2位,会以0补足.
String tmp = df.format(temp);
return tmp;
}
public static float formatMoney2Data(double temp){
String tmp = formatMoneyData(temp);
float t = getFloat(tmp);
return t;
}
public static String formatData(float temp){
DecimalFormat df = new DecimalFormat("#0.000");// 构造方法的字符格式这里如果小数不足2位,会以0补足.
String tmp = df.format(temp);
return tmp;
}
public static float format2Data(float temp){
String tmp = formatData(temp);
float t = getFloat(tmp);
return t;
}
/**
* 检查是否存在数据飘逸
*/
public static float disposeDrift(Float num){
String strNum = num.toString();
String endStr = strNum.substring(strNum.indexOf(".") + 1);
String startStr = strNum.substring(0, strNum.indexOf("."));
if (endStr.indexOf("999") >= 0) {
int start = endStr.indexOf("999");
if (start == 0) {
num = Float.parseFloat(startStr) + 1f;
} else {
String a = "0";
String c = "";
while(endStr.startsWith(a)){
a+="0";
c+="0";
}
endStr = endStr.substring(0, start);
endStr = c+(Integer.parseInt(endStr) + 1) + "";
num = Float.parseFloat(startStr + "." + endStr);
}
} else if (endStr.indexOf("000") >= 0) {
int start = endStr.indexOf("000");
if (start == 0) {
num = Float.parseFloat(startStr);
} else {
num = Float.parseFloat(strNum.substring(0, strNum.indexOf("000")));
}
}
return num;
}
public static String judgeCompany(Integer orgId){
String company = "";
if(35 == orgId){
//送电
company = "1";
}else if(36 == orgId ){
//变电
company = "9";
}else if(37 == orgId){
//大件
company = "12";
}else if(38 == orgId){
//广源
company = "2";
}else if(39 == orgId){
//宏送
company = "8";
}else if(40 == orgId){
//宏变
company = "3";
}else{
company = "";
}
return company;
}
//String字符串相似度比较
public static float getSimilarityRatio(String str, String target, boolean isIgnore) {
float ret = 0;
DecimalFormat decimalFormat=new DecimalFormat(".0");
if (Math.max(str.length(), target.length()) == 0) {
ret = 1;
} else {
ret = 1 - (float) compare(str, target, isIgnore) / Math.max(str.length(), target.length());
}
ret=Float.parseFloat(decimalFormat.format(ret*100));
return ret;
}
public static int compare(String str, String target, boolean isIgnore) {
int d[][]; // 矩阵
int n = str.length();
int m = target.length();
int i; // 遍历str的
int j; // 遍历target的
char ch1; // str的
char ch2; // target的
int temp; // 记录相同字符,在某个矩阵位置值的增量,不是0就是1
if (n == 0) {
return m;
}
if (m == 0) {
return n;
}
d = new int[n + 1][m + 1];
for (i = 0; i <= n; i++) { // 初始化第一列
d[i][0] = i;
}
for (j = 0; j <= m; j++) { // 初始化第一行
d[0][j] = j;
}
for (i = 1; i <= n; i++) { // 遍历str
ch1 = str.charAt(i - 1);
// 去匹配target
for (j = 1; j <= m; j++) {
ch2 = target.charAt(j - 1);
if (isIgnore) {
if (ch1 == ch2 || ch1 == ch2 + 32 || ch1 + 32 == ch2) {
temp = 0;
} else {
temp = 1;
}
} else {
if (ch1 == ch2) {
temp = 0;
} else {
temp = 1;
}
}
// 左边+1,上边+1, 左上角+temp取最小
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + temp);
}
}
return d[n][m];
}
public static int min(int one, int two, int three) {
return (one = one < two ? one : two) < three ? one : three;
}
public static boolean validatePassword(String password, int minLength) {
String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{" + minLength + ",}$";
return password.matches(regex);
}
}

View File

@ -329,4 +329,7 @@ public class MaterialLeaseApplyInfo extends BaseEntity {
@ApiModelProperty(value = "工程名称")
@Excel(name = "工程名称")
private String proName;
@ApiModelProperty(value = "是否人为修改01")
private Integer isUpdate;
}

View File

@ -1,5 +1,10 @@
package com.bonus.material.push.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.bonus.common.biz.utils.AesEncryptUtils;
import com.bonus.common.biz.utils.HttpHelper;
import com.bonus.common.biz.utils.StringHelper;
import com.bonus.common.core.exception.ServiceException;
import com.bonus.common.core.utils.poi.ExcelUtil;
import com.bonus.common.core.web.controller.BaseController;
@ -259,4 +264,83 @@ public class IwsCostPushController extends BaseController {
List<MaterialRetainedEquipmentInfo> list = iwsCostPushService.getEquipmentListByAgreementCode(info);
return AjaxResult.success(getDataTable(list));
}
/**
* 机具费用推送
* @return
*/
@PostMapping("/materialCostPush")
@ApiOperation("机具费用推送")
public AjaxResult materialCostPush(@RequestBody IwsCostPushBean obj) {
return iwsCostPushService.materialCostPush(obj);
}
/**
* 机具费用推送数据回退
*
* @param o
* @return
*/
@RequestMapping(value = "materialCostPushReturn", method = RequestMethod.POST)
@ApiOperation("机具费用推送回退")
public AjaxResult materialCostPushReturn(@RequestBody IwsCostPushBean o) {
try {
String body = o.getBody();
if (!StringHelper.isEmpty(body)) {
// 解密
String decResult = AesEncryptUtils.decrypt(body, HttpHelper.KEY);
logger.info("接收的数据:" + decResult);
if (!StringHelper.isEmpty(decResult)) {
JSONArray resultObj = JSONArray.parseArray(decResult);
if (resultObj != null && resultObj.size() > 0) {
for (int i = 0; i < resultObj.size(); i++) {
// 循环遍历集合
JSONObject tempObj = resultObj.getJSONObject(i);
String id = tempObj.getString("id");
String pushStatus = tempObj.getString("pushStatus");
String pushRemark = tempObj.getString("pushRemark");
String typeString = tempObj.getString("type");
IwsCostPushBean bean = new IwsCostPushBean();
bean.setId(id);
bean.setPushRemark(pushRemark);
bean.setPushStatus(pushStatus);
bean.setType(typeString);
iwsCostPushService.materialCostPushReturn(bean);
}
}
} else {
return AjaxResult.error("周转工器具费用回退数据接收更新失败---解密失败");
}
} else {
return AjaxResult.error("周转工器具费用回退数据接收更新失败---参数为空");
}
} catch (Exception e) {
// TODO: handle exception
logger.error(e.toString(), e);
return AjaxResult.error("周转工器具费用回退数据接收更新失败---服务器程序错误");
}
return AjaxResult.success("周转工器具费用回退数据接收更新成功");
}
/**
* 安全工机具费用推送
* @return
*/
@PostMapping("/safetyMaterialCostPush")
@ApiOperation("安全工机具费用推送")
public AjaxResult safetyMaterialCostPush(@RequestBody IwsCostPushBean obj) {
return iwsCostPushService.safetyMaterialCostPush(obj);
}
/**
* 安全工机具(消费性)费用推送
* @return
*/
@PostMapping("/safetyConsumeMaterialCostPush")
@ApiOperation("安全工机具(消费性)费用推送")
public AjaxResult safetyConsumeMaterialCostPush(@RequestBody IwsCostPushBean obj) {
return iwsCostPushService.safetyConsumeMaterialCostPush(obj);
}
}

View File

@ -118,5 +118,7 @@ public class CostPushBean implements java.io.Serializable {
private Integer status;
private String sltTime;
private String agreementId;
}

View File

@ -7,11 +7,9 @@ import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author : 阮世耀
@ -120,13 +118,13 @@ public class IwsCostPushBean implements Serializable {
private String year;
@Excel(name = "是否结算", readConverterExp = "0=未结算,1=已结算", sort = 6)
private Byte isSettlement = 0;
private Integer isSettlement;
@ApiModelProperty(value = "安全工器具是否结算, 0未结算1=已结算")
private Byte safetyIsSettlement = 0;
private Integer safetyIsSettlement;
@Excel(name = "结算类型", readConverterExp = "1=工器具,2=安全工器具")
private Byte settlementType;
private Integer settlementType;
// 结算时间
@Excel(name = "结算时间", dateFormat = "yyyy-MM-dd HH:mm:ss", sort = 7)
@ -183,4 +181,28 @@ public class IwsCostPushBean implements Serializable {
private String maTypeName;
private String maModelName;
private String[] agreementIds;
private String agreementIdsStr;
private String pushStatus;
private String pushTime;
private String body;
@ApiModelProperty(value = "是否是消耗性0不消耗1消耗")
private Integer comsumeType;
@ApiModelProperty(value = "2:安全工机具1工机具")
private Integer category;
private String submitUser;
private Long quantity;
private BigDecimal netPrice;
private BigDecimal cost;
}

View File

@ -43,4 +43,6 @@ public class ProIdsBean {
private String unitName;
private String externalId;
private String agreementIds;
}

View File

@ -3,6 +3,7 @@ package com.bonus.material.push.mapper;
import com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo;
import com.bonus.material.clz.domain.vo.lease.LeaseTotalInfo;
import com.bonus.material.push.domain.IwsCostPushBean;
import com.bonus.material.push.domain.ProIdsBean;
import com.bonus.material.settlement.domain.vo.PeriodCostResultVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -85,4 +86,28 @@ public interface IwsCostPushMapper {
* @return
*/
List<MaterialRetainedEquipmentInfo> getEquipmentListByAgreementCode(IwsCostPushBean leaseTotalInfo);
List<IwsCostPushBean> getProIdsByAgreementIds(@Param("agreementIds") String[] agreementIds);
List<IwsCostPushBean> getRentalCostList(IwsCostPushBean proIdsBean);
List<IwsCostPushBean> getBalanceCostList(IwsCostPushBean proIdsBean);
void updateCostPushCheckStatus(IwsCostPushBean proIdsBean);
void updatePushProjectInfo(IwsCostPushBean pushBean);
void updatePushBsd(IwsCostPushBean pushBean);
void updatePushProjectInfoReturn(IwsCostPushBean costDto);
void updatePushBsdReturn(IwsCostPushBean costDto);
List<IwsCostPushBean> getSafetyRentalCostList(IwsCostPushBean proIdsBean);
List<IwsCostPushBean> getSafetyBalanceCostList(IwsCostPushBean proIdsBean);
String getMonth(IwsCostPushBean taskId);
List<IwsCostPushBean> getSafetyConsumeCostList(IwsCostPushBean proIdsBean);
}

View File

@ -49,4 +49,13 @@ public interface IwsCostPushService {
* 根据工程/往来单位/协议号查询机具信息
*/
List<MaterialRetainedEquipmentInfo> getEquipmentListByAgreementCode(IwsCostPushBean record);
AjaxResult materialCostPush(IwsCostPushBean obj);
AjaxResult materialCostPushReturn(IwsCostPushBean bean);
AjaxResult safetyMaterialCostPush(IwsCostPushBean obj);
AjaxResult safetyConsumeMaterialCostPush(IwsCostPushBean obj);
}

View File

@ -1,13 +1,20 @@
package com.bonus.material.push.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.bonus.common.biz.config.DateTimeHelper;
import com.bonus.common.biz.utils.AesEncryptUtils;
import com.bonus.common.biz.utils.HttpHelper;
import com.bonus.common.biz.utils.StringHelper;
import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo;
import com.bonus.material.clz.domain.vo.lease.LeaseTotalInfo;
import com.bonus.material.push.domain.IwsCostPushBean;
import com.bonus.material.push.domain.ProIdsBean;
import com.bonus.material.push.mapper.IwsCostPushMapper;
import com.bonus.material.push.service.IwsCostPushService;
import com.bonus.material.settlement.domain.SltAgreementInfo;
@ -16,6 +23,7 @@ import com.bonus.material.settlement.domain.vo.PeriodCostResultVo;
import com.bonus.material.settlement.domain.vo.PeriodCostSummaryVo;
import com.bonus.material.settlement.domain.vo.SltInfoVo;
import com.bonus.material.settlement.service.ISltAgreementInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -39,6 +47,7 @@ import java.util.stream.Stream;
* @Description: 描述
*/
@Service
@Slf4j
public class IwsCostPushServiceImpl implements IwsCostPushService {
@Resource
@ -87,8 +96,9 @@ public class IwsCostPushServiceImpl implements IwsCostPushService {
@Override
public AjaxResult computeTheMonthCost(IwsCostPushBean costDto) {
// 获取当前年月 例如:2025-01
// todo String month = DateTimeHelper.getNowMonth();
String month = "2025-08";
// todo
String month = DateTimeHelper.getNowMonth();
// String month = "2025-08";
// 获取当月第一天的日期和最后一天日期
LocalDateTime firstDayOfMonth = getFirstDayOfMonth(month);
LocalDateTime lastDayOfMonth = getLastDayOfMonthZ(month);
@ -96,12 +106,12 @@ public class IwsCostPushServiceImpl implements IwsCostPushService {
// 当月第一天
LocalDate firstDay = LocalDate.now().withDayOfMonth(1);
// todo 测试用
firstDay = LocalDate.of(2025, 8, 1);
// LocalDate firstDay = LocalDate.of(2025, 8, 1);
Date firstDate = Date.from(firstDay.atStartOfDay(zone).toInstant());
// 当月最后一天
LocalDate lastDay = LocalDate.now().withDayOfMonth(LocalDate.now().lengthOfMonth());
// todo 测试用
lastDay = LocalDate.of(2025, 8, 31);
// LocalDate lastDay = LocalDate.of(2025, 8, 31);
Date lastDate = Date.from(lastDay.atStartOfDay(zone).toInstant());
// 塞入当前年月到参数中
@ -254,7 +264,7 @@ public class IwsCostPushServiceImpl implements IwsCostPushService {
// 转化未结算工器具费用
for (PeriodCostSummaryVo vo : unsettlementEquipmentLeaseCosts) {
resultArray.add(new IwsCostPushBean()
.setAgreementId(vo.getAgreementId()).setTaskId(costDto.getTaskId()).setSettlementType((byte) 1)
.setAgreementId(vo.getAgreementId()).setTaskId(costDto.getTaskId()).setSettlementType(1)
.setLeaseMoney(vo.getTotalLeaseCost())
.setConsumeMoney(vo.getTotalConsumeCost())
);
@ -262,7 +272,7 @@ public class IwsCostPushServiceImpl implements IwsCostPushService {
// 转化未结算安全工器具费用
for (PeriodCostSummaryVo vo : unsettlementSafetyEquipmentLeaseCosts) {
resultArray.add(new IwsCostPushBean()
.setAgreementId(vo.getAgreementId()).setTaskId(costDto.getTaskId()).setSettlementType((byte) 2)
.setAgreementId(vo.getAgreementId()).setTaskId(costDto.getTaskId()).setSettlementType(2)
.setLeaseMoney(vo.getTotalLeaseCost())
.setConsumeMoney(vo.getTotalConsumeCost())
);
@ -270,7 +280,7 @@ public class IwsCostPushServiceImpl implements IwsCostPushService {
// 转换已结算工器具费用
for (SltAgreementInfo vo : settlementEquipmentCosts) {
resultArray.add(new IwsCostPushBean()
.setAgreementId(vo.getAgreementId()).setTaskId(costDto.getTaskId()).setSettlementType((byte) 1)
.setAgreementId(vo.getAgreementId()).setTaskId(costDto.getTaskId()).setSettlementType(1)
.setLeaseMoney(vo.getLeaseCost()).setRepairMoney(vo.getRepairCost())
.setLostMoney(vo.getLoseCost()).setScrapMoney(vo.getScrapCost())
.setConsumeMoney(vo.getConsumeCost())
@ -279,7 +289,7 @@ public class IwsCostPushServiceImpl implements IwsCostPushService {
// 转换已结算安全工器具费用
for (SltAgreementInfo vo : settlementSafetyEquipmentCosts) {
resultArray.add(new IwsCostPushBean()
.setAgreementId(vo.getAgreementId()).setTaskId(costDto.getTaskId()).setSettlementType((byte) 2)
.setAgreementId(vo.getAgreementId()).setTaskId(costDto.getTaskId()).setSettlementType(2)
.setLeaseMoney(vo.getLeaseCost()).setRepairMoney(vo.getRepairCost())
.setLostMoney(vo.getLoseCost()).setScrapMoney(vo.getScrapCost())
.setConsumeMoney(vo.getConsumeCost())
@ -636,4 +646,415 @@ public class IwsCostPushServiceImpl implements IwsCostPushService {
}
return recordList;
}
/**
* 机具费用推送
*
*/
@Override
public AjaxResult materialCostPush(IwsCostPushBean costDto) {
List<IwsCostPushBean> proIdsBeans = new ArrayList<>();
if(costDto.getAgreementIds().length>0){
// 将协议合并成工程
proIdsBeans = iwsCostPushMapper.getProIdsByAgreementIds(costDto.getAgreementIds());
String month = iwsCostPushMapper.getMonth(costDto);
//获取费用列表
for (IwsCostPushBean proIdsBean : proIdsBeans) {
proIdsBean.setUserName(SecurityUtils.getLoginUser().getSysUser().getUserName());
proIdsBean.setSubmitUser(SecurityUtils.getLoginUser().getSysUser().getNickName());
proIdsBean.setTaskId(costDto.getTaskId());
proIdsBean.setMonth(month);
List<IwsCostPushBean> list = getMonthCosts(proIdsBean);
if(CollectionUtils.isNotEmpty(list)){
//分段推送
forHttpYouer(list,proIdsBean);
}
}
}
return AjaxResult.success(proIdsBeans);
}
/**
* 协议合并成工程
*
*/
public List<IwsCostPushBean> getMonthCosts(IwsCostPushBean proIdsBean){
List<IwsCostPushBean> list = new ArrayList<>();
//确定各个工程下的协议有哪些
proIdsBean.setAgreementIds(proIdsBean.getAgreementIdsStr().split( ","));
proIdsBean.setType("1");
proIdsBean.setSettlementType(1);
// 获取租赁详情列表
List<IwsCostPushBean> rentalCostList = iwsCostPushMapper.getRentalCostList(proIdsBean);
// 获取丢失详情列表
proIdsBean.setType("2");
List<IwsCostPushBean> lostCostList = iwsCostPushMapper.getBalanceCostList(proIdsBean);
// 获取维修详情列表
proIdsBean.setType("3");
List<IwsCostPushBean> repairCostList = iwsCostPushMapper.getBalanceCostList(proIdsBean);
// 获取报废详情列表
proIdsBean.setType("4");
List<IwsCostPushBean> scrapCostList = iwsCostPushMapper.getBalanceCostList(proIdsBean);
list.addAll(rentalCostList);
list.addAll(lostCostList);
list.addAll(repairCostList);
list.addAll(scrapCostList);
return list;
}
/**
* 分段推送
*
*/
private void forHttpYouer(List<IwsCostPushBean> list,IwsCostPushBean proIdsBean) {
System.err.println("list-=========:" + list.toString());
String content = JSONObject.toJSONString(list);
String encrypt;
try {
// 数据推送http请求
encrypt = AesEncryptUtils.encrypt(content, HttpHelper.KEY);
log.error("解密之后的数据-=========:" + AesEncryptUtils.decrypt(encrypt, HttpHelper.KEY));
System.err.println("解密之后的数据-=========:" + AesEncryptUtils.decrypt(encrypt, HttpHelper.KEY));
Map<String, String> map = new HashMap<String, String>();
map.put("body", encrypt);
String body = JSONObject.toJSONString(map);
// String url = "http://10.138.55.113:8036/micro-server/zygqj/syncProjectCostsData";
String url = "http://10.138.55.64:8036/micro-server/zygqj/syncProjectCostsData";
String data = HttpHelper.sendHttpPostPushCost(url, body);
System.err.println("dataString-=========:" + data);
list = resultDataHandler(data, list,proIdsBean);
// 创建数据更新参数
IwsCostPushBean pushBean = new IwsCostPushBean();
// 推送完成循环更新本次审核的数据
for (int i = 0; i < list.size(); i++) {
// 获取单个数据
IwsCostPushBean bean = list.get(i);
String pushStatus = "0";
String pushStatuString = bean.getPushStatus();
if (StringHelper.isEmpty(pushStatuString)) {
pushStatus = "1";
} else {
pushStatus = pushStatuString;
}
pushBean.setPushStatus(pushStatus);
pushBean.setPushRemark(bean.getPushRemark());
pushBean.setPushTime(DateTimeHelper.getNowTime());
pushBean.setId(bean.getId());
// 获取费用类型
String type = bean.getType();
if ("1".equals(type)) {
// 判断是租赁费用更新租赁费用数据
iwsCostPushMapper.updatePushProjectInfo(pushBean);
} else {
iwsCostPushMapper.updatePushBsd(pushBean);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 接口返回结果处理
*
* @param data
* @param list
* @return
* @throws Exception
*/
private List<IwsCostPushBean> resultDataHandler(String data, List<IwsCostPushBean> list,IwsCostPushBean proIdsBean) throws Exception {
JSONObject object = JSONObject.parseObject(data);
System.err.println(data);
String code = object.getString("code");
if ("200".equals(code)) {
iwsCostPushMapper.updateCostPushCheckStatus(proIdsBean);
String dataResultString = object.getString("data");
// 数据解密
String dataArrayString = AesEncryptUtils.decrypt(dataResultString, HttpHelper.KEY);
System.err.println("dataArrayString-=========:" + dataArrayString);
JSONArray dataArray = JSONArray.parseArray(dataArrayString);
if (dataArray != null && dataArray.size() > 0) {
// 有数据 推送异常(状态异常)
for (int i = 0; i < dataArray.size(); i++) {
JSONObject dataObject = dataArray.getJSONObject(i);
String resultId = dataObject.getString("id");
String resultPushRemark = dataObject.getString("pushRemark");
String pushStatus = "2";
for (int j = 0; j < list.size(); j++) {
IwsCostPushBean rentalCostsBean = list.get(j);
String id = rentalCostsBean.getId();
if (resultId.equals(id)) {
rentalCostsBean.setPushRemark(resultPushRemark);
rentalCostsBean.setPushStatus(pushStatus);
list.set(j, rentalCostsBean);
} else {
continue;
}
}
}
}else { //推送成功
for(int i = 0;i < list.size(); i++) {
IwsCostPushBean rentalCostsBean = list.get(i);
rentalCostsBean.setPushStatus("1");
rentalCostsBean.setPushRemark("推送成功");
list.set(i, rentalCostsBean);
}
}
return list;
} else {
for(int i = 0;i < list.size(); i++) {
IwsCostPushBean rentalCostsBean = list.get(i);
rentalCostsBean.setPushStatus("0");
rentalCostsBean.setPushRemark("推送失败,接口异常,请联系开发人员排查问题");;
list.set(i, rentalCostsBean);
}
return list;
}
}
/**
* 机具费用推送数据回退
*
*/
@Override
public AjaxResult materialCostPushReturn(IwsCostPushBean costDto) {
String type = costDto.getType();
if("1".equals(type)){
//租赁费用
iwsCostPushMapper.updatePushProjectInfoReturn(costDto);
}else if("2".equals(type) || "3".equals(type) || "4".equals(type)){
//丢失费用维修费用报废费用
iwsCostPushMapper.updatePushBsdReturn(costDto);
} else {
// 补充处理未知类型避免静默失败
return AjaxResult.error("不支持的费用类型:" + type);
}
return AjaxResult.success();
}
/**
* 安全机具费用推送
*
*/
@Override
public AjaxResult safetyMaterialCostPush(IwsCostPushBean costDto) {
List<IwsCostPushBean> proIdsBeans = new ArrayList<>();
if(costDto.getAgreementIds().length>0){
// 将协议合并成工程
proIdsBeans = iwsCostPushMapper.getProIdsByAgreementIds(costDto.getAgreementIds());
String month = iwsCostPushMapper.getMonth(costDto);
//获取费用列表
for (IwsCostPushBean proIdsBean : proIdsBeans) {
proIdsBean.setUserName(SecurityUtils.getLoginUser().getSysUser().getUserName());
proIdsBean.setSubmitUser(SecurityUtils.getLoginUser().getSysUser().getNickName());
proIdsBean.setTaskId(costDto.getTaskId());
proIdsBean.setMonth(month);
List<IwsCostPushBean> list = getSafetyMonthCosts(proIdsBean);
if(CollectionUtils.isNotEmpty(list)){
//分段推送
forHttpYouerSafety(list,proIdsBean);
}
}
}
return AjaxResult.success(proIdsBeans);
}
public List<IwsCostPushBean> getSafetyMonthCosts(IwsCostPushBean proIdsBean){
List<IwsCostPushBean> list = new ArrayList<>();
//确定各个工程下的协议有哪些
proIdsBean.setAgreementIds(proIdsBean.getAgreementIdsStr().split( ","));
proIdsBean.setType("1");
proIdsBean.setSettlementType(2);
proIdsBean.setComsumeType(0);
// 获取租赁详情列表
List<IwsCostPushBean> rentalCostList = iwsCostPushMapper.getSafetyRentalCostList(proIdsBean);
// 获取丢失详情列表
proIdsBean.setType("2");
List<IwsCostPushBean> lostCostList = iwsCostPushMapper.getSafetyBalanceCostList(proIdsBean);
// 获取报废详情列表
proIdsBean.setType("4");
List<IwsCostPushBean> scrapCostList = iwsCostPushMapper.getSafetyBalanceCostList(proIdsBean);
list.addAll(rentalCostList);
list.addAll(lostCostList);
list.addAll(scrapCostList);
return list;
}
/**
* 安全工机具分段推送
*
*/
private void forHttpYouerSafety(List<IwsCostPushBean> list,IwsCostPushBean proIdsBean) {
System.err.println("list-=========:" + list.toString());
String content = JSONObject.toJSONString(list);
String encrypt;
try {
// 数据推送http请求
encrypt = AesEncryptUtils.encrypt(content, HttpHelper.KEY);
System.err.println("租赁费、维修费用、报废费推送数据解密======" + AesEncryptUtils.decrypt(encrypt, HttpHelper.KEY));
Map<String, String> map = new HashMap<String, String>();
map.put("body", encrypt);
String body = JSONObject.toJSONString(map);
String url = "http://10.138.55.64:8036/micro-server/zzaqgjf/syncSafetyTool";
// String url = "http://10.138.55.105:8097/micro-server/zzaqgjf/syncSafetyTool";
// String url = "http://192.168.1.121:8036/micro-server/zzaqgjf/syncSafetyTool";
String data = HttpHelper.sendHttpPost(url, body);
JSONObject object = JSONObject.parseObject(data);
System.err.println(data);
list = resultDataHandler(data, list,proIdsBean);
// 创建数据更新参数
IwsCostPushBean pushBean = new IwsCostPushBean();
// 推送完成循环更新本次审核的数据
for (int i = 0; i < list.size(); i++) {
// 获取单个数据
IwsCostPushBean bean = list.get(i);
String pushStatus = "0";
String pushStatuString = bean.getPushStatus();
if (StringHelper.isEmpty(pushStatuString)) {
pushStatus = "1";
} else {
pushStatus = pushStatuString;
}
pushBean.setPushStatus(pushStatus);
pushBean.setPushRemark(bean.getPushRemark());
pushBean.setPushTime(DateTimeHelper.getNowTime());
pushBean.setId(bean.getId());
// 获取费用类型
String type = bean.getType();
if ("1".equals(type)) {
// 判断是租赁费用更新租赁费用数据
iwsCostPushMapper.updatePushProjectInfo(pushBean);
} else {
iwsCostPushMapper.updatePushBsd(pushBean);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 安全工机具(消费性)费用推送
*
*/
@Override
public AjaxResult safetyConsumeMaterialCostPush(IwsCostPushBean costDto) {
List<IwsCostPushBean> proIdsBeans = new ArrayList<>();
if(costDto.getAgreementIds().length>0){
// 将协议合并成工程
proIdsBeans = iwsCostPushMapper.getProIdsByAgreementIds(costDto.getAgreementIds());
String month = iwsCostPushMapper.getMonth(costDto);
//获取费用列表
for (IwsCostPushBean proIdsBean : proIdsBeans) {
proIdsBean.setUserName(SecurityUtils.getLoginUser().getSysUser().getUserName());
proIdsBean.setSubmitUser(SecurityUtils.getLoginUser().getSysUser().getNickName());
proIdsBean.setTaskId(costDto.getTaskId());
proIdsBean.setMonth(month);
List<IwsCostPushBean> list = getSafetyConsumeMonthCosts(proIdsBean);
if(CollectionUtils.isNotEmpty(list)){
//分段推送
forHttpYouerSafetyConsume(list,proIdsBean);
}
}
}
return AjaxResult.success(proIdsBeans);
}
public List<IwsCostPushBean> getSafetyConsumeMonthCosts(IwsCostPushBean proIdsBean){
List<IwsCostPushBean> list = new ArrayList<>();
//确定各个工程下的协议有哪些
proIdsBean.setAgreementIds(proIdsBean.getAgreementIdsStr().split( ","));
proIdsBean.setType("1");
proIdsBean.setSettlementType(2);
proIdsBean.setComsumeType(1);
// 获取租赁详情列表
List<IwsCostPushBean> rentalCostList = iwsCostPushMapper.getSafetyConsumeCostList(proIdsBean);
list.addAll(rentalCostList);
return list;
}
/**
* 安全工机具(消费性)分段推送
*
*/
private void forHttpYouerSafetyConsume(List<IwsCostPushBean> list,IwsCostPushBean proIdsBean) {
System.err.println("list-=========:" + list.toString());
String content = JSONObject.toJSONString(list);
String encrypt;
try {
// 数据推送http请求
encrypt = AesEncryptUtils.encrypt(content, HttpHelper.KEY);
System.err.println("租赁费、维修费用、报废费推送数据解密======" + AesEncryptUtils.decrypt(encrypt, HttpHelper.KEY));
Map<String, String> map = new HashMap<String, String>();
map.put("body", encrypt);
String body = JSONObject.toJSONString(map);
String url = "http://10.138.55.64:8036/micro-server/consumetool/syncConsumeTool";
// String url = "http://10.138.55.105:8097/micro-server/zzaqgjf/syncSafetyTool";
// String url = "http://192.168.1.121:8036/micro-server/zzaqgjf/syncSafetyTool";
String data = HttpHelper.sendHttpPost(url, body);
JSONObject object = JSONObject.parseObject(data);
System.err.println(data);
list = resultDataHandler(data, list,proIdsBean);
// 创建数据更新参数
IwsCostPushBean pushBean = new IwsCostPushBean();
// 推送完成循环更新本次审核的数据
for (int i = 0; i < list.size(); i++) {
// 获取单个数据
IwsCostPushBean bean = list.get(i);
String pushStatus = "0";
String pushStatuString = bean.getPushStatus();
if (StringHelper.isEmpty(pushStatuString)) {
pushStatus = "1";
} else {
pushStatus = pushStatuString;
}
pushBean.setPushStatus(pushStatus);
pushBean.setPushRemark(bean.getPushRemark());
pushBean.setPushTime(DateTimeHelper.getNowTime());
pushBean.setId(bean.getId());
// 获取费用类型
String type = bean.getType();
if ("1".equals(type)) {
// 判断是租赁费用更新租赁费用数据
iwsCostPushMapper.updatePushProjectInfo(pushBean);
} else {
iwsCostPushMapper.updatePushBsd(pushBean);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

View File

@ -24,6 +24,8 @@ public class IwsCostPushTask {
/**
* 定时任务 -- 计算月结费用 -- 每月最后一天的23点30分执行
*/
// @Scheduled(cron = "0 30 23 L * ?")
// @Scheduled(cron = "0 03 10 * * ?")
@Scheduled(cron = "0 30 23 L * ?")
public void computeTheMonthCostTask() {
System.out.println("-----------开始计算四类未结算费用定时器-----------");
@ -32,4 +34,6 @@ public class IwsCostPushTask {
}
}

View File

@ -469,7 +469,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bp.external_id AS externalId,
bu.bzz_idcard AS idCard,
bp.imp_unit AS impUnit,
lai.remark as remark
lai.remark as remark,
CASE
WHEN MAX(IFNULL(lad.is_update, 0)) = 1 THEN 1
ELSE 0
END as isUpdate
from
lease_apply_info lai
left join tm_task tt on lai.task_id = tt.task_id
@ -1120,7 +1124,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bp.external_id AS externalId,
bu.bzz_idcard AS idCard,
bp.imp_unit AS impUnit,
lpd.remark as remark
lpd.remark as remark,
CASE
WHEN MAX(IFNULL(lpd.is_update, 0)) = 1 THEN 1
ELSE 0
END as isUpdate
FROM
lease_publish_details lpd
LEFT JOIN lease_apply_info lai ON lai.id = lpd.parent_id

View File

@ -46,7 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
pmc.id AS id, pmc.AGREEMENT_ID AS agreementId, IF(ISNULL(pmc.check_status), 0, pmc.check_status) AS checkStatus,
pmc.LEASE_MONEY AS leaseMoney, pmc.LOST_MONEY AS lostMoney, pmc.REPAIR_MONEY AS repairMoney, pmc.SCRAP_MONEY AS scrapMoney,
bma.agreement_code AS agreementCode, bma.is_slt AS isSettlement, pmc.TYPE AS settlementType,
bp.pro_name AS projectName, bu.unit_name AS unitName,
bp.pro_name AS projectName, bu.unit_name AS unitName,cpm.id as taskId,
ROUND(
SUM(ifnull( pmc.LEASE_MONEY, 0 )+ ifnull( pmc.LOST_MONEY, 0 )+ ifnull( pmc.REPAIR_MONEY, 0 )+ ifnull( pmc.SCRAP_MONEY, 0 )), 2
) AS money
@ -57,6 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN bm_project bp ON bp.pro_id = bma.project_id
LEFT JOIN bm_unit bu ON bu.unit_id = bma.unit_id
WHERE
pmc.type = 1 and
( pmc.LEASE_MONEY > 0 OR pmc.LOST_MONEY > 0 OR pmc.REPAIR_MONEY > 0 OR pmc.SCRAP_MONEY > 0 )
<if test="checkStatus != null">
AND pmc.check_status = #{checkStatus}
@ -444,5 +445,265 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</insert>
<select id="getProIdsByAgreementIds" resultType="com.bonus.material.push.domain.IwsCostPushBean">
select project_id as proId,
GROUP_CONCAT(agreement_id) as agreementIdsStr
from bm_agreement_info where agreement_id in
<foreach collection="agreementIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
group by project_id
</select>
<select id="getRentalCostList" resultType="com.bonus.material.push.domain.IwsCostPushBean">
select
pmi.id as id,
bp.external_id as projectId,
bp.pro_name as projectName,
bu.unit_id as unitId,
bu.unit_name as unitName,
pmi.agreementId as agreementId,
pmi.typeId as typeId,
mt2.type_name as typeName,
mt.type_name as modelName,
pmi.leaseNum as num,
pmi.leaseDate as leaseDate,
pmi.returnDate as backDate,
pmi.leasePrice as buyPrice,
pmi.leaseMoney as money,
cpm.month as month,
1 as type,
1 as category,
#{submitUser} as submitUser
from project_month_info pmi
left join calc_project_month cpm on pmi.taskId = cpm.id
left join bm_agreement_info bai on pmi.agreementId = bai.agreement_id
left join bm_project bp on bai.project_id = bp.pro_id
left join bm_unit bu on bai.unit_id = bu.unit_id
left join ma_type mt on pmi.typeId = mt.type_id
left join ma_type mt2 on mt.parent_id = mt2.type_id
where
pmi.agreementId in
<foreach collection="agreementIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="taskId != null">
and pmi.taskId = #{taskId}
</if>
<if test="settlementType != null">
and pmi.jiju_type = #{settlementType}
</if>
</select>
<select id="getBalanceCostList" resultType="com.bonus.material.push.domain.IwsCostPushBean">
select
sad.id as id,
bp.external_id as projectId,
bp.pro_name as projectName,
bu.unit_id as unitId,
bu.unit_name as unitName,
saa.agreement_id as agreementId,
sad.type_id as typeId,
mt2.type_name as typeName,
mt.type_name as modelName,
sad.num as num,
sad.price as buyPrice,
sad.money as money,
#{type} as type,
1 as category,
#{submitUser} as submitUser,
#{month} as month
from slt_agreement_details sad
left join slt_agreement_apply saa on saa.id = sad.apply_id
left join bm_agreement_info bai on saa.agreement_id = bai.agreement_id
left join bm_project bp on bai.project_id = bp.pro_id
left join bm_unit bu on bai.unit_id = bu.unit_id
left join ma_type mt on sad.type_id = mt.type_id
left join ma_type mt2 on mt.parent_id = mt2.type_id
where
saa.status = 2
and saa.agreement_id in
<foreach collection="agreementIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="type != null">
and sad.slt_type = #{type}
</if>
<if test="settlementType != null">
and saa.settlement_type = #{settlementType}
</if>
</select>
<update id="updateCostPushCheckStatus">
UPDATE project_month_costs SET check_status = 1, check_time = now(),check_user = #{userName}
WHERE task_id = #{taskId}
and agreement_id in
<foreach collection="agreementIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="settlementType != null and settlementType == 1">
and type = #{settlementType}
</if>
<if test="settlementType != null and settlementType == 2 and comsumeType !=null and comsumeType == 0">
and type = #{settlementType} and (consume_money = 0 || consume_money is null)
</if>
<if test="settlementType != null and settlementType == 2 and comsumeType !=null and comsumeType == 1">
and type = #{settlementType} and consume_money > 0
</if>
</update>
<update id="updatePushProjectInfo">
UPDATE project_month_info SET push_status = #{pushStatus}, push_time = #{pushTime}, push_remark = #{pushRemark}
WHERE id = #{id}
</update>
<update id="updatePushBsd">
UPDATE slt_agreement_details SET push_status = #{pushStatus}, push_time = #{pushTime}, push_remark = #{pushRemark}
WHERE id = #{id}
</update>
<update id="updatePushProjectInfoReturn">
UPDATE project_month_info SET push_status = 2, push_remark = #{pushRemark}
WHERE id = #{id}
</update>
<update id="updatePushBsdReturn">
UPDATE slt_agreement_details SET push_status = 2, push_remark = #{pushRemark}
WHERE id = #{id}
</update>
<select id="getSafetyRentalCostList" resultType="com.bonus.material.push.domain.IwsCostPushBean">
select
pmi.id as id,
bp.external_id as projectId,
bp.pro_name as projectName,
bu.unit_id as unitId,
bu.unit_name as unitName,
pmi.agreementId as agreementId,
pmi.typeId as typeId,
mt2.type_name as typeName,
mt.type_name as modelName,
pmi.leaseNum as num,
pmi.leaseDate as leaseDate,
pmi.returnDate as backDate,
pmi.leasePrice as buyPrice,
pmi.leaseMoney as money,
cpm.month as month,
1 as type,
2 as category,
#{submitUser} as submitUser
from project_month_info pmi
left join calc_project_month cpm on pmi.taskId = cpm.id
left join bm_agreement_info bai on pmi.agreementId = bai.agreement_id
left join bm_project bp on bai.project_id = bp.pro_id
left join bm_unit bu on bai.unit_id = bu.unit_id
left join ma_type mt on pmi.typeId = mt.type_id
left join ma_type mt2 on mt.parent_id = mt2.type_id
where
pmi.agreementId in
<foreach collection="agreementIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="taskId != null">
and pmi.taskId = #{taskId}
</if>
<if test="settlementType != null">
and pmi.jiju_type = #{settlementType}
</if>
<if test="comsumeType == 0">
and pmi.money = 0
</if>
<if test="comsumeType == 1">
and pmi.money > 0
</if>
</select>
<select id="getSafetyBalanceCostList" resultType="com.bonus.material.push.domain.IwsCostPushBean">
select
sad.id as id,
bp.external_id as projectId,
bp.pro_name as projectName,
bu.unit_id as unitId,
bu.unit_name as unitName,
saa.agreement_id as agreementId,
sad.type_id as typeId,
mt2.type_name as typeName,
mt.type_name as modelName,
sad.num as num,
sad.price as buyPrice,
sad.money as money,
#{type} as type,
2 as category,
#{submitUser} as submitUser,
#{month} as month
from slt_agreement_details sad
left join slt_agreement_apply saa on saa.id = sad.apply_id
left join bm_agreement_info bai on saa.agreement_id = bai.agreement_id
left join bm_project bp on bai.project_id = bp.pro_id
left join bm_unit bu on bai.unit_id = bu.unit_id
left join ma_type mt on sad.type_id = mt.type_id
left join ma_type mt2 on mt.parent_id = mt2.type_id
where
saa.status = 2
and saa.agreement_id in
<foreach collection="agreementIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="type != null">
and sad.slt_type = #{type}
</if>
<if test="settlementType != null">
and saa.settlement_type = #{settlementType}
</if>
</select>
<select id="getMonth" resultType="java.lang.String">
select
cpm.month as month
from calc_project_month cpm
where cpm.id = #{taskId}
</select>
<select id="getSafetyConsumeCostList" resultType="com.bonus.material.push.domain.IwsCostPushBean">
select
pmi.id as id,
bp.external_id as projectId,
bp.pro_name as projectName,
bu.unit_id as unitId,
bu.unit_name as unitName,
pmi.agreementId as agreementId,
pmi.typeId as typeId,
mt2.type_name as typeName,
mt.type_name as modelName,
pmi.leaseNum as quantity,
pmi.leaseDate as leaseDate,
pmi.returnDate as backDate,
pmi.buy_price as netPrice,
pmi.money as cost,
cpm.month as month,
1 as type,
2 as category,
#{submitUser} as submitUser
from project_month_info pmi
left join calc_project_month cpm on pmi.taskId = cpm.id
left join bm_agreement_info bai on pmi.agreementId = bai.agreement_id
left join bm_project bp on bai.project_id = bp.pro_id
left join bm_unit bu on bai.unit_id = bu.unit_id
left join ma_type mt on pmi.typeId = mt.type_id
left join ma_type mt2 on mt.parent_id = mt2.type_id
where
pmi.agreementId in
<foreach collection="agreementIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="taskId != null">
and pmi.taskId = #{taskId}
</if>
<if test="settlementType != null">
and pmi.jiju_type = #{settlementType}
</if>
<if test="comsumeType == 0">
and pmi.money = 0
</if>
<if test="comsumeType == 1">
and pmi.money > 0
</if>
</select>
</mapper>

View File

@ -9,6 +9,7 @@
select
pmc.id ,
pmc.task_id as taskId,
pmc.agreement_id AS agreementId,
bu.unit_name as unitName,
bai.unit_id as unitId,
bp.pro_name as projectName,
@ -42,11 +43,12 @@
LEFT JOIN bm_agreement_info bai ON pmi.agreementId = bai.agreement_id
LEFT JOIN bm_project bp ON bp.pro_id = bai.project_id
LEFT JOIN calc_project_month cpm ON pmi.taskId = cpm.ID
where pmi.jiju_type = 2
GROUP BY
pmi.agreementId
) pmia on bai.project_id = pmia.project_id and pmc.task_id=pmia.taskId and pmia.agreementId=pmc.AGREEMENT_ID
where
bp.pro_id is not null
bp.pro_id is not null and pmc.type = 2
and
(pmc.LEASE_MONEY > 0 or pmc.LOST_MONEY > 0 or pmc.REPAIR_MONEY > 0 or pmc.SCRAP_MONEY > 0)
<if test="status != null">
@ -70,46 +72,56 @@
SELECT
pmc.id,
pmc.task_id AS taskId,
pmc.agreement_id AS agreementId,
bu.unit_name AS unitName,
bai.unit_id AS unitId,
bp.pro_name AS projectName,
bp.pro_id AS projectId,
bp.pro_code AS proCode,
cpm.`MONTH`,
pmc.LEASE_MONEY AS leaseMoney,
pmc.LOST_MONEY AS lostMoney,
pmc.SCRAP_MONEY AS scrapMoney,
pmc.REPAIR_MONEY AS repairMoney,
pmia.push_status AS pushStatus,
pmia.push_remark AS pushRemark,
ROUND( ifnull( pmc.LEASE_MONEY, 0 )+ ifnull( pmc.LOST_MONEY, 0 )+ ifnull( pmc.SCRAP_MONEY, 0 ), 2 ) AS money,
ifnull( pmc.CONSUME_MONEY, 0 ) AS leaseMoney,
pmc.CHECK_STATUS AS checkStatus
FROM
FROM
project_month_costs pmc
LEFT JOIN bm_agreement_info bai ON bai.agreement_id = pmc.AGREEMENT_ID
LEFT JOIN calc_project_month cpm ON pmc.task_id = cpm.id
LEFT JOIN bm_unit bu ON bu.unit_id = bai.unit_id
LEFT JOIN bm_project bp ON bp.pro_id = bai.project_id
LEFT JOIN (
SELECT
pmi.type,
pmi.agreementId,
pmi.taskId,
pmi.push_status,
pmi.push_remark,
bai.unit_id,
bai.project_id
FROM
project_month_info pmi
LEFT JOIN bm_agreement_info bai ON pmi.agreementId = bai.agreement_id
LEFT JOIN bm_project bp ON bp.pro_id = bai.project_id
LEFT JOIN calc_project_month cpm ON pmi.taskId = cpm.ID
GROUP BY
pmi.agreementId
) pmia ON bai.project_id = pmia.project_id AND pmc.task_id = pmia.taskId AND pmia.agreementId = pmc.AGREEMENT_ID
SELECT
pmi.type,
pmi.agreementId,
pmi.taskId,
pmi.push_status,
pmi.push_remark,
bai.unit_id,
bai.project_id
FROM
project_month_info pmi
LEFT JOIN bm_agreement_info bai ON pmi.agreementId = bai.agreement_id
LEFT JOIN bm_project bp ON bp.pro_id = bai.project_id
LEFT JOIN calc_project_month cpm ON pmi.taskId = cpm.ID
where pmi.jiju_type = 2
GROUP BY
pmi.agreementId
) pmia ON bai.project_id = pmia.project_id AND pmc.task_id = pmia.taskId AND pmia.agreementId = pmc.AGREEMENT_ID
WHERE
bp.pro_id IS NOT NULL
AND ( pmc.LEASE_MONEY > 0 OR pmc.LOST_MONEY > 0 OR pmc.REPAIR_MONEY > 0 OR pmc.SCRAP_MONEY > 0 )
bp.pro_id IS NOT NULL and pmc.type = 2
and pmc.CONSUME_MONEY>0
<if test="status != null">
AND pmia.push_status = #{status}
</if>
<if test="month != null">
AND cpm.month = #{month}
</if>
<if test="projectId != null and projectId != ''">
AND bp.pro_id = #{projectId}
</if>
<if test="unitId != null and unitId != ''">
AND bu.unit_id = #{unitId}
</if>
GROUP BY
bai.project_id, bai.unit_id
ORDER BY