Commit f71f6cbd authored by wanghao's avatar wanghao

1 液化石油气监管-充装记录-导入和外部对接接口加上 企业信息涉及到功能模块调整。

parent 32ca5b5e
......@@ -6,12 +6,10 @@ import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.zehong.common.core.domain.AjaxResult;
import com.zehong.common.utils.StringUtils;
import com.zehong.system.domain.Encryption;
import com.zehong.system.domain.TEnterpriseInfo;
import com.zehong.system.domain.TLpgGasBottleFiles;
import com.zehong.system.domain.keyInformation;
import com.zehong.system.domain.*;
import com.zehong.system.mapper.TEnterpriseInfoMapper;
import com.zehong.system.service.DecryptService;
import com.zehong.system.service.ITLpgAirChargeFilesService;
import com.zehong.system.service.ITLpgGasBottleFilesService;
import com.zehong.web.controller.tool.DESEncoder;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -28,10 +26,8 @@ import java.io.IOException;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 液化气-外部对接controller
......@@ -46,6 +42,12 @@ public class lpgGasController {
@Autowired
private ITLpgGasBottleFilesService tLpgGasBottleFilesService;
/**
* 充装记录
*/
@Resource
private ITLpgAirChargeFilesService itLpgAirChargeFilesService;
@Autowired
DecryptService decryptService;
......@@ -91,7 +93,6 @@ public class lpgGasController {
String dateFormat = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
System.out.println(list.get(i));
JSONObject jsonObject = list.get(i);
// 气瓶条码
......@@ -382,4 +383,192 @@ public class lpgGasController {
}
/**
* 创建 充装记录接口
* @return r
*/
@PostMapping("/createLpgAirChargeFiles")
public AjaxResult createLpgAirChargeFiles(@RequestBody Encryption encryption){
keyInformation selectkey = decryptService.selectkey(encryption.getQybm());
DESEncoder desEncoder=new DESEncoder();
String data = encryption.getData();
String decrypt = desEncoder.decrypt(data, selectkey.getSecretKey());
TEnterpriseInfo tEnterpriseInfo = tEnterpriseInfoMapper.selectTEnterpriseInfoById(selectkey.getEnterpriseId());
if(tEnterpriseInfo == null) {
return AjaxResult.error("监管平台配置企业信息不存在!!!");
}
int successNum = 0;
int errorNum = 0;
if (StringUtils.isNotBlank(decrypt)) {
JSONArray jsonArray = JSON.parseArray(decrypt);
String js = JSONObject.toJSONString(jsonArray, SerializerFeature.WriteClassName);
List<JSONObject> list = JSONObject.parseArray(js, JSONObject.class);
List<TLpgAirChargeFiles> lpgAirChargeFiles = new ArrayList<>();
TLpgAirChargeFiles tLpgAirChargeFiles;
for (int i = 0; i < list.size(); i++) {
tLpgAirChargeFiles = new TLpgAirChargeFiles();
String dateFormat = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
JSONObject jsonObject = list.get(i);
// 气瓶条码
String barCode = jsonObject.getString("barCode");
if(StringUtils.isBlank(barCode)) {
errorNum++;
continue;
}
// 充装开始时间
String fillStatrTime = jsonObject.getString("fillStatrTime") == null ? "" : jsonObject.getString("fillStatrTime");
if(StringUtils.isNotBlank(fillStatrTime) && !isValidDate(sdf,fillStatrTime)) {
errorNum++;
continue;
}
// 充装结束时间
String fillEndTime = jsonObject.getString("fillEndTime") == null ? "" : jsonObject.getString("fillEndTime");
if(StringUtils.isNotBlank(fillEndTime) && !isValidDate(sdf,fillEndTime)) {
errorNum++;
continue;
}
tLpgAirChargeFiles.setBarCode(barCode);
tLpgAirChargeFiles.setFillStatrTime(fillStatrTime);
tLpgAirChargeFiles.setFillEndTime(fillEndTime);
// 充装记录编号
String gzId = jsonObject.getString("gzId") == null ? "" : jsonObject.getString("gzId");
if (StringUtils.isNotBlank(gzId)) {
try {
long l = Long.parseLong(gzId);
tLpgAirChargeFiles.setGzId(l);
}catch (NumberFormatException e) {
tLpgAirChargeFiles.setGzId(0L);
}
}
// 充装单位
String stationName = jsonObject.getString("stationName") == null ? "" : jsonObject.getString("stationName");
tLpgAirChargeFiles.setStationName(stationName);
// 钢印号
String vaseCode = jsonObject.getString("vaseCode") == null ? "" : jsonObject.getString("vaseCode");
tLpgAirChargeFiles.setVaseCode(vaseCode);
// 秤号
String scaleNum = jsonObject.getString("scaleNum") == null ? "" : jsonObject.getString("scaleNum");
tLpgAirChargeFiles.setScaleNum(scaleNum);
// 充装工
String oprateName = jsonObject.getString("oprateName") == null ? "" : jsonObject.getString("oprateName");
tLpgAirChargeFiles.setOprateName(oprateName);
// 设定净重
String setWeight = jsonObject.getString("setWeight") == null ? "" : jsonObject.getString("setWeight");
if (StringUtils.isNotBlank(setWeight)) {
try {
new BigDecimal(setWeight);
tLpgAirChargeFiles.setSetWeight(setWeight);
}catch (NumberFormatException e) {
tLpgAirChargeFiles.setSetWeight("0");
}
}
// 实际净重
String wtNet = jsonObject.getString("wtNet") == null ? "" : jsonObject.getString("wtNet");
if (StringUtils.isNotBlank(wtNet)) {
try {
new BigDecimal(wtNet);
tLpgAirChargeFiles.setWtNet(wtNet);
}catch (NumberFormatException e) {
tLpgAirChargeFiles.setWtNet("0");
}
}
// 设定瓶重
String setBottleWeight = jsonObject.getString("setBottleWeight") == null ? "" : jsonObject.getString("setBottleWeight");
if (StringUtils.isNotBlank(setBottleWeight)) {
try {
new BigDecimal(setBottleWeight);
tLpgAirChargeFiles.setSetBottleWeight(setBottleWeight);
}catch (NumberFormatException e) {
tLpgAirChargeFiles.setSetBottleWeight("0");
}
}
// 实际瓶重
String bottleWeight = jsonObject.getString("bottleWeight") == null ? "" : jsonObject.getString("bottleWeight");
if (StringUtils.isNotBlank(bottleWeight)) {
try {
new BigDecimal(bottleWeight);
tLpgAirChargeFiles.setBottleWeight(bottleWeight);
}catch (NumberFormatException e) {
tLpgAirChargeFiles.setBottleWeight("0");
}
}
// 实际总重
String wtGross = jsonObject.getString("wtGross") == null ? "" : jsonObject.getString("wtGross");
if (StringUtils.isNotBlank(wtGross)) {
try {
new BigDecimal(wtGross);
tLpgAirChargeFiles.setWtGross(wtGross);
}catch (NumberFormatException e) {
tLpgAirChargeFiles.setWtGross("0");
}
}
lpgAirChargeFiles.add(tLpgAirChargeFiles);
}
// 看看 气瓶条码是否 都符合规则
List<TLpgAirChargeFiles> successLpgAirChargeFiles = new ArrayList<>();
if (lpgAirChargeFiles.size() > 0) {
List<String> collect = lpgAirChargeFiles.stream().map(TLpgAirChargeFiles::getBarCode).collect(Collectors.toList());
List<TLpgGasBottleFiles> lpgGasBottleFiles = tLpgGasBottleFilesService.queryALlByQrcodeList(collect);
Map<String, List<TLpgGasBottleFiles>> collect1 = lpgGasBottleFiles.stream().collect(Collectors.groupingBy(TLpgGasBottleFiles::getQrcode));
for (TLpgAirChargeFiles lpgAirChargeFile : lpgAirChargeFiles) {
List<TLpgGasBottleFiles> lpgGasBottleFiles1 = collect1.get(lpgAirChargeFile.getBarCode());
if (lpgGasBottleFiles1 != null && lpgGasBottleFiles1.size() > 0) {
successNum++;
successLpgAirChargeFiles.add(lpgAirChargeFile);
} else {
errorNum ++;
}
}
}
if (successLpgAirChargeFiles.size() > 0) {
int i = itLpgAirChargeFilesService.externalDockingCreateLpgAirChargeFileInfo(successLpgAirChargeFiles);
if (i < 1) {
return AjaxResult.error("监管平台入库异常!!!");
}
}
}
StringBuilder sb = new StringBuilder();
if (errorNum > 0) {
sb.append("成功:").append(successNum).append("条;失败:").append(errorNum).append("条");
return AjaxResult.success(sb.toString());
}
sb.append("成功:").append(successNum).append("条");
return AjaxResult.success(sb.toString());
}
}
......@@ -158,92 +158,41 @@ public class DESEncoder {
// System.out.println(DESEncoder.encrypt(skcs1,"23546324"));
String lpggasdata = "[\n" +
" {\n" +
" \"qrcode\":\"111111\",\n" +
" \"makeDate\":\"2024-12-16\",\n" +
" \"pchkDate\":\"2024-12-17\",\n" +
" \"nchkDate\":\"2024-12-18\",\n" +
" \"productDate\":\"2024-12-19\",\n" +
" \"discardDate\":\"2024-12-20\",\n" +
" \"safeJudgeDate\":\"2024-12-21\",\n" +
" \"makeInfo\":\"生产(制造单位)\",\n" +
" \"regCode\":\"登记证号-接口来的-01\",\n" +
" \"equNo\":\"产品编号-接口来的-01\",\n" +
" \"equType\":\"设备类型-接口来的-01\",\n" +
" \"medium\":\"充装介质-接口来的-01\",\n" +
" \"selfId\":\"单位内编号-接口来的-01\",\n" +
" \"pressure\":\"12.5\",\n" +
" \"volume\":\"30.6\",\n" +
" \"appId\":\"电子标签-接口来的-01\",\n" +
" \"buildUser\":\"使用单位-接口来的-01\",\n" +
" \"gpressure\":\"公称压力-接口来的-01\",\n" +
" \"wpressure\":\"15.96\",\n" +
" \"selfWeight\":\"15.98\",\n" +
" \"thickness\":\"15.46\",\n" +
" \"permitNo\":\"气瓶许可证号-接口来的-01\",\n" +
" \"valveName\":\"阀类型名称-接口来的-01\",\n" +
" \"botSpecName\":\"钢瓶规格名称-接口来的-01\",\n" +
" \"inspectedTimes\":\"14\",\n" +
" \"valveManuFacturer\":\"阀厂家-接口来的-01\",\n" +
" \"inspectionLabel\":\"检验标牌(有/无)-接口来的-01\",\n" +
" \"thirdPartyLabel\":\"第三方标签-接口来的-01\",\n" +
" \"holeCode\":\"孔洞码-接口来的-01\",\n" +
" \"bottleStorageType\":\"存储类型(气相/液相)-接口来的-01\",\n" +
" \"payImage\":\"\",\n" +
" \"batchImage\":\"\",\n" +
" \"deviceImage\":\"\",\n" +
" \"checkImage\":\"\",\n" +
" \"botImage\":\"\",\n" +
" },\n" +
" {\n" +
"\n" +
" \"qrcode\":\"222222\",\n" +
" \"makeDate\":\"2024-12-21\",\n" +
" \"pchkDate\":\"2024-12-22\",\n" +
" \"nchkDate\":\"2024-12-23\",\n" +
" \"productDate\":\"2024-12-24\",\n" +
" \"discardDate\":\"2024-12-25\",\n" +
" \"safeJudgeDate\":\"2024-12-26\",\n" +
" \"makeInfo\":\"生产(制造单位)\",\n" +
" \"regCode\":\"登记证号-接口来的-02\",\n" +
" \"equNo\":\"产品编号-接口来的-02\",\n" +
" \"equType\":\"设备类型-接口来的-02\",\n" +
" \"medium\":\"充装介质-接口来的-02\",\n" +
" \"selfId\":\"单位内编号-接口来的-02\",\n" +
" \"pressure\":\"12.5\",\n" +
" \"volume\":\"30.6\",\n" +
" \"appId\":\"电子标签-接口来的-02\",\n" +
" \"buildUser\":\"使用单位-接口来的-02\",\n" +
" \"gpressure\":\"公称压力-接口来的-02\",\n" +
" \"wpressure\":\"15.96\",\n" +
" \"selfWeight\":\"15.98\",\n" +
" \"thickness\":\"15.46\",\n" +
" \"permitNo\":\"气瓶许可证号-接口来的-02\",\n" +
" \"valveName\":\"阀类型名称-接口来的-02\",\n" +
" \"botSpecName\":\"钢瓶规格名称-接口来的-02\",\n" +
" \"inspectedTimes\":\"14\",\n" +
" \"valveManuFacturer\":\"阀厂家-接口来的-02\",\n" +
" \"inspectionLabel\":\"检验标牌(有/无)-接口来的-02\",\n" +
" \"thirdPartyLabel\":\"第三方标签-接口来的-02\",\n" +
" \"holeCode\":\"孔洞码-接口来的-02\",\n" +
" \"bottleStorageType\":\"存储类型(气相/液相)-接口来的-02\",\n" +
" \"payImage\":\"\",\n" +
" \"batchImage\":\"\",\n" +
" \"deviceImage\":\"\",\n" +
" \"checkImage\":\"\",\n" +
" \"botImage\":\"\",\n" +
" }\n" +
" {\n" +
" \"barCode\": \"12121212\",\n" +
" \"gzId\": \"充装记录编号-接口来的-01\",\n" +
" \"stationName\": \"充装单位-接口来的-01\",\n" +
" \"vaseCode\": \"钢印号-接口来的-01\",\n" +
" \"scaleNum\": \"称号\",\n" +
" \"fillStatrTime\": \"2024-12-16\",\n" +
" \"fillEndTime\": \"2024-12-17\",\n" +
" \"setWeight\": \"15.63\",\n" +
" \"wtNet\": \"15.98\",\n" +
" \"setBottleWeight\": \"14.56\",\n" +
" \"bottleWeight\": \"45.69\",\n" +
" \"wtGross\": \"56.69\",\n" +
" \"oprateName\": \"充装工-01\"\n" +
" },\n" +
" {\n" +
" \"barCode\": \"01199101071\",\n" +
" \"gzId\": \"充装记录编号-接口来的-02\",\n" +
" \"stationName\": \"充装单位-接口来的-02\",\n" +
" \"vaseCode\": \"钢印号-接口来的-02\",\n" +
" \"scaleNum\": \"称号\",\n" +
" \"fillStatrTime\": \"2024-12-16\",\n" +
" \"fillEndTime\": \"2024-12-17\",\n" +
" \"setWeight\": \"15.63\",\n" +
" \"wtNet\": \"15.98\",\n" +
" \"setBottleWeight\": \"14.56\",\n" +
" \"bottleWeight\": \"45.69\",\n" +
" \"wtGross\": \"56.69\",\n" +
" \"oprateName\": \"充装工-02\"\n" +
" }\n" +
"]";
JSONArray objects = JSON.parseArray(lpggasdata);
JSONObject jsonObject = objects.getJSONObject(0);
String imageStr = "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";
jsonObject.put("payImage",imageStr);
JSONObject jsonObject1 = objects.getJSONObject(1);
jsonObject1.put("payImage",imageStr);
System.out.println(objects);
// System.out.println(DESEncoder.encrypt(objects.toString(),"zhy@123."));
System.out.println(DESEncoder.encrypt(objects.toString(),"GCQYTRQ00001"));
}
......
......@@ -18,6 +18,17 @@ public class TLpgAirChargeFiles extends BaseEntity
/** id */
private Long gasAirChargeId;
/**
* 燃气企业ID
*/
private String enterpriseId;
/**
* 燃气企业名称
*/
@Excel(name = "燃气企业")
private String enterpriseName;
/** 充装记录编号 */
@Excel(name = "充装记录编号")
private Long gzId;
......@@ -182,6 +193,22 @@ public class TLpgAirChargeFiles extends BaseEntity
this.oprateName = oprateName;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getEnterpriseName() {
return enterpriseName;
}
public void setEnterpriseName(String enterpriseName) {
this.enterpriseName = enterpriseName;
}
@Override
public String toString() {
return "TLpgAirChargeFiles{" +
......
......@@ -83,4 +83,10 @@ public interface ITLpgAirChargeFilesService
*/
public Map<String,Object> importLpgAirChargeFileInfo(List<TLpgAirChargeFiles> xmbhList, boolean updateSupport, HttpServletResponse response);
/**
* 第三方对接 接收到的数据
* @param list list
* @return r
*/
public int externalDockingCreateLpgAirChargeFileInfo(List<TLpgAirChargeFiles> list);
}
......@@ -86,4 +86,11 @@ public interface ITLpgGasBottleFilesService
* @return r
*/
public int externalDockingCreateLpgGasBottleFiles(List<TLpgGasBottleFiles> list);
/**
* 根据 气瓶条码集合 查询 气瓶集合
* @param list l
* @return r
*/
public List<TLpgGasBottleFiles> queryALlByQrcodeList(List<String> list);
}
......@@ -7,7 +7,9 @@ import java.util.Map;
import java.util.stream.Collectors;
import com.zehong.common.utils.StringUtils;
import com.zehong.system.domain.TEnterpriseInfo;
import com.zehong.system.domain.TLpgGasBottleFiles;
import com.zehong.system.mapper.TEnterpriseInfoMapper;
import com.zehong.system.mapper.TLpgGasBottleFilesMapper;
import org.springframework.stereotype.Service;
import com.zehong.system.mapper.TLpgAirChargeFilesMapper;
......@@ -32,6 +34,9 @@ public class TLpgAirChargeFilesServiceImpl implements ITLpgAirChargeFilesService
@Resource
private TLpgGasBottleFilesMapper tLpgGasBottleFilesMapper;
@Resource
private TEnterpriseInfoMapper enterpriseInfoMapper;
/**
* 查询液化石油气-充装记录
*
......@@ -143,18 +148,29 @@ public class TLpgAirChargeFilesServiceImpl implements ITLpgAirChargeFilesService
return map;
}
List<TLpgAirChargeFiles> noBarCodeList = xmbhList.stream().filter(item -> StringUtils.isBlank(item.getBarCode())).collect(Collectors.toList());
List<TLpgAirChargeFiles> havaBarCodeList = xmbhList.stream().filter(item -> StringUtils.isNotBlank(item.getBarCode())).collect(Collectors.toList());
// 2024-09-14 调整 ,燃气企业也得有
List<TLpgAirChargeFiles> havaBarCodeList = xmbhList.stream()
.filter(item -> StringUtils.isNotBlank(item.getBarCode()) &&
StringUtils.isNotBlank(item.getEnterpriseName()))
.collect(Collectors.toList());
// 气瓶条码集合
List<String> collect = havaBarCodeList.stream().map(item -> item.getBarCode()).collect(Collectors.toList());
List<String> collect = havaBarCodeList.stream().map(TLpgAirChargeFiles::getBarCode).collect(Collectors.toList());
// 燃气企业结合
List<String> collectEnterprise = havaBarCodeList.stream().map(TLpgAirChargeFiles::getEnterpriseName).collect(Collectors.toList());
// 这是 上面气瓶条码 有的气瓶数据
List<TLpgGasBottleFiles> tLpgGasBottleFiles2 = tLpgGasBottleFilesMapper.queryAllByFQRcodeList(collect);
// 按照 气瓶条码 分组
Map<String, List<TLpgGasBottleFiles>> collect1 = tLpgGasBottleFiles2.stream().collect(Collectors.groupingBy(TLpgGasBottleFiles::getQrcode));
errorNum += noBarCodeList.size();
// 燃气企业结合
List<TEnterpriseInfo> tEnterpriseInfos = enterpriseInfoMapper.queryAllByEnterpriseNameList(collectEnterprise);
// 按照企业名称分组
Map<String, List<TEnterpriseInfo>> collect2 = tEnterpriseInfos.stream().collect(Collectors.groupingBy(TEnterpriseInfo::getEnterpriseName));
errorNum += (xmbhList.size() - havaBarCodeList.size());
for (TLpgAirChargeFiles tLpgAirChargeFiles : havaBarCodeList) {
......@@ -163,6 +179,11 @@ public class TLpgAirChargeFilesServiceImpl implements ITLpgAirChargeFilesService
errorNum++;
continue;
}
List<TEnterpriseInfo> tEnterpriseInfos1 = collect2.get(tLpgAirChargeFiles.getEnterpriseName());
if (tEnterpriseInfos1 == null || tEnterpriseInfos1.size() == 0) {
errorNum++;
continue;
}
successList.add(tLpgAirChargeFiles);
successNum++;
}
......@@ -182,4 +203,14 @@ public class TLpgAirChargeFilesServiceImpl implements ITLpgAirChargeFilesService
return map;
}
/**
* 第三方对接 接收到的数据
* @param list list
* @return r
*/
@Override
public int externalDockingCreateLpgAirChargeFileInfo(List<TLpgAirChargeFiles> list) {
return tLpgAirChargeFilesMapper.insertBatch(list);
}
}
......@@ -181,4 +181,14 @@ public class TLpgGasBottleFilesServiceImpl implements ITLpgGasBottleFilesService
return tLpgGasBottleFilesMapper.insertBatch(list);
}
/**
* 根据气瓶条码集合 查询 气瓶集合
* @param list l
* @return r
*/
@Override
public List<TLpgGasBottleFiles> queryALlByQrcodeList(List<String> list) {
return tLpgGasBottleFilesMapper.queryAllByFQRcodeList(list);
}
}
......@@ -19,10 +19,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="bottleWeight" column="f_bottle_weight" />
<result property="wtGross" column="f_wt_gross" />
<result property="oprateName" column="f_oprate_name" />
<result property="enterpriseId" column="enterprise_id" />
<result property="enterpriseName" column="enterpriseName" />
</resultMap>
<sql id="selectTLpgAirChargeFilesVo">
select f_gas_air_charge_id, f_gz_id, f_station_name, f_bar_code, f_vase_code, f_scale_num, f_fill_statr_time, f_fill_end_time, f_set_weight, f_wt_net, f_set_bottle_weight, f_bottle_weight, f_wt_gross, f_oprate_name from t_lpg_air_charge_files
select files.f_gas_air_charge_id, files.f_gz_id, files.f_station_name, files.f_bar_code, files.f_vase_code, files.f_scale_num,
files.f_fill_statr_time, files.f_fill_end_time, files.f_set_weight, files.f_wt_net, files.f_set_bottle_weight,
files.f_bottle_weight, files.f_wt_gross, files.f_oprate_name, info.enterprise_name as enterpriseName
from t_lpg_air_charge_files files
left join t_enterprise_info info on files.enterprise_id = info.enterprise_id
</sql>
<select id="selectTLpgAirChargeFilesList" parameterType="TLpgAirChargeFiles" resultMap="TLpgAirChargeFilesResult">
......@@ -53,7 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
insert into t_lpg_air_charge_files (f_gz_id, f_station_name, f_bar_code, f_vase_code, f_scale_num,
f_fill_statr_time, f_fill_end_time, f_set_weight, f_wt_net, f_set_bottle_weight,
f_bottle_weight, f_wt_gross, f_oprate_name)
f_bottle_weight, f_wt_gross, f_oprate_name,enterprise_id)
values
<foreach collection="list" item="item" index="index" separator=",">
(
......@@ -61,7 +67,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item.vaseCode,jdbcType=VARCHAR}, #{item.scaleNum,jdbcType=VARCHAR}, #{item.fillStatrTime},
#{item.fillEndTime},
#{item.setWeight,jdbcType=VARCHAR}, #{item.wtNet,jdbcType=VARCHAR}, #{item.setBottleWeight,jdbcType=VARCHAR},
#{item.bottleWeight,jdbcType=VARCHAR}, #{item.wtGross,jdbcType=VARCHAR}, #{item.oprateName,jdbcType=VARCHAR}
#{item.bottleWeight,jdbcType=VARCHAR}, #{item.wtGross,jdbcType=VARCHAR}, #{item.oprateName,jdbcType=VARCHAR},
#{item.enterpriseId,jdbcType=VARCHAR}
)
</foreach>
</insert>
......@@ -82,6 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bottleWeight != null">f_bottle_weight,</if>
<if test="wtGross != null">f_wt_gross,</if>
<if test="oprateName != null">f_oprate_name,</if>
<if test="enterpriseId != null">enterprise_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="gzId != null">#{gzId},</if>
......@@ -97,6 +105,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="sottleWeight != null">#{sottleWeight},</if>
<if test="wtGross != null">#{wtGross},</if>
<if test="oprateName != null">#{oprateName},</if>
<if test="enterpriseId != null">#{enterpriseId},</if>
</trim>
</insert>
......@@ -116,6 +125,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="sottleWeight != null">f_bottle_weight = #{sottleWeight},</if>
<if test="wtGross != null">f_wt_gross = #{wtGross},</if>
<if test="oprateName != null">f_oprate_name = #{oprateName},</if>
<if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if>
</trim>
where f_gas_air_charge_id = #{fGasAirChargeId}
</update>
......
......@@ -4,6 +4,13 @@
<el-form label-width="180px">
<el-row class="el-row-table">
<el-col :span="12">
<el-form-item label="燃气企业">
<span v-if="detailInfo.enterpriseName">{{ detailInfo.enterpriseName }}</span>
<span v-else>-</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="充装记录编号">
<span v-if="detailInfo.gzId">{{ detailInfo.gzId }}</span>
......
......@@ -50,6 +50,7 @@
<el-table v-loading="loading" :data="filesList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="燃气企业" align="center" prop="enterpriseName" :show-overflow-tooltip="true" />
<el-table-column label="充装记录编号" align="center" prop="gzId" />
<el-table-column label="充装单位" align="center" prop="stationName" />
<el-table-column label="气瓶条码" align="center" prop="barCode" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment