diff --git a/app/build.gradle b/app/build.gradle index c103eb5..70d8304 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ android { applicationId "com.example.beijingnopowercon" minSdk 28 targetSdk 33 - versionCode 1 + versionCode 2 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -23,8 +23,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } buildFeatures { viewBinding true @@ -51,4 +51,5 @@ dependencies { implementation 'com.journeyapps:zxing-android-embedded:4.3.0' implementation 'io.github.scwang90:refresh-layout-kernel:2.0.6' //核心必须依赖 implementation 'io.github.scwang90:refresh-footer-classics:2.0.6' //经典加载 + implementation 'com.github.bumptech.glide:glide:4.16.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 70a8ec4..349e2c0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,9 +18,21 @@ android:label="@string/app_name" android:roundIcon="@mipmap/logo" android:supportsRtl="true" - android:usesCleartextTraffic="true" android:theme="@style/Theme.BeijingNoPowerCon" + android:usesCleartextTraffic="true" tools:targetApi="31"> + + + + + + - - + + - - + + diff --git a/app/src/main/java/com/example/beijingnopowercon/LoginActivity.java b/app/src/main/java/com/example/beijingnopowercon/LoginActivity.java index 428f938..878df10 100644 --- a/app/src/main/java/com/example/beijingnopowercon/LoginActivity.java +++ b/app/src/main/java/com/example/beijingnopowercon/LoginActivity.java @@ -48,7 +48,7 @@ public class LoginActivity extends AppCompatActivity { String name = loginVm.getName(); if (pass == null || name == null || pass.isEmpty() || name.isEmpty()) return; - OkGo.get(MyApplication.url + "/login/finduser").tag(this).params("name", name).params("pass", pass).execute(new MyRecultCall(dialog, this) { + OkGo.get(MyApplication.url + "/login/finduser1").tag(this).params("name", name).params("pass", pass).execute(new MyRecultCall(dialog, this) { @Override public void onSuccess(Response response) { super.onSuccess(response); @@ -66,6 +66,7 @@ public class LoginActivity extends AppCompatActivity { startActivity(intent); finish(); + return; } Toast.makeText(context, body.getMsg(), Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/example/beijingnopowercon/MainActivity.java b/app/src/main/java/com/example/beijingnopowercon/MainActivity.java index 539bf25..269f904 100644 --- a/app/src/main/java/com/example/beijingnopowercon/MainActivity.java +++ b/app/src/main/java/com/example/beijingnopowercon/MainActivity.java @@ -24,16 +24,12 @@ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); - setSupportActionBar(binding.appBarMain.toolbar); - DrawerLayout drawer = binding.drawerLayout; NavigationView navigationView = binding.navView; - // Passing each menu ID as a set of Ids because each - // menu should be considered as top level destinations. + mAppBarConfiguration = new AppBarConfiguration.Builder( R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow) .setOpenableLayout(drawer) diff --git a/app/src/main/java/com/example/beijingnopowercon/adapter/DisposalFileAdapter.java b/app/src/main/java/com/example/beijingnopowercon/adapter/DisposalFileAdapter.java new file mode 100644 index 0000000..ee30b4b --- /dev/null +++ b/app/src/main/java/com/example/beijingnopowercon/adapter/DisposalFileAdapter.java @@ -0,0 +1,79 @@ +package com.example.beijingnopowercon.adapter; + +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + + +import com.bumptech.glide.Glide; +import com.example.beijingnopowercon.BR; +import com.example.beijingnopowercon.R; +import com.example.beijingnopowercon.data.CheckInstanceFiles; +import com.example.beijingnopowercon.databinding.ItemDisposalImgBinding; + +import java.util.List; + +/** + * @author wanghao + * @date 2024/3/11 + */ +public class DisposalFileAdapter extends RecyclerView.Adapter { + private List list; + private static Context context; + private LayoutInflater inflater; + private ItemClickCall clickCall; + public DisposalFileAdapter(Context context, ItemClickCall clickCall) { + this.context = context; + this.clickCall = clickCall; + inflater = LayoutInflater.from(context); + } + + public void setList(List list) { + this.list = list; + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + ItemDisposalImgBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_disposal_img, parent, false); + return new MyViewHolder(binding); + } + + // @SuppressLint("CheckResult") + @Override + public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { + var outstock = list.get(position); + var binding = holder.binding; + binding.setVariable(BR.vm,outstock); + Log.e("TAG", "onBindViewHolder:" + outstock.isState()); + Glide.with(context) + .load(outstock.getFaultFile()) + .into(binding.disFile); + binding.disFile.setOnClickListener(v -> clickCall.onClick(position,true)); + binding.disposalDelect.setOnClickListener(v -> clickCall.onClick(position,false)); + } + + @Override + public int getItemCount() { + return list==null?0:list.size(); + } + + class MyViewHolder extends RecyclerView.ViewHolder { + private ItemDisposalImgBinding binding; + + public MyViewHolder(ItemDisposalImgBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + + } + public interface ItemClickCall { + void onClick(int position,boolean type); + } +} diff --git a/app/src/main/java/com/example/beijingnopowercon/base/BaseFragment.java b/app/src/main/java/com/example/beijingnopowercon/base/BaseFragment.java index 97c59f0..ae57fe6 100644 --- a/app/src/main/java/com/example/beijingnopowercon/base/BaseFragment.java +++ b/app/src/main/java/com/example/beijingnopowercon/base/BaseFragment.java @@ -1,9 +1,21 @@ package com.example.beijingnopowercon.base; import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.core.content.FileProvider; import androidx.fragment.app.Fragment; + +import android.Manifest; import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Build; import android.os.Bundle; +import android.provider.MediaStore; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -14,12 +26,22 @@ import androidx.annotation.Nullable; import com.example.beijingnopowercon.dialog.LoadDialog; import com.google.gson.Gson; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; + public class BaseFragment extends Fragment { public Context context; public LoadDialog dialog; public String url; public Gson gson; + public static final int CAMERA_PHOTO = 1; + public SimpleDateFormat format= new SimpleDateFormat( "yyyyMMdd_HHmmss"); @Override public void onAttach(@NonNull Context context) { @@ -29,4 +51,53 @@ public class BaseFragment extends Fragment { url=MyApplication.url; gson=new Gson(); } + + // 拍照 + private Uri img_uri; + private File outputImage; + public void teke_photo() throws IOException { + outputImage = new File(context.getExternalCacheDir(), "output_imgage" + format.format(new Date()) + ".jpg"); + + outputImage.createNewFile(); + + if (Build.VERSION.SDK_INT >= 24) { + img_uri = FileProvider.getUriForFile(context,"com.example.beijingnopowercon" , outputImage); + } else { + img_uri = Uri.fromFile(outputImage); + } + if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)) { + Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); + intent.putExtra(MediaStore.EXTRA_OUTPUT, img_uri); + startActivityForResult(intent, CAMERA_PHOTO); + } else { + // 提示用户开户权限 拍照和读写sd卡权限 + String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; + ActivityCompat.requestPermissions(getActivity(), perms, CAMERA_PHOTO); + } + } + public void zipPhoto(){ + Bitmap compressedImageBitmap = BitmapFactory.decodeFile(outputImage.getPath()); + if (compressedImageBitmap==null) return; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + compressedImageBitmap.compress(Bitmap.CompressFormat.JPEG, 10, baos); // 将Bitmap压缩成JPEG格式 + byte[] compressedImageData = baos.toByteArray(); + // 清空字节数组输出流 + baos.reset(); + // 将压缩后的字节数组保存到文件中 + FileOutputStream fos = null; + try { + fos = new FileOutputStream(outputImage); + fos.write(compressedImageData); + fos.flush(); + fos.close(); + tekePhotoResult( img_uri.toString(),outputImage); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + public void tekePhotoResult(String fileUrl,File file){ + + } + + } diff --git a/app/src/main/java/com/example/beijingnopowercon/base/MyApplication.java b/app/src/main/java/com/example/beijingnopowercon/base/MyApplication.java index 5c9543c..4fa14ff 100644 --- a/app/src/main/java/com/example/beijingnopowercon/base/MyApplication.java +++ b/app/src/main/java/com/example/beijingnopowercon/base/MyApplication.java @@ -29,8 +29,8 @@ public class MyApplication extends Application { public static MyApplication getApplication() { return application; } - // public static String url="http://192.168.137.1:8091/api"; - public static String url="http://119.45.202.115:8091/api"; + // public static String url="http://119.45.202.115:8090/api"; + public static String url="http://10.11.184.221:8090/api"; @Override public void onCreate() { super.onCreate(); diff --git a/app/src/main/java/com/example/beijingnopowercon/data/CheckInstanceFiles.java b/app/src/main/java/com/example/beijingnopowercon/data/CheckInstanceFiles.java new file mode 100644 index 0000000..a26e62e --- /dev/null +++ b/app/src/main/java/com/example/beijingnopowercon/data/CheckInstanceFiles.java @@ -0,0 +1,37 @@ +package com.example.beijingnopowercon.data; + +import androidx.databinding.BaseObservable; + +/** + * @author wanghao + * 图片用 + * @date 2024/3/11 10:00 + */ +public class CheckInstanceFiles extends BaseObservable { + private String faultFile; + private boolean state=false; + + public boolean isState() { + return state; + } + + public void setState(boolean state) { + this.state = state; + + } + + public String getFaultFile() { + return faultFile; + } + + public void setFaultFile(String faultFile) { + this.faultFile = faultFile; + } + + @Override + public String toString() { + return "CheckInstanceFiles{" + + "faultFile='" + faultFile + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/example/beijingnopowercon/data/DeviceBaseFault.java b/app/src/main/java/com/example/beijingnopowercon/data/DeviceBaseFault.java new file mode 100644 index 0000000..70ce0ef --- /dev/null +++ b/app/src/main/java/com/example/beijingnopowercon/data/DeviceBaseFault.java @@ -0,0 +1,75 @@ +package com.example.beijingnopowercon.data; + +/** + * 故障类别维护对象 device_base_fault + * + * @author wangh + * @date 2025-09-24 + */ +public class DeviceBaseFault { + /** + * 主键 + */ + private Long objid; + /** + * 故障代码 + */ + private String faultCode; + + /** + * 故障名称 + */ + private String faultName; + + /** + * 故障说明 + */ + private String faultInfo; + + /** + * 应急措施 + */ + private String emergencyMeasures; + + public Long getObjid() { + return objid; + } + + public void setObjid(Long objid) { + this.objid = objid; + } + + public String getFaultCode() { + return faultCode; + } + + public void setFaultCode(String faultCode) { + this.faultCode = faultCode; + } + + public String getFaultName() { + return faultName; + } + + public void setFaultName(String faultName) { + this.faultName = faultName; + } + + public String getFaultInfo() { + return faultInfo; + } + + public void setFaultInfo(String faultInfo) { + this.faultInfo = faultInfo; + } + + public String getEmergencyMeasures() { + return emergencyMeasures; + } + + public void setEmergencyMeasures(String emergencyMeasures) { + this.emergencyMeasures = emergencyMeasures; + } + + +} diff --git a/app/src/main/java/com/example/beijingnopowercon/data/DeviceBeen.java b/app/src/main/java/com/example/beijingnopowercon/data/DeviceBeen.java new file mode 100644 index 0000000..b57704b --- /dev/null +++ b/app/src/main/java/com/example/beijingnopowercon/data/DeviceBeen.java @@ -0,0 +1,73 @@ +package com.example.beijingnopowercon.data; + +/** + * @author wanghao + * @date 2024/4/1 10:00 + */ +public class DeviceBeen { + + + private int deviceId; + private String deviceCode; + private String deviceName; + private String deviceLocation; + private Long deviceTypeId; + private String deviceSpec; + private int deviceStatus; + + public int getDeviceId() { + return deviceId; + } + + public void setDeviceId(int deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceCode() { + return deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getDeviceLocation() { + return deviceLocation; + } + + public void setDeviceLocation(String deviceLocation) { + this.deviceLocation = deviceLocation; + } + + public Long getDeviceTypeId() { + return deviceTypeId; + } + + public void setDeviceTypeId(Long deviceTypeId) { + this.deviceTypeId = deviceTypeId; + } + + public String getDeviceSpec() { + return deviceSpec; + } + + public void setDeviceSpec(String deviceSpec) { + this.deviceSpec = deviceSpec; + } + + public int getDeviceStatus() { + return deviceStatus; + } + + public void setDeviceStatus(int deviceStatus) { + this.deviceStatus = deviceStatus; + } +} diff --git a/app/src/main/java/com/example/beijingnopowercon/data/DeviceInfo.java b/app/src/main/java/com/example/beijingnopowercon/data/DeviceInfo.java index eb43bee..70855c2 100644 --- a/app/src/main/java/com/example/beijingnopowercon/data/DeviceInfo.java +++ b/app/src/main/java/com/example/beijingnopowercon/data/DeviceInfo.java @@ -57,13 +57,40 @@ public class DeviceInfo { private Double defaultTime; private String remark; - /** 用户ID */ + /** + * 用户ID + */ private Long userId; - /** 部门ID */ + /** + * 部门ID + */ private Long deptId; private String useUser; + // 锁编码 + private String openCode; + private String useStateName; + private String deviceStateName; + + private String asName; + + public String getAsName() { + return asName; + } + + public void setAsName(String asName) { + this.asName = asName; + } + + public String getOpenCode() { + return openCode; + } + + public void setOpenCode(String openCode) { + this.openCode = openCode; + } + public String getUseUser() { return useUser; } @@ -164,32 +191,39 @@ public class DeviceInfo { return deviceState; } - private String useStateName; - private String deviceStateName; + public void setDeviceState(String deviceState) { + this.deviceState = deviceState; + } public String getUseStateName() { - if (useState.equals("1")){ + if (useState.equals("1")) { return "使用中"; } return "空闲"; } + public void setUseStateName(String useStateName) { + this.useStateName = useStateName; + } + public String getDeviceStateName() { - if (useState.equals("1")){ - return "使用中"; - }else if (deviceState.equals("0")){ + if (deviceState.equals("0")) { return "停用"; - }else if (deviceState.equals("1")){ - return "正常"; - }else if (deviceState.equals("2")){ + } else if (deviceState.equals("2")) { return "维修"; + } else if (useState.equals("1")) { + return "使用中"; + + } else if (useState.equals("0")) { + return "空闲"; + } return deviceStateName; } - public void setDeviceState(String deviceState) { - this.deviceState = deviceState; + public void setDeviceStateName(String deviceStateName) { + this.deviceStateName = deviceStateName; } public String getLocationName() { diff --git a/app/src/main/java/com/example/beijingnopowercon/data/DeviceRepartBills.java b/app/src/main/java/com/example/beijingnopowercon/data/DeviceRepartBills.java new file mode 100644 index 0000000..352b2a2 --- /dev/null +++ b/app/src/main/java/com/example/beijingnopowercon/data/DeviceRepartBills.java @@ -0,0 +1,159 @@ +package com.example.beijingnopowercon.data; + +import android.view.View; +import android.widget.AdapterView; + +import androidx.databinding.BaseObservable; + +import java.util.List; + +/** + * 维修工单对象 device_repart_bills + * + * @author ruoyi + * @date 2022-05-26 + */ +public class DeviceRepartBills extends BaseObservable { + + /** + * 主键 + */ + private Long objid; + + /** + * 维修单号 + */ + private String workOrder; + + /** + * 设备编号 + */ + private String deviceID; + + /** + * 故障类别 + */ + private Long faultType; + + /** + * 涉及操作 + */ + private String operation; + + /** + * 照片路径 + */ + private String pictures; + + /** + * 工单状态 0-待维修,1-维修中,2-完成,3-转为外协 + */ + private Long orderState; + + /** + * 工单来源 + */ + private Long billsType; + private String remark; + private String createBy; + + private List list; + + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public void onItemSelected(AdapterView parent, View view, int position, long id) { + setFaultType(list.get(position).getObjid()); + } + + + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + notifyChange(); + } + + public Long getObjid() { + return objid; + } + + public void setObjid(Long objid) { + this.objid = objid; + } + + public String getWorkOrder() { + return workOrder; + } + + public void setWorkOrder(String workOrder) { + this.workOrder = workOrder; + } + + public String getDeviceID() { + return deviceID; + } + + public void setDeviceID(String deviceID) { + this.deviceID = deviceID; + } + + public Long getFaultType() { + return faultType; + } + + public void setFaultType(Long faultType) { + this.faultType = faultType; + } + + public String getOperation() { + return operation; + } + + public void setOperation(String operation) { + this.operation = operation; + notifyChange(); + } + + public String getPictures() { + return pictures; + } + + public void setPictures(String pictures) { + this.pictures = pictures; + } + + public Long getOrderState() { + return orderState; + } + + public void setOrderState(Long orderState) { + this.orderState = orderState; + } + + public Long getBillsType() { + return billsType; + } + + public void setBillsType(Long billsType) { + this.billsType = billsType; + } + +} diff --git a/app/src/main/java/com/example/beijingnopowercon/data/Dict.java b/app/src/main/java/com/example/beijingnopowercon/data/Dict.java new file mode 100644 index 0000000..d6881a9 --- /dev/null +++ b/app/src/main/java/com/example/beijingnopowercon/data/Dict.java @@ -0,0 +1,52 @@ +package com.example.beijingnopowercon.data; + +/** + * @author wanghao + * @date 2024/3/22 10:36 + */ +public class Dict { + private String dictLabel; + private String dictValue; + private String dictType; + private String dictCode; + + public String getDictLabel() { + return dictLabel; + } + + public void setDictLabel(String dictLabel) { + this.dictLabel = dictLabel; + } + + public String getDictValue() { + return dictValue; + } + + public void setDictValue(String dictValue) { + this.dictValue = dictValue; + } + + public String getDictType() { + return dictType; + } + + public void setDictType(String dictType) { + this.dictType = dictType; + } + + public String getDictCode() { + return dictCode; + } + + public void setDictCode(String dictCode) { + this.dictCode = dictCode; + } + + @Override + public String toString() { + return "Dict{" + + "dictLabel='" + dictLabel + '\'' + + ", dictValue='" + dictValue + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/example/beijingnopowercon/data/Outsourcing.java b/app/src/main/java/com/example/beijingnopowercon/data/Outsourcing.java new file mode 100644 index 0000000..2fb35d2 --- /dev/null +++ b/app/src/main/java/com/example/beijingnopowercon/data/Outsourcing.java @@ -0,0 +1,43 @@ +package com.example.beijingnopowercon.data; + +/** + * @author wanghao + * @date 2024/4/1 14:02 + * 外协单位 + */ +public class Outsourcing { + + /** + * outsrcId : 1 + * outsrcCode : code0001 + * outsrcName : 青岛软控 + */ + + private int outsrcId; + private String outsrcCode; + private String outsrcName; + + public int getOutsrcId() { + return outsrcId; + } + + public void setOutsrcId(int outsrcId) { + this.outsrcId = outsrcId; + } + + public String getOutsrcCode() { + return outsrcCode; + } + + public void setOutsrcCode(String outsrcCode) { + this.outsrcCode = outsrcCode; + } + + public String getOutsrcName() { + return outsrcName; + } + + public void setOutsrcName(String outsrcName) { + this.outsrcName = outsrcName; + } +} diff --git a/app/src/main/java/com/example/beijingnopowercon/dialog/ImgDialog.java b/app/src/main/java/com/example/beijingnopowercon/dialog/ImgDialog.java new file mode 100644 index 0000000..bae5462 --- /dev/null +++ b/app/src/main/java/com/example/beijingnopowercon/dialog/ImgDialog.java @@ -0,0 +1,39 @@ +package com.example.beijingnopowercon.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; + +import com.bumptech.glide.Glide; +import com.example.beijingnopowercon.R; +import com.example.beijingnopowercon.databinding.DialogImgBinding; + +/** + * @author wanghao + * @date 2024/2/22 11:07 + */ +public class ImgDialog extends Dialog { + private DialogImgBinding binding; + + private Context context; + + public void setRawReturn(String url) { + Glide.with(context).load(url).into(binding.dialogImg); + binding.executePendingBindings(); + show(); + + } + + public ImgDialog(@NonNull Context context) { + super(context,R.style.dialog); + this.context=context; + binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.dialog_img, null, false); + setContentView(binding.getRoot()); + binding.dialogImgDis.setOnClickListener(v -> dismiss()); + } + + +} diff --git a/app/src/main/java/com/example/beijingnopowercon/ui/home/HomeFragment.java b/app/src/main/java/com/example/beijingnopowercon/ui/home/HomeFragment.java index c0f58db..45b08d4 100644 --- a/app/src/main/java/com/example/beijingnopowercon/ui/home/HomeFragment.java +++ b/app/src/main/java/com/example/beijingnopowercon/ui/home/HomeFragment.java @@ -37,14 +37,27 @@ public class HomeFragment extends BaseFragment implements SanInfoDialog.SanInfoD private FragmentHomeBinding binding; private SanInfoDialog infoDialog; private DeviceListAdapter adapter; + private boolean buttonClick; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentHomeBinding.inflate(inflater, container, false); root = binding.getRoot(); binding.homeSan.setOnClickListener(v -> { Intent intent = new Intent(getActivity(), CustomScannerActivity.class); + buttonClick = true; startActivityForResult(intent, IntentIntegrator.REQUEST_CODE); + + selectDeviceInfo("DWSW0001"); }); + + binding.homeSanClose.setOnClickListener(v -> { + Intent intent = new Intent(getActivity(), CustomScannerActivity.class); + buttonClick = false; + // startActivityForResult(intent, IntentIntegrator.REQUEST_CODE); + closeDevice("DWSW0001"); + }); + + infoDialog = new SanInfoDialog(context); infoDialog.setCall(this); adapter = new DeviceListAdapter(context); @@ -62,7 +75,7 @@ public class HomeFragment extends BaseFragment implements SanInfoDialog.SanInfoD Log.e("TAG", "onCreateView:"); return root; } - + // 查询所有设备列表 private void initRequest() { OkGo.post(url + "/home/selectDeviceInfoList").execute(new MyRecultCall(dialog, context) { @Override @@ -81,6 +94,7 @@ public class HomeFragment extends BaseFragment implements SanInfoDialog.SanInfoD }); } + // 返回扫码信息 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -91,11 +105,30 @@ public class HomeFragment extends BaseFragment implements SanInfoDialog.SanInfoD Snackbar.make(root, "扫描取消", Snackbar.LENGTH_LONG).show(); } else { // Toast.makeText(context, "扫描成功", Toast.LENGTH_SHORT).show(); - selectDeviceInfo(result.getContents()); + if (buttonClick) { + selectDeviceInfo(result.getContents()); + } else { + closeDevice(result.getContents()); + } } } } } + // 关锁 + private void closeDevice(String contents) { + OkGo.post(url + "/home/closeDevice").params("code", contents).execute(new MyRecultCall(dialog, context) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + MyResult body = response.body(); + Toast.makeText(getContext(), body.getMsg(), Toast.LENGTH_SHORT).show(); + if (body.getCode() == 0) { + initRequest(); + } + } + }); + + } // 查询设备 private void selectDeviceInfo(String code) { @@ -123,25 +156,27 @@ public class HomeFragment extends BaseFragment implements SanInfoDialog.SanInfoD binding = null; } - + // 弹窗确认开锁 @Override public void openDeviceLockRequest(DeviceInfo deviceInfo) { deviceInfo.setUserId(SharedPreferencesUtils.getLong("userId", 0L)); deviceInfo.setDeptId(SharedPreferencesUtils.getLong("deptId", 0L)); deviceInfo.setUseUser(SharedPreferencesUtils.getstring("user", null)); - OkGo.post(url + "/home/openDeviceLock").upRequestBody(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), gson.toJson(deviceInfo))).execute(new MyRecultCall(dialog, context) { - @Override - public void onSuccess(Response response) { - super.onSuccess(response); - MyResult body = response.body(); - if (body.getCode() == 0) { - Toast.makeText(context, "开锁成功", Toast.LENGTH_SHORT).show(); - infoDialog.dismiss(); - initRequest(); - return; - } - Toast.makeText(context, body.getMsg(), Toast.LENGTH_LONG).show(); - } - }); + OkGo.post(url + "/home/openDeviceLock") + .upRequestBody(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), + gson.toJson(deviceInfo))).execute(new MyRecultCall(dialog, context) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + MyResult body = response.body(); + if (body.getCode() == 0) { + Toast.makeText(context, "开锁成功", Toast.LENGTH_SHORT).show(); + infoDialog.dismiss(); + initRequest(); + return; + } + Toast.makeText(context, body.getMsg(), Toast.LENGTH_LONG).show(); + } + }); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/beijingnopowercon/ui/slideshow/SlideshowFragment.java b/app/src/main/java/com/example/beijingnopowercon/ui/slideshow/SlideshowFragment.java index f7c4cf8..fb6100b 100644 --- a/app/src/main/java/com/example/beijingnopowercon/ui/slideshow/SlideshowFragment.java +++ b/app/src/main/java/com/example/beijingnopowercon/ui/slideshow/SlideshowFragment.java @@ -1,32 +1,195 @@ package com.example.beijingnopowercon.ui.slideshow; +import android.annotation.SuppressLint; +import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListPopupWindow; +import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProvider; +import androidx.annotation.Nullable; +import com.example.beijingnopowercon.R; +import com.example.beijingnopowercon.adapter.DisposalFileAdapter; +import com.example.beijingnopowercon.base.BaseFragment; +import com.example.beijingnopowercon.data.CheckInstanceFiles; +import com.example.beijingnopowercon.data.DeviceBaseFault; +import com.example.beijingnopowercon.data.DeviceInfo; +import com.example.beijingnopowercon.data.DeviceRepartBills; import com.example.beijingnopowercon.databinding.FragmentSlideshowBinding; +import com.example.beijingnopowercon.dialog.ImgDialog; +import com.example.beijingnopowercon.okgo.MyRecultCall; +import com.example.beijingnopowercon.okgo.MyResult; +import com.example.beijingnopowercon.uitls.SharedPreferencesUtils; +import com.google.android.material.snackbar.Snackbar; +import com.google.gson.reflect.TypeToken; +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.model.Response; -public class SlideshowFragment extends Fragment { +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class SlideshowFragment extends BaseFragment { private FragmentSlideshowBinding binding; + private View view; + private ListPopupWindow lpw; + private DeviceRepartBills deviceRepartBills; + private List designOperations; + private List designList; + private DisposalFileAdapter fileAdapter; + private List filesList; + private List files; + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - SlideshowViewModel slideshowViewModel = - new ViewModelProvider(this).get(SlideshowViewModel.class); binding = FragmentSlideshowBinding.inflate(inflater, container, false); - View root = binding.getRoot(); + view = binding.getRoot(); + binding.selectNameView.setOnClickListener(v -> { + // startActivityForResult(new Intent(getActivity(), CustomScannerActivity.class), IntentIntegrator.REQUEST_CODE); + selectDeviceInfo("DWSW0001"); + + }); + + binding.bxDesOpe.setOnClickListener(v -> lpw.show()); + binding.disposalFileAdd.setOnClickListener(v -> { + try { + teke_photo(); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + binding.bxSubmitButton.setOnClickListener(v -> { + deviceRepartBills.setCreateBy(SharedPreferencesUtils.getstring("user",null)); + OkGo.post(url + "/bx/subment") + .params("json", gson.toJson(deviceRepartBills)) + .addFileParams("file", files) + .execute(new MyRecultCall(dialog, context) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + MyResult body = response.body(); + if (body.getCode() == 0) { + files.forEach(File::delete); + filesList.clear(); + fileAdapter.notifyDataSetChanged(); + binding.setDevice(null); + deviceRepartBills.setOperation(null); + deviceRepartBills.setRemark(null); + return; + } + Snackbar.make(view, body.getMsg(), Snackbar.LENGTH_LONG).show(); + } + }); + + }); + + return view; + + + } + + @SuppressLint("NotifyDataSetChanged") + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + designList = Arrays.asList(getResources().getStringArray(R.array.open)); + initFaultType(); + initRequestLpw(); + deviceRepartBills = new DeviceRepartBills(); + binding.setVm(deviceRepartBills); + designOperations = new ArrayList<>(); + ImgDialog imgDialog = new ImgDialog(context); + filesList = new ArrayList<>(10); + files = new ArrayList<>(10); + fileAdapter = new DisposalFileAdapter(context, (position, type) -> { + if (type) { + imgDialog.setRawReturn(filesList.get(position).getFaultFile()); + return; + } + filesList.remove(position); + files.remove(position); + fileAdapter.notifyDataSetChanged(); + }); + fileAdapter.setList(filesList); + binding.setAdapter1(fileAdapter); + + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == IntentIntegrator.REQUEST_CODE) { + IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); + if (result != null) { + if (result.getContents() == null) { + Snackbar.make(view, "扫描取消", Snackbar.LENGTH_LONG).show(); + } else { + Snackbar.make(view, "扫描成功", Snackbar.LENGTH_LONG).show(); + + selectDeviceInfo(result.getContents()); + } + } + } else if (requestCode == CAMERA_PHOTO) { + zipPhoto(); + } + } + + // 查询设备 + private void selectDeviceInfo(String code) { + binding.selectNameView.setText(code); + OkGo.post(url + "/home/selectDeviceInfo").params("code", code).execute(new MyRecultCall(dialog, context) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + MyResult body = response.body(); + if (body.getCode() == 0) { + DeviceInfo deviceInfo = gson.fromJson(body.getDataJson(), DeviceInfo.class); + binding.setDevice(deviceInfo); + deviceRepartBills.setDeviceID(String.valueOf(deviceInfo.getObjId())); + return; + } + Toast.makeText(context, body.getMsg(), Toast.LENGTH_SHORT).show(); + } + }); + } + + private void initFaultType() { + + OkGo.post(url + "/fault/selectFaultList") + .execute(new MyRecultCall(dialog, context) { + @Override + public void onSuccess(Response response) { + MyResult body = response.body(); + if (body.getCode() == 0) { + List list = gson.fromJson(body.getDataJson(), new TypeToken>() { + }.getType()); + if (list == null || list.isEmpty()) return; + List tagList = new ArrayList<>(list.size()); + list.forEach(t -> tagList.add(t.getFaultCode() + " - " + t.getFaultName())); + binding.setFaultTypes(tagList); + deviceRepartBills.setList(list); + return; + } + Toast.makeText(context, body.getMsg(), Toast.LENGTH_SHORT).show(); + } + }); + + - final TextView textView = binding.textSlideshow; - slideshowViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); - return root; } @Override @@ -34,4 +197,44 @@ public class SlideshowFragment extends Fragment { super.onDestroyView(); binding = null; } + + private void initRequestLpw() { + + lpw = new ListPopupWindow(context); + lpw.setAnchorView(binding.bxDesOpe); + + lpw.setAdapter(new ArrayAdapter<>(context, + androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, designList)); + + lpw.setOnItemClickListener((parent, view, position, id) -> { + String tag = designList.get(position); + + if (designOperations.contains(tag)) { + designOperations.remove(tag); + + } else { + designOperations.add(tag); + } + String replace = designOperations.toString() + .replaceFirst("\\[", "") + .replace("]", ""); + binding.bxDesOpe.setText(replace); + + deviceRepartBills.setOperation(replace); + lpw.dismiss(); + }); + + } + + @SuppressLint("NotifyDataSetChanged") + @Override + public void tekePhotoResult(String fileUrl, File file) { + super.tekePhotoResult(fileUrl, file); + CheckInstanceFiles checkInstanceFiles = new CheckInstanceFiles(); + checkInstanceFiles.setFaultFile(fileUrl); + checkInstanceFiles.setState(true); + filesList.add(checkInstanceFiles); + fileAdapter.notifyDataSetChanged(); + files.add(file); + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_slideshow.xml b/app/src/main/res/drawable/ic_menu_slideshow.xml index 5e9e163..c3293b9 100644 --- a/app/src/main/res/drawable/ic_menu_slideshow.xml +++ b/app/src/main/res/drawable/ic_menu_slideshow.xml @@ -1,9 +1,31 @@ + + android:width="1024dp" + android:height="1024dp" + android:viewportWidth="1024" + android:viewportHeight="1024"> + - + android:fillColor="#000000" + android:pathData="M652,64 C691.187,64,724.524,89.044,736.879,124 L802,124 +C851.209,124,891.193,163.493,891.988,212.512 L892,214 L892,870 +C892,919.209,852.507,959.193,803.488,959.988 L802,960 L222,960 +C172.791,960,132.807,920.507,132.012,871.488 L132,870 L132,214 +C132,164.791,171.493,124.807,220.512,124.012 L222,124 L287.121,124 +C299.476,89.044,332.813,64,372,64 Z M282,184 L222,184 +C205.597,184,192.269,197.164,192.004,213.504 L192,214 L192,870 +C192,886.403,205.164,899.731,221.504,899.996 L222,900 L802,900 +C818.403,900,831.731,886.836,831.996,870.496 L832,870 L832,214 +C832,197.597,818.836,184.269,802.496,184.004 L802,184 L742,184 L742,204 +C742,225.87,724.448,243.641,702.661,243.995 L702,244 L322,244 +C299.909,244,282,226.091,282,204 L282,184 Z M512,330 +C647.31,330,757,439.69,757,575 S647.31,820,512,820 S267,710.31,267,575 +S376.69,330,512,330 Z M512,390 C409.827,390,327,472.827,327,575 +S409.827,760,512,760 S697,677.173,697,575 S614.173,390,512,390 Z M512,652 +C528.569,652,542,665.431,542,682 C542,698.569,528.569,712,512,712 +C495.431,712,482,698.569,482,682 C482,665.431,495.431,652,512,652 Z M512,430 +C528.569,430,542,443.431,542,460 L542,602 C542,618.569,528.569,632,512,632 +C495.431,632,482,618.569,482,602 L482,460 C482,443.431,495.431,430,512,430 Z +M652,124 L372,124 C355.431,124,342,137.431,342,154 L342,184 L682,184 L682,154 +C682,137.597,668.836,124.269,652.496,124.004 L652,124 Z" /> + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_xl.png b/app/src/main/res/drawable/ic_xl.png new file mode 100644 index 0000000..9446e21 Binary files /dev/null and b/app/src/main/res/drawable/ic_xl.png differ diff --git a/app/src/main/res/drawable/san_text_bg.xml b/app/src/main/res/drawable/san_text_bg.xml new file mode 100644 index 0000000..25671e0 --- /dev/null +++ b/app/src/main/res/drawable/san_text_bg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/text_bg.xml b/app/src/main/res/drawable/text_bg.xml new file mode 100644 index 0000000..4632687 --- /dev/null +++ b/app/src/main/res/drawable/text_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_img.xml b/app/src/main/res/layout/dialog_img.xml new file mode 100644 index 0000000..0dc4e71 --- /dev/null +++ b/app/src/main/res/layout/dialog_img.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + +